commit ff3bd0602fa3705133cc55ef6a35d71c4f241c45 Author: eduardo.velasques Date: Sun Mar 20 18:17:05 2022 +0000 Primeira versão. diff --git a/.editor.config b/.editor.config new file mode 100644 index 0000000..03f7253 --- /dev/null +++ b/.editor.config @@ -0,0 +1,6 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..47b201a --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ + +node_modules/ +.DS_Store +*.log +.idea/ +.metadata/ +.vscode +package-lock.json + +/trash/* + +.Trash + +*~* +*#* + +config/_development.json +config/_production.json + +dbs/ + +public/scripts/main.* + +storage/database/ diff --git a/.netuno.json b/.netuno.json new file mode 100644 index 0000000..fe9f83d --- /dev/null +++ b/.netuno.json @@ -0,0 +1,137 @@ +{ + "name": "cluar", + "description": "A ready to use solution for content management and multilingual websites using Netuno, ReactJS and Ant Design.", + "type": "app", + "config": { + "development": { + "cron": {"jobs": []}, + "settings": { + "public": {}, + "cluar": { + "website": { + "url": "http://localhost:3000", + "name": "Website Name", + "analytics": null, + "mapbox": { + "dark": false, + "accessToken": null + }, + "services": { + "api": "http://localhost:9000/services/" + } + }, + "uglifyjs": false + } + }, + "cors": [{ + "origins": [ "*" ], + "enabled": true + }], + "smtp": {}, + "name": "cluar", + "setup": { + "schema": { + "execution": true, + "auto_create": true + }, + "scripts": {"execution": true}, + "enabled": true + }, + "language": "en_GB", + "firebase": { + "app_name": "", + "database_url": "", + "key_file": "", + "listener_secret": "" + }, + "locale": "en_GB", + "remote": {}, + "commands": [ + { + "path": "ui", + "command": "npm run watch", + "enabled": true + }, + { + "path": "website", + "command": "npm start", + "install": "npm install --force", + "enabled": true + } + ], + "db": {"default": { + "password": "", + "engine": "h2", + "port": "", + "host": "", + "name": "cluar", + "username": "" + }} + }, + "production": { + "cron": {"jobs": []}, + "settings": { + "public": {}, + "cluar": { + "website": { + "url": "http://localhost:3000", + "name": "Website Name", + "analytics": null, + "mapbox": { + "dark": false, + "accessToken": null + }, + "services": { + "api": "http://localhost:9000/services/" + } + }, + "uglifyjs": false + } + }, + "cors": [{ + "origins": [ "*" ], + "enabled": true + }], + "smtp": {}, + "name": "cluar", + "setup": { + "schema": { + "execution": true, + "auto_create": true + }, + "scripts": {"execution": true}, + "enabled": true + }, + "language": "en_GB", + "firebase": { + "app_name": "", + "database_url": "", + "key_file": "", + "listener_secret": "" + }, + "locale": "en_GB", + "remote": {}, + "commands": [ + { + "path": "ui", + "command": "npm run watch", + "enabled": false + }, + { + "path": "website", + "command": "npm start", + "install": "npm install --force", + "enabled": false + } + ], + "db": {"default": { + "password": "", + "engine": "h2", + "port": "", + "host": "", + "name": "cluar", + "username": "" + }} + } + } +} \ No newline at end of file diff --git a/README-pt_PT.md b/README-pt_PT.md new file mode 100644 index 0000000..12af391 --- /dev/null +++ b/README-pt_PT.md @@ -0,0 +1,88 @@ +![Logo](https://raw.githubusercontent.com/netuno-org/cluar/main/docs/logo.svg) + +# CLUAR CMS + +Uma solução pronta para gestão de conteúdos e websites multilíngue utilizando [Netuno](https://www.netuno.org/), [ReactJS](https://reactjs.org/) e [Ant Design](https://ant.design/). + +## Requisito + +### Plataforma Netuno + +[Siga os passos aqui](https://doc.netuno.org/docs/pt-PT/installation/) + +## Documentação + +[Documentação Geral do CLUAR CMS](docs/README-pt_PT.md) + +## Instalação Automática da Aplicação + +``` +./netuno app github=netuno-org/cluar +``` + +### Execução + +Inicie o servidor Netuno: + +``` +./netuno server app=cluar +``` + +> Pode demorar porque é a primeira vez e a instalação do NPM será executada nas pastas `ui` e` website` dentro da pasta raiz do aplicativo. + +:warning: Se tiver o error: + +``` + npm ERR! code ERESOLVE + npm ERR! ERESOLVE unable to resolve dependency tree +``` + +Então execute o comando abaixo dentro da pasta `website`: + +`npm install --force` + +:white_check_mark: Não é obrigatório, mas é recomendado renomar a pasta da aplicação `(Netuno Root directory)/apps/cluar/` para o nome desejado, e não esqueça do parâmetro `name` nas configurações: + +`config/_development.json` + +`config/_production.json` + +> Lembre-se de iniciar o servidor Netuno com seu novo nome de aplicativo. + +## Processo Manual + +### Clone e Instalação + +Crie uma nova app com o Netuno denominada `cluar` executando (no diretório raíz do Netuno) + +`./netuno app name=cluar` + +e selecionando as configurações desejadas (tipo de base de dados, nome da base de dados e idioma da aplicação). + +Depois clone este projeto para o diretório `(Netuno Root directory)/apps/cluar/`. + +Depois instale as dependências NPM excutando + +`npm install --force` + +no diretório `cluar/website/`. + +### Configuração + +Copie o ficheiro de exemplo de configuração executando o seguinte + +`cp config/sample.json config/_development.json` (certifique-se do parâmetro `name`) + +e modifique de acordo com a configuração do seu ambiente local. + +### Execução + +No diretório raíz do Netuno execute + +`./netuno server app=cluar` + +que irá iniciar o servidor de backend e depois execute no diretório `(cluar app directory)/website/` o seguinte + +`npm run start` + +para iniciar o servidor de frontend. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d267e8f --- /dev/null +++ b/README.md @@ -0,0 +1,83 @@ +![Logo](https://raw.githubusercontent.com/netuno-org/cluar/main/docs/logo.svg) + +# CLUAR CMS + +A ready to use solution for content management and multilingual websites using [Netuno](https://www.netuno.org/), [ReactJS](https://reactjs.org/) and [Ant Design](https://ant.design/). + +## Requirement + +#### Netuno Platform + +[Follow the steps here](https://doc.netuno.org/docs/en/installation/) + +## Automatic Application Install + +``` +./netuno app github=netuno-org/cluar +``` + +### Running + +Start the Netuno Server: + +``` +./netuno server app=cluar +``` + +> May take while because is the first time and NPM Install will run to `ui` and `website` folder inside the application root folder. + +:warning: If you got this error: + +``` + npm ERR! code ERESOLVE + npm ERR! ERESOLVE unable to resolve dependency tree +``` +Then execute the command below inside the `website` folder: + +`npm install --force` + +:white_check_mark: Is not required, but is recommended to rename the app folder `(Netuno Root directory)/apps/cluar/` to your desired name, and do not forget the `name` parameter in the configurations: + +`config/_development.json` + +`config/_production.json` + +> Remember to restart the Netuno Server with your new app name. + +## From Scratch + +### Clone and Setup + +Create an app with Netuno named `cluar` by running (in the Netuno root directory) + +`./netuno app name=cluar` + +and selecting the desired configurations (database type, database name and app language). + +Then clone this project to the newly created `(Netuno Root directory)/apps/cluar/` directory. + +Then install the NPM dependencies by running + +`npm install --force` + +in the `cluar/website/` directory. + +### Configuration + +You'll need to copy the sample configuration file by running + +`cp config/sample.json config/_development.json` (be sure the `name` parameter) + +and modifying to match your local environment configuration. + +### Running + +In the Netuno root directory run + +`./netuno server app=cluar` + +to start the backend server and then in the `(cluar app directory)/website/` run + +`npm run start` + +to start the frontend server. diff --git a/config/_development.js b/config/_development.js new file mode 100644 index 0000000..9b3a150 --- /dev/null +++ b/config/_development.js @@ -0,0 +1,3 @@ +/* + * Development dynamic configurations is here. + */ diff --git a/config/_production.js b/config/_production.js new file mode 100644 index 0000000..3f91075 --- /dev/null +++ b/config/_production.js @@ -0,0 +1,3 @@ +/* + * Production dynamic configurations is here. + */ diff --git a/config/icon.png b/config/icon.png new file mode 100644 index 0000000..193a76b Binary files /dev/null and b/config/icon.png differ diff --git a/config/sample.json b/config/sample.json new file mode 100644 index 0000000..fdb183e --- /dev/null +++ b/config/sample.json @@ -0,0 +1,53 @@ +{ + "cron": {"jobs": []}, + "settings": { + "public": {}, + "website": { + "origin": "http://localhost:3000" + }, + "uglifyjs": false + }, + "cors": [{ + "origin": "*", + "enabled": true + }], + "smtp": {}, + "name": "cluar", + "setup": { + "schema": { + "execution": true, + "auto_create": true + }, + "scripts": {"execution": true}, + "enabled": true + }, + "language": "en_GB", + "firebase": { + "app_name": "", + "database_url": "", + "key_file": "", + "listener_secret": "" + }, + "locale": "en_GB", + "remote": {}, + "commands": [ + { + "path": "ui", + "command": "npm run watch", + "enabled": true + }, + { + "path": "website", + "command": "npm start", + "enabled": true + } + ], + "db": {"default": { + "password": "", + "engine": "h2", + "port": "", + "host": "", + "name": "cluar", + "username": "" + }} +} \ No newline at end of file diff --git a/docs/README-pt_PT.md b/docs/README-pt_PT.md new file mode 100644 index 0000000..fa66d5d --- /dev/null +++ b/docs/README-pt_PT.md @@ -0,0 +1,113 @@ + +# Documentação + +O CLUAR CMS facilita a criação de websites utilizando ReactJS mas com a manutenção dos conteúdos, navegação, páginas, idiomas, configurações e muito mais, através de um backoffice fornecido pela plataforma Netuno. + +Para quem está começando a aprender sobre ReactJS & CSS vai conseguir criar um website moderno e customizado de uma maneira muito prática e intuitiva. + +Para quem já domina ReactJS & CSS vai conseguir reduzir muito o tempo de implementação de websites dinâmico com a gestão dos conteúdos, assim poderá focar mais no design e em customizações avançadas. + +## Visão Geral + +Estes são os principais mecanismos que o CLUAR CMS oferece por padrão: + +1. [Página](page/README-pt_PT.md) +2. [Idioma](language/README-pt_PT.md) +3. [Conteúdo](content/README-pt_PT.md) +4. [Estandarte](banner/README-pt_PT.md) +5. [Listagem](listing/README-pt_PT.md) +6. [Ação](action/README-pt_PT.md) +7. [Dicionário](dictionary/README-pt_PT.md) +8. [Configuração](configuration/README-pt_PT.md) +9. [Funcionalidade](functionality/README-pt_PT.md) + +#### Estrutura do Código do Website + +O código está organizado da seguinte forma: + +- `website/src/base` + Contém os componentes de cabeçalho (`header` e `menu`) e o rodapé (`footer`), e ainda o alerta de privacidade de cookies. + +- `website/src/common` + Código essencial e utíl de modo geral, e ainda o motor de processamento das páginas (`Builder`) + +- `website/src/components` + Componentes para ser utilizados para construir os conteúdos das páginas. + +- `website/src/components/functionality` + Contém os componentes feitos à medida para ser integrados nos conteúdos das páginas. + +- `website/src/config` + Parametrização da configuração essencial utilizada em código. + +- `website/src/styles` + Aqui contém o CSS principal e global, com a gestão das variáveis (`variables`) de configurações de layout e design. + +- `website/src/pages` + Páginas desenvolvidas à medida sem serem processadas pelo motor do CLUAR CMS. + +- `website/src/App.js` + Definição das rotas de navegação (`react-router-dom`) e tem a estrutura global do website. + +- `website/src/index.js` + É onde tudo começa, também é onde é carregado o conteúdo base do CLUAR CMS e onde define o endereço da API REST de serviços. + +- `website/craco.config.js` + Customização das variáveis de layout e design do Ant.Design. + +#### Estrutura do Código da Aplicação Netuno + +Sobre a estrutura da aplicação do Netuno: + +- `config` + Configuração da aplicação Netuno como base de dados, comandos executados na inicialização, CORS, SMTP, e muito mais. + +- `dbs` + Onde fica os ficheiros de base de dados (`H2Database`) e onde pode ser guardado scripts para outros tipos de bases de dados. + +- `public` + Ficheiros públicos da aplicação Netuno. + +- `server` + Código de servidor da aplicação Netuno. + +- `server/sevices` + Código a programação dos serviços da API REST. + +- `storage` + Ficheiros gerais geridos pelo servidor da aplicação Netuno. + +- `ui` + Programação do dashboard que fica no backoffice da aplicação Netuno. + +## Customização de Layout & Design + +Para customizar a aparência é utilizado o LESS, então basta editar todos os arquivos `.less` que estão dentro da pasta `website/src` e nos repectivos subdiretórios. + +O código LESS central e global fica em `website/src/styles`, dentra desta pasta ficheiro `variables.less` tem as principais parameetrizações de estilos globais. + +### Estilização do Ant.Design + +A estilização do Ant.Design é feita no ficheiro `website/craco.config.js`, dentro das configurações do `less` é configurar as variáveis do Ant.Design em `modifyVars`, verifique as variáveis do Ant.Design que podem ser redefinidas: + +- [themes/default.less](https://github.com/ant-design/ant-design/blob/master/components/style/themes/default.less) + +## Componentes ReactJS + +Os componentes principais + +## Cabeçalho (Header) e Menu + + + +## Rodapé (Footer) + + + +## Motor + + + +## Rotas com React Rouer + + diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..e67ae34 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,2 @@ + +## Coming soon... diff --git a/docs/action/README-pt_PT.md b/docs/action/README-pt_PT.md new file mode 100644 index 0000000..2d465b6 --- /dev/null +++ b/docs/action/README-pt_PT.md @@ -0,0 +1,3 @@ + +## + diff --git a/docs/banner/README-pt_PT.md b/docs/banner/README-pt_PT.md new file mode 100644 index 0000000..16ba65b --- /dev/null +++ b/docs/banner/README-pt_PT.md @@ -0,0 +1,40 @@ + +# Estandarte (`banner`) + +[:arrow_backward: Principal](../README-pt_PT.md) + +No menu do backoffice em `Estandarte` é gerido os grandes destaques das páginas do website, também conhecido como __Banners__, são aquelas boas imagens que ocupam toda a área da janela com um título por cima bem destacado e as vezes com algum texto introdutório, há outros mais curtos e de muitas outras formas. + +O estandarte pode conter Título, Descrição, Imagem e Ordem (ordenação). + +## ReactJS & CSS/LESS + +O componente ReactJS que gere todos os Estandartes (`banner`) no website fica em: + +- `website/src/components/Banner` + +O componente recebe diversas propriedades como título (`title`), conteúdo (`content`), imagem (`image`), entre outras. + +> Antes de realizar a customização analise as propriedades e o código CSS/LESS associado ao componente. + +### Tipo (`type`) + +Os estandartes (`banner`) devem conter um tipo associado. + +O tipo pode ser customizado no formulário `Estandarte > Tipo`, onde o campo código é o valor que é utilizado pelo componente ReactJS na propriedade `type`. + +Então a propriedade `type` recebida no componente ReactJS `website/src/components/Banner` define o tipo de estandarte que será procesado. + +A propriedade `type` pode ser utilizada em condições para customizar a estrutura HTML que será processada na renderização do componente. + +O `type` também deve adicionado nas propriedades `className` de tags HTML geradas pelo componente, para manter o padrão e organização de nomes, e ainda facilita custumizar a sua aparência no código CSS/LESS. + +### Posição (`position_x` & `position_y`) + +A posição X e Y servem para ajustar o foco da imagem de background nas diversas resoluções, o valor habitual é em porcentagem. + +> Permite controlar uma parte da imagem que seja necessário estar sempre visível. + +Por exemplo se ambos os campostos conter o valor `50%`, então quer dizer que o foco será no centro da imagem, ou seja em qualquer resolução a parte da imagem que estará sempre visível será o seu centro. + +[:arrow_backward: Principal](../README-pt_PT.md) diff --git a/docs/configuration/README-pt_PT.md b/docs/configuration/README-pt_PT.md new file mode 100644 index 0000000..2d465b6 --- /dev/null +++ b/docs/configuration/README-pt_PT.md @@ -0,0 +1,3 @@ + +## + diff --git a/docs/content/README-pt_PT.md b/docs/content/README-pt_PT.md new file mode 100644 index 0000000..323d5ac --- /dev/null +++ b/docs/content/README-pt_PT.md @@ -0,0 +1,32 @@ + +# Conteúdo (`content`) + +[:arrow_backward: Principal](../README-pt_PT.md) + +No menu do backoffice em `Conteúdo` é gerido os conteúdos das páginas do website. + +O conteúdo pode conter Título, Descrição, Imagem e Ordem (ordenação). + +## ReactJS & CSS/LESS + +O componente ReactJS que gere todos os Conteúdos no website fica em: + +- `website/src/components/Content` + +O componente recebe diversas propriedades como título (`title`), conteúdo (`content`), imagem (`image`), entre outras. + +> Antes de realizar a customização analise as propriedades e o código CSS/LESS associado ao componente. + +### Tipo (`type`) + +Os conteúdos devem conter um tipo associado. + +O tipo pode ser customizado no formulário `Conteúdo > Tipo`, onde o campo código é o valor que é utilizado pelo componente ReactJS na propriedade `type`. + +Então a propriedade `type` recebida no componente ReactJS `website/src/components/Content` define o tipo de conteúdo que será procesado. + +A propriedade `type` pode ser utilizada em condições para customizar a estrutura HTML que será processada na renderização do componente. + +O `type` também deve adicionado nas propriedades `className` de tags HTML geradas pelo componente, para manter o padrão e organização de nomes, e ainda facilita custumizar a sua aparência no código CSS/LESS. + +[:arrow_backward: Principal](../README-pt_PT.md) diff --git a/docs/dictionary/README-pt_PT.md b/docs/dictionary/README-pt_PT.md new file mode 100644 index 0000000..2d465b6 --- /dev/null +++ b/docs/dictionary/README-pt_PT.md @@ -0,0 +1,3 @@ + +## + diff --git a/docs/functionality/README-pt_PT.md b/docs/functionality/README-pt_PT.md new file mode 100644 index 0000000..2d465b6 --- /dev/null +++ b/docs/functionality/README-pt_PT.md @@ -0,0 +1,3 @@ + +## + diff --git a/docs/language/README-pt_PT.md b/docs/language/README-pt_PT.md new file mode 100644 index 0000000..1216558 --- /dev/null +++ b/docs/language/README-pt_PT.md @@ -0,0 +1,31 @@ + +# Idioma (`language`) + +[:arrow_backward: Principal](../README-pt_PT.md) + +Na interface de backoffice os idiomas são geridos no formulário `Idioma`. + +> O campo Localização (`locale`) é o valor que distingue o idioma no link das páginas, também é utilizado em código, como para realizar a troca de idioma. Os campos de Descrição (`description`) e de Código internacional (`code`), servem para indicar mais detalhes informativos. O idioma assinalado como Padrão (`default`) será o idioma preferencial do website. + +O menu de seleção do idioma é processado no Header do website em: + +- `website/src/base/Header` + +> No componente ReactJS (`index.js`) procure por `menuLanguages` e no CSS/LESS (`index.less`) é customizado pela class `menu-languages`. + +O componente utilizado para construir a seleção do idiomas é o [Menu do Ant.Design](https://ant.design/components/menu/). + +## Programaticamente + +Na classe JavaScript de funções úteis do CLUAR CMS: + +- `website/src/common/Cluar.js` + +É posssível trabalhar com o idioma, como por exemplo: + +- `Cluar.defaultLanguage()` - Obter o idioma padrão. +- `Cluar.currentLanguage()` - Obter o idioma ativo no momento atual. +- `Cluar.changeLanguage(codigoOuLocalizacao)` - Realizar a ativação de outro idioma programaticamente. +- `Cluar.languages()` - Obtém a lista de todos os idiomas. + +[:arrow_backward: Principal](../README-pt_PT.md) diff --git a/docs/listing/README-pt_PT.md b/docs/listing/README-pt_PT.md new file mode 100644 index 0000000..eb37d74 --- /dev/null +++ b/docs/listing/README-pt_PT.md @@ -0,0 +1,51 @@ + +# Listagem (`listing`) + +[:arrow_backward: Principal](../README-pt_PT.md) + +No menu do backoffice em `Listagem` é gerida as listas de itens, quando precisamos listar uma série de dados, como produtos, serviços, referências, notícias, e muito mais. + +Por isso que dentro do menu do backoffice `Listagem` tem o `Item`, que é onde associamos os itens às respectivas listagens. + +A listagem pode conter Título, Conteúdo, Imagem e Ordem (ordenação). + +Cada listagem deve conter itens relacionionados em `Listagem > Item` + +## ReactJS & CSS/LESS + +O componente ReactJS que gere todas as Listagens (`listing`) no website fica em: + +- `website/src/components/Listing` + +O componente recebe diversas propriedades como título (`title`), conteúdo (`content`), imagem (`image`), entre outras, além do array que contém os subitens relacionados (`items`). + +> Antes de realizar a customização analise as propriedades e o código CSS/LESS associado ao componente. + +### Tipo (`type`) + +A listagem (`listing`) devem conter um tipo associado. + +O tipo pode ser customizado no formulário `Listagem > Tipo`, onde o campo código é o valor que é utilizado pelo componente ReactJS na propriedade `type`. + +Então a propriedade `type` recebida no componente ReactJS `website/src/components/Listing` define o tipo de listagem que será procesada. + +> O `type` também é passado para os `items`, assim nos itens da listagem também é possível realizar a customizações de acordo com o tipo da listagem. + +A propriedade `type` pode ser utilizada em condições para customizar a estrutura HTML que será processada na renderização do componente. + +O `type` também deve adicionado nas propriedades `className` de tags HTML geradas pelo componente, para manter o padrão e organização de nomes, e ainda facilita custumizar a sua aparência no código CSS/LESS. + +### Item + +No backoffice os items são geridos em `Listagem > Item`, cada item contém a listagem ao qual pertence, título (`title`), conteúdo (`content`), imagem (`image`), ordem, URL (`link`) e o tipo (`type`) que é o tipo de listagem que é processada. + +O componente ReactJS que gere todos os Itens (`Listing/Item`) no website fica em: + +- `website/src/components/Listing/Item` + +A propriedade `type` pode ser utilizada em condições para customizar a estrutura HTML que será processada na renderização do componente. + +O `type` também deve adicionado nas propriedades `className` de tags HTML geradas pelo componente, para manter o padrão e organização de nomes, e ainda facilita custumizar a sua aparência no código CSS/LESS. + +[:arrow_backward: Principal](../README-pt_PT.md) + diff --git a/docs/logo.afdesign b/docs/logo.afdesign new file mode 100644 index 0000000..b1b1499 Binary files /dev/null and b/docs/logo.afdesign differ diff --git a/docs/logo.png b/docs/logo.png new file mode 100644 index 0000000..dd74bfc Binary files /dev/null and b/docs/logo.png differ diff --git a/docs/logo.svg b/docs/logo.svg new file mode 100644 index 0000000..250e690 --- /dev/null +++ b/docs/logo.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/page/README-pt_PT.md b/docs/page/README-pt_PT.md new file mode 100644 index 0000000..db06b21 --- /dev/null +++ b/docs/page/README-pt_PT.md @@ -0,0 +1,61 @@ + +# Pagina (`page`) + +[:arrow_backward: Principal](../README-pt_PT.md) + +No menu do backoffice em `Página` é onde é gerida as páginas, navegação e o menu do website. + +### Idioma + +Cada página criada fica associada a um idioma. + +### Pai (`parent`) + +Pode ser definido uma outra página como "pai", o que permite construir uma hierarquia de páginas. + +### Ligação (`link`) + +No campo ligação é onde definimos a parte da URL interna da página, deve começar sempre com `/`, não conter espaço e nem caracteres purtugueses ou outros especiais. + +Exemplos de valores para o campo de ligação: + +- `/produtos` +- `/servicos` +- `/quem-somos/historia` + +### Título + +No campo de título é onde definimos o título a página que vai aparecer no menu (caso esteja ativo) e também da aba (__tab__) e janela do navegador (__browser__). + +### Estado + +Apenas se o estado for **Publicada** então página passa a ficar disponível online. + +Caso contrário fica indisponível no website mas permite a construção e associação de conteúdos em backoffice. + +### Descrição e Palavra-Chave para os Motores de Busca + +O campo de Descrição é onde definimos a informação para ser utilizada pelos motores de busca quando apresentam o link da página. + +E no campo de Palavras-Chave é onde definimos os contextos em que a página convém ser apresentada como resultado nas buscas. + +Exemplo de palavras-chave: + +- ```programação web, desenvolvimento web, websites, lojas online, loja online, plataforma, alojamento``` + +### Descrição e Imagem para as Redes Sociais + +Quando a página for partilhada nas redes sociais é apresentado a imagem e a descrição que estão definidas nos respectivos campos: + +- `Imagem para as Redes Sociais` +- `Descrição para as Redes Sociais` + +### Menu e Ordem + +Se o campo de Menu estiver ativo então a página aparece no menu de navegação do website. + +No campo Ordem define o número de posição da página no menu. + +O campo Menu Título permite ter um título diferente para ser apresentado no menu de navegação do website, assim o título que aparecerá no menu de navegação poderá ser diferente do título da página, não é obrigatório o seu preenchimento e quando não preenchido é utilizado o título da página. + +[:arrow_backward: Principal](../README-pt_PT.md) diff --git a/public/images/icon.png b/public/images/icon.png new file mode 100644 index 0000000..4dd553b Binary files /dev/null and b/public/images/icon.png differ diff --git a/public/images/logo-main.png b/public/images/logo-main.png new file mode 100644 index 0000000..cb54fd7 Binary files /dev/null and b/public/images/logo-main.png differ diff --git a/public/images/logo.png b/public/images/logo.png new file mode 100644 index 0000000..8d4ce1d Binary files /dev/null and b/public/images/logo.png differ diff --git a/public/styles/login.css b/public/styles/login.css new file mode 100644 index 0000000..f404434 --- /dev/null +++ b/public/styles/login.css @@ -0,0 +1,38 @@ +body { + background-color: #f1f1f1; +} + +.form-control { + background-color: #f1f1f1; + color: #202020; + border: 1px solid #84B9FF; + margin-bottom: 10px; +} + +.form-control:focus { + border-color: #202020; + box-shadow: none; + -webkit-box-shadow: none; +} + +hr { + border-top: none; +} + +.btn-primary { + background-color: #1178FF !important; + border-color: transparent; +} + +.btn-primary.focus, .btn-primary:focus, .btn-primary.active, .btn-primary:active, .open>.dropdown-toggle.btn-primary, .btn-primary:hover { + background-color: #84B9FF !important; + border-color: transparent; +} + +.btn.active.focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn:active:focus, .btn:focus { + outline: 5px auto #000000; + outline-color: #000000; + outline-style: auto; + outline-width: 5px; + outline-offset: -2px; +} diff --git a/public/styles/main.css b/public/styles/main.css new file mode 100644 index 0000000..7473006 --- /dev/null +++ b/public/styles/main.css @@ -0,0 +1,124 @@ +/** + +HERE YOUR CUSTOM CSS + +**/ + +.navbar, .navbar-inverse { + background-color: #e8e8e8 !important; +} + +.dev .navbar, .dev .navbar-inverse { + background-color: #202020 !important; +} + +.dev .top-nav > li > a:hover, .dev .top-nav > li > a:focus, .dev .top-nav > li.active > a, .dev .top-nav > .open > a, .dev .top-nav > .open > a:hover, .dev .top-nav > .open > a:focus { + background-color: #1178FF; + color: #ffffff; +} + +.top-nav > li.active > a { + background-color: #FF8116; + color: #202020; +} + +.dropdown button { + color: #FF8116; +} + +.btn-primary { + background-color: #1178FF; + border-color: transparent; +} + +.btn-primary.focus, .btn-primary:focus, .btn-primary.active, .btn-primary:active, .open>.dropdown-toggle.btn-primary, .btn-primary:hover { + background-color: #5b5ce1; + border-color: transparent; +} + +.btn.active.focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn:active:focus, .btn:focus { + outline: 5px auto #000000; + outline-color: #000000; + outline-style: auto; + outline-width: 5px; + outline-offset: -2px; +} + +.btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover, .btn-primary:active.focus, .btn-primary:active:focus, .btn-primary:active:hover, .open>.dropdown-toggle.btn-primary.focus, .open>.dropdown-toggle.btn-primary:focus, .open>.dropdown-toggle.btn-primary:hover { + background-color: #5b5ce1; + border-color: #FF8116; +} + +.btn-link { + color: #1178FF; +} + +.btn-link:focus, .btn-link:hover { + color: #0053BF; +} + +.text-primary { + color: #1178FF; +} + +.badge-warning { + background-color: #1178FF; +} + +.select2-container--bootstrap .select2-dropdown, +.select2-container--bootstrap.select2-container--focus .select2-selection, +.select2-container--bootstrap.select2-container--open .select2-selection { + border-color: #1178FF; + box-shadow: none; + -webkit-box-shadow: none; +} + +.select2-container--bootstrap .select2-results__option--highlighted[aria-selected] { + background-color: #1178FF; +} + +.form-control:focus { + border-color: #1178FF; + box-shadow: none; + -webkit-box-shadow: none; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary { + background: #1178FF !important; +} + +.datepicker table tr td.active.active, .datepicker table tr td.active.highlighted.active, .datepicker table tr td.active.highlighted:active, .datepicker table tr td.active:active { + background: #1178FF; +} + +.clockpicker-canvas line { + stroke: #1178FF !important; +} + +.clockpicker-canvas-bg-trans, .clockpicker-canvas-bg { + fill: rgba(201,80,0,.25) !important; +} + +.clockpicker-canvas-bearing, .clockpicker-canvas-fg { + fill: #1178FF !important; +} + +.clockpicker-tick.active, +.clockpicker-tick:hover { + background-color: #5b5ce1; + background-color: rgba(201,80,0,.25); +} + +.search-content .btn-search, +.search-content .btn-filter { + background: #1178FF !important; +} + +.pagination>li>a, .pagination>li>span { + color: #1178FF !important; +} + +.pagination>li>a:focus, .pagination>li>a:hover, .pagination>li>span:focus, .pagination>li>span:hover { + color: #5b5ce1 !important; +} diff --git a/server/actions/action/saved.js b/server/actions/action/saved.js new file mode 100644 index 0000000..45f1b35 --- /dev/null +++ b/server/actions/action/saved.js @@ -0,0 +1,4 @@ +// _core : Cluar + +Cluar.build() + diff --git a/server/actions/banner/saved.js b/server/actions/banner/saved.js new file mode 100644 index 0000000..61464ae --- /dev/null +++ b/server/actions/banner/saved.js @@ -0,0 +1,5 @@ +// _core : Cluar + +Cluar.build() + +Cluar.actionDataItemProcessWithAnImage() diff --git a/server/actions/banner_action/saved.js b/server/actions/banner_action/saved.js new file mode 100644 index 0000000..45f1b35 --- /dev/null +++ b/server/actions/banner_action/saved.js @@ -0,0 +1,4 @@ +// _core : Cluar + +Cluar.build() + diff --git a/server/actions/configuration/saved.js b/server/actions/configuration/saved.js new file mode 100644 index 0000000..824c346 --- /dev/null +++ b/server/actions/configuration/saved.js @@ -0,0 +1,3 @@ +// _core : Cluar + +Cluar.build() diff --git a/server/actions/content/saved.js b/server/actions/content/saved.js new file mode 100644 index 0000000..2046499 --- /dev/null +++ b/server/actions/content/saved.js @@ -0,0 +1,4 @@ +// _core : Cluar + +Cluar.build() +Cluar.actionDataItemProcessWithAnImage() diff --git a/server/actions/content_action/saved.js b/server/actions/content_action/saved.js new file mode 100644 index 0000000..45f1b35 --- /dev/null +++ b/server/actions/content_action/saved.js @@ -0,0 +1,4 @@ +// _core : Cluar + +Cluar.build() + diff --git a/server/actions/dictionary/saved.js b/server/actions/dictionary/saved.js new file mode 100644 index 0000000..824c346 --- /dev/null +++ b/server/actions/dictionary/saved.js @@ -0,0 +1,3 @@ +// _core : Cluar + +Cluar.build() diff --git a/server/actions/functionality/saved.js b/server/actions/functionality/saved.js new file mode 100644 index 0000000..61464ae --- /dev/null +++ b/server/actions/functionality/saved.js @@ -0,0 +1,5 @@ +// _core : Cluar + +Cluar.build() + +Cluar.actionDataItemProcessWithAnImage() diff --git a/server/actions/language/saved.js b/server/actions/language/saved.js new file mode 100644 index 0000000..824c346 --- /dev/null +++ b/server/actions/language/saved.js @@ -0,0 +1,3 @@ +// _core : Cluar + +Cluar.build() diff --git a/server/actions/listing/saved.js b/server/actions/listing/saved.js new file mode 100644 index 0000000..2046499 --- /dev/null +++ b/server/actions/listing/saved.js @@ -0,0 +1,4 @@ +// _core : Cluar + +Cluar.build() +Cluar.actionDataItemProcessWithAnImage() diff --git a/server/actions/listing_item/saved.js b/server/actions/listing_item/saved.js new file mode 100644 index 0000000..2046499 --- /dev/null +++ b/server/actions/listing_item/saved.js @@ -0,0 +1,4 @@ +// _core : Cluar + +Cluar.build() +Cluar.actionDataItemProcessWithAnImage() diff --git a/server/actions/page/saved.js b/server/actions/page/saved.js new file mode 100644 index 0000000..45f1b35 --- /dev/null +++ b/server/actions/page/saved.js @@ -0,0 +1,4 @@ +// _core : Cluar + +Cluar.build() + diff --git a/server/core/Cluar.js b/server/core/Cluar.js new file mode 100644 index 0000000..8729372 --- /dev/null +++ b/server/core/Cluar.js @@ -0,0 +1,528 @@ + +// _core : CluarCustomData + +class Cluar { + + static base() { + if (_env.is("dev")) { + return "website/public" + } else { + return "website/build" + } + } + + static build(settings) { + settings = settings || {} + + const data = _val.map() + + data.set('config', _app.settings.getValues('cluar').getValues("website")) + + /* + * + * LANGUAGES + * + */ + const dbLanguages = _db.find( + 'language', + _val.map() + .set( + 'where', + _val.map() + .set("active", true) + ) + ) + const languages = _val.list() + for (const dbLanguage of dbLanguages) { + languages.add( + _val.map() + .set("code", dbLanguage.getString("code")) + .set("locale", dbLanguage.getString("locale")) + .set("description", dbLanguage.getString("description")) + .set("default", dbLanguage.getBoolean("default")) + ) + } + data.set("languages", languages) + + /* + * + * CONFIGURATION + * + */ + const configuration = _val.map() + const dbConfigurationWithLanguages = _db.query(` + SELECT + language.code "language", + configuration_parameter.code "code", + configuration.value + FROM language + INNER JOIN configuration ON language.id = configuration.language_id + INNER JOIN configuration_parameter ON configuration.parameter_id = configuration_parameter.id + WHERE language.active = TRUE + AND configuration.active = TRUE + AND configuration_parameter.active = TRUE + ORDER BY language.code, configuration_parameter.code + `) + for (const dbParameter of dbConfigurationWithLanguages) { + if (!configuration.has(dbParameter.getString("language"))) { + configuration.set(dbParameter.getString("language"), _val.map()) + } + configuration.getValues(dbParameter.getString("language")) + .set(dbParameter.getString("code"), dbParameter.getString("value")) + } + const dbConfigurationWithoutLanguages = _db.query(` + SELECT + configuration_parameter.code "code", + configuration.value + FROM configuration + INNER JOIN configuration_parameter ON configuration.parameter_id = configuration_parameter.id + WHERE (configuration.language_id = 0 OR configuration.language_id IS NULL) + AND configuration.active = TRUE + AND configuration_parameter.active = TRUE + ORDER BY configuration_parameter.code + `) + for (const dbParameter of dbConfigurationWithoutLanguages) { + if (!configuration.has("GENERIC")) { + configuration.set("GENERIC", _val.map()) + } + configuration.getValues("GENERIC") + .set(dbParameter.getString("code"), dbParameter.getString("value")) + } + data.set("configuration", configuration) + + /* + * + * DICTIONARY + * + */ + const dbDictionary = _db.query(` + SELECT + language.code "language", + dictionary_entry.code "code", + dictionary.value + FROM language + INNER JOIN dictionary ON dictionary.language_id = language.id + INNER JOIN dictionary_entry ON dictionary.entry_id = dictionary_entry.id + WHERE language.active = TRUE + AND dictionary.active = TRUE + AND dictionary_entry.active = TRUE + ORDER BY language.code, dictionary_entry.code + `) + const dictionary = _val.map() + for (const dbEntry of dbDictionary) { + if (!dictionary.has(dbEntry.getString("language"))) { + dictionary.set(dbEntry.getString("language"), _val.map()) + } + dictionary.getValues(dbEntry.getString("language")) + .set(dbEntry.getString("code"), dbEntry.getString("value")) + } + data.set("dictionary", dictionary) + + /* + * + * PAGES + * + */ + const dbPages = _db.query(` + SELECT + page.id, + page.uid, + language.code "language", + page.parent_id, + page.link, + page.title, + page.description, + page.keywords, + page.menu, + page.menu_title, + page.sorter + FROM language + INNER JOIN page ON language.id = page.language_id + INNER JOIN page_status ON page.status_id = page_status.id + WHERE language.active = TRUE + AND page.active = TRUE + AND page_status.active = TRUE + AND page_status.code = 'published' + ORDER BY language.code, page.sorter, page.link + `) + const pages = _val.map() + for (const dbPage of dbPages) { + if (!pages.has(dbPage.getString("language"))) { + pages.set(dbPage.getString("language"), _val.list()) + } + + const structure = _val.list() + + /* + * + * CONTENTS + * + */ + const dbContents = _db.query(` + SELECT + content.id, + content.uid, + content_type.code "type", + content.title, + content.content, + content.image, + content.image_alt, + content.image_title, + content.image_max_width, + content.sorter + FROM content + INNER JOIN content_type ON content.type_id = content_type.id + WHERE content.active = TRUE + AND content_type.active = TRUE + AND content.page_id = ${dbPage.getInt("id")} + `) + for (const dbContent of dbContents) { + structure.add( + _val.map() + .set("section", "content") + .set("uid", dbContent.getString("uid")) + .set("type", dbContent.getString("type")) + .set("title", dbContent.getString("title")) + .set("content", dbContent.getString("content")) + .set("image", dbContent.getString("image")) + .set("image_alt", dbContent.getString("image_alt")) + .set("image_title", dbContent.getString("image_title")) + .set("image_max_width", dbContent.getString("image_max_width")) + .set("sorter", dbContent.getInt("sorter")) + .set("actions", Cluar.actions("content", dbContent.getInt("id"))) + ) + if (settings.images === true) { + Cluar.publishImage("content", dbContent.getString("image")) + } + } + + /* + * + * BANNERS + * + */ + const dbBanners = _db.query(` + SELECT + banner.id, + banner.uid, + banner_type.code "type", + banner.title, + banner.content, + banner.image, + banner.image_alt, + banner.image_title, + banner.sorter, + banner.position_x, + banner.position_y + FROM banner + INNER JOIN banner_type ON banner.type_id = banner_type.id + WHERE banner.active = TRUE + AND banner_type.active = TRUE + AND banner.page_id = ${dbPage.getInt("id")} + `) + for (const dbBanner of dbBanners) { + structure.add( + _val.map() + .set("uid", dbBanner.getString("uid")) + .set("section", "banner") + .set("type", dbBanner.getString("type")) + .set("title", dbBanner.getString("title")) + .set("content", dbBanner.getString("content")) + .set("image", dbBanner.getString("image")) + .set("image_alt", dbBanner.getString("image_alt")) + .set("image_title", dbBanner.getString("image_title")) + .set("sorter", dbBanner.getInt("sorter")) + .set( + "position", + _val.map() + .set("x", dbBanner.getString("position_x")) + .set("y", dbBanner.getString("position_y")) + ) + .set("actions", Cluar.actions("banner", dbBanner.getInt("id"))) + ) + if (settings.images === true) { + Cluar.publishImage("banner", dbBanner.getString("image")) + } + } + + /* + * + * LISTING + * + */ + const dbListings = _db.query(` + SELECT + listing.id, + listing.uid, + listing_type.code "type", + listing.title, + listing.image_alt, + listing.image_title, + listing.content, + listing.image, + listing.sorter + FROM listing + INNER JOIN listing_type ON listing.type_id = listing_type.id + WHERE listing.active = TRUE + AND listing_type.active = TRUE + AND listing.page_id = ${dbPage.getInt("id")} + `) + for (const dbListing of dbListings) { + const items = _val.list() + const dbItems = _db.query(` + SELECT + uid, title, content, image, image_alt, image_title, sorter, link + FROM listing_item + WHERE listing_id = ${dbListing.getInt("id")} + `) + for (const dbItem of dbItems) { + items.add( + _val.map() + .set("uid", dbItem.getString("uid")) + .set("section", "listing_item") + .set("title", dbItem.getString("title")) + .set("content", dbItem.getString("content")) + .set("image", dbItem.getString("image")) + .set("image_alt", dbItem.getString("image_alt")) + .set("image_title", dbItem.getString("image_title")) + .set("sorter", dbItem.getInt("sorter")) + .set("link", dbItem.getString("link")) + ) + if (settings.images === true) { + Cluar.publishImage("listing_item", dbItem.getString("image")) + } + } + structure.add( + _val.map() + .set("uid", dbListing.getString("uid")) + .set("section", "listing") + .set("type", dbListing.getString("type")) + .set("title", dbListing.getString("title")) + .set("content", dbListing.getString("content")) + .set("image", dbListing.getString("image")) + .set("image_alt", dbListing.getString("image_alt")) + .set("image_title", dbListing.getString("image_title")) + .set("items", items) + .set("sorter", dbListing.getInt("sorter")) + ) + if (settings.images === true) { + Cluar.publishImage("listing", dbListing.getString("image")) + } + } + + /* + * + * FUNCTIONALITY + * + */ + const dbFunctionalities = _db.query(` + SELECT + functionality.id, + functionality.uid, + functionality_type.code "type", + functionality.title, + functionality.content, + functionality.image, + functionality.sorter + FROM functionality + INNER JOIN functionality_type ON functionality.type_id = functionality_type.id + WHERE functionality.active = TRUE + AND functionality_type.active = TRUE + AND functionality.page_id = ${dbPage.getInt("id")} + `) + for (const dbFunctionality of dbFunctionalities) { + structure.add( + _val.map() + .set("uid", dbFunctionality.getString("uid")) + .set("section", "functionality") + .set("type", dbFunctionality.getString("type")) + .set("title", dbFunctionality.getString("title")) + .set("content", dbFunctionality.getString("content")) + .set("image", dbFunctionality.getString("image")) + .set("sorter", dbFunctionality.getInt("sorter")) + ) + if (settings.images === true) { + Cluar.publishImage("functionality", dbFunctionality.getString("image")) + } + } + + structure.sort((a, b) => a.getInt("sorter") - b.getInt("sorter")) + + /* + * + * ADD PAGE + * + */ + let parentLink = "" + if (dbPage.getInt("parent_id") > 0) { + const dbParentPage = _db.findFirst( + "page", + _val.map() + .set("where", _val.map().set("id", dbPage.getInt("parent_id"))) + ) + parentLink = dbParentPage.getString("link") + } + pages.getValues(dbPage.getString("language")) + .add( + _val.map() + .set("uid", dbPage.getString("uid")) + .set("parent", parentLink) + .set("link", dbPage.getString("link")) + .set("title", dbPage.getString("title")) + .set("description", dbPage.getString("description")) + .set("keywords", dbPage.getString("keywords")) + .set("menu", dbPage.getBoolean("menu")) + .set("menu_title", dbPage.getString("menu_title")) + .set("sorter", dbPage.getInt("sorter")) + .set("structure", structure) + ) + } + data.set("pages", pages) + + CluarCustomData(data) + + /* + * + * DATA FILE + * + */ + const file = _app.file(`${Cluar.base()}/cluarData.js`) + file.output().print(`window.cluarData = ${data.toJSON(4)};`) + + if (_app.settings.getValues('cluar').getBoolean("uglifyjs") == true) { + const osUglifyJS = _os.init() + osUglifyJS.directory(_app.folder(Cluar.base())) + const osUglifyJSResult = osUglifyJS.command(`uglifyjs -o cluarData.js -- cluarData.js`) + if (osUglifyJSResult.output() != '' && osUglifyJSResult.error() != '') { + _log.error(`UglifyJS failed:\n\tOutput: ${osUglifyJSResult.output()}\n\tError: ${osUglifyJSResult.error()}`) + } + } + + /* + * + * SITEMAP & ROBOTS + * + */ + const origin = _app.settings.getValues('cluar').getValues("website").getString("url") + const xml = _xml.create() + const document = xml.builder().newDocument() + const tagURLSet = document.createElement("urlset") + const attrNS = document.createAttribute("xmlns") + attrNS.setValue("http://www.sitemaps.org/schemas/sitemap/0.9") + tagURLSet.setAttributeNode(attrNS) + const attrNews = document.createAttribute("xmlns:news") + attrNews.setValue("http://www.google.com/schemas/sitemap-news/0.9") + tagURLSet.setAttributeNode(attrNews) + const attrXHTML = document.createAttribute("xmlns:xhtml") + attrXHTML.setValue("http://www.w3.org/1999/xhtml") + tagURLSet.setAttributeNode(attrXHTML) + const attrMobile = document.createAttribute("xmlns:mobile") + attrMobile.setValue("http://www.sitemaps.org/schemas/sitemap/0.9") + tagURLSet.setAttributeNode(attrMobile) + const attrImage = document.createAttribute("xmlns:image") + attrImage.setValue("http://www.google.com/schemas/sitemap-image/1.1") + tagURLSet.setAttributeNode(attrImage) + const attrVideo = document.createAttribute("xmlns:video") + attrVideo.setValue("http://www.google.com/schemas/sitemap-video/1.1") + tagURLSet.setAttributeNode(attrVideo) + for (const language of languages) { + if (pages.getValues(language.getString("code")) == null) { + continue + } + for (const page of pages.getValues(language.getString("code"))) { + const tagURL = document.createElement("url") + const tagLoc = document.createElement("loc") + tagLoc.appendChild(document.createTextNode(origin +"/"+ language.getString("locale") + page.getString("link"))) + tagURL.appendChild(tagLoc) + const tagChangeFreq = document.createElement("changefreq") + tagChangeFreq.appendChild(document.createTextNode("daily")) + tagURL.appendChild(tagChangeFreq) + let priority = "0.5" + if (page.getString("link") == '/') { + priority = "1.0" + } else if (page.getString("parent") == '') { + priority = "0.7" + } + const tagPriority = document.createElement("priority") + tagPriority.appendChild(document.createTextNode(priority)) + tagURL.appendChild(tagPriority) + tagURLSet.appendChild(tagURL) + } + } + document.appendChild(tagURLSet) + xml.save(document, _app.file(`${Cluar.base()}/sitemap.xml`)) + if (!_app.file(`${Cluar.base()}/robots.txt`).exists()) { + const output = _app.file(`${Cluar.base()}/robots.txt`).output() + .println('User-agent: *') + .println('Allow: /') + .println(`Sitemap: ${origin}/sitemap.xml`) + .close() + } + } + + static publishImage(section, fileName) { + if (fileName == "") { + return; + } + const folder = _app.folder(`${Cluar.base()}/images/${section}`) + if (!folder.exists()) { + folder.mkdir() + } + const websiteFile = _app.file(`${folder.path()}/${fileName}`) + const databaseFile = _storage.database(section, "image", fileName).file() + if (!websiteFile.exists() || databaseFile.available() != websiteFile.available()) { + _storage.database(section, "image", fileName) + .file() + .copy(`${folder.path()}/${fileName}`, true) + } + } + + static actionDataItemProcessWithAnImage() { + const section = _dataItem.getTable() + + const folder = _app.folder(`${Cluar.base()}/images/${section}`) + + if (!folder.exists()) { + folder.mkdir() + } + + if (_dataItem.getValues().has("image:old")) { + _app.file(`${folder.path()}/${_dataItem.getValues().getString("image:old")}`).delete() + } + + if (_dataItem.getValues().has("image:new")) { + _storage.database(section, "image", _dataItem.getValues().getString("image:new")) + .file() + .copy(`${folder.path()}/${_dataItem.getValues().getString("image:new")}`) + } + } + + static actions(section, id) { + const dbActions = _db.query(` + SELECT + action.title, + action.content, + action.indication, + action.link + FROM action + INNER JOIN ${section}_action ON ${section}_action.action_id = action.id + WHERE + action.active = true + AND ${section}_action.active = TRUE + AND ${section}_action.${section}_id = ${id} + ORDER BY ${section}_action.sorter + `) + const actions = _val.list() + for (const dbAction of dbActions) { + actions.add( + _val.map() + .set("title", dbAction.getString("title")) + .set("content", dbAction.getString("content")) + .set("indication", dbAction.getString("indication")) + .set("link", dbAction.getString("link")) + .set("sorter", dbAction.getInt("sorter")) + ) + } + return actions + } +} diff --git a/server/core/CluarCustomData.js b/server/core/CluarCustomData.js new file mode 100644 index 0000000..1feeccd --- /dev/null +++ b/server/core/CluarCustomData.js @@ -0,0 +1,4 @@ + +const CluarCustomData = (data) => { + +} diff --git a/server/core/_config.js b/server/core/_config.js new file mode 100644 index 0000000..b433ddd --- /dev/null +++ b/server/core/_config.js @@ -0,0 +1,22 @@ + +_config.set("_lang", _config.get("_lang:default")) + +if (_env.is("dev") + && (_url.equals("/") || _url.equals("/Index.netuno"))) { + _config + .set("_login:user", "dev") + .set("_login:pass", "dev") + .set("_login:auto", _req.getString("action") != "logout") +} + +/** + * DISABLE BROWSER CACHE + */ + +if (_url.download.isDownloadable()) { + if (_env.is("dev") && _url.indexOf("/public/scripts/main.js") > 0) { + _header.noCache() + } else { + _header.cache(2628000) + } +} diff --git a/server/core/_init.js b/server/core/_init.js new file mode 100644 index 0000000..1cbfacb --- /dev/null +++ b/server/core/_init.js @@ -0,0 +1,5 @@ + +/** + * FIREBASE - Set your listeners + */ +// _firebase.listener("my-test", _header.baseURL() + "/services/firebase/listener/my-test.netuno") diff --git a/server/core/_request_close.js b/server/core/_request_close.js new file mode 100644 index 0000000..e69de29 diff --git a/server/core/_request_end.js b/server/core/_request_end.js new file mode 100644 index 0000000..e69de29 diff --git a/server/core/_request_error.js b/server/core/_request_error.js new file mode 100644 index 0000000..9bab7f2 --- /dev/null +++ b/server/core/_request_error.js @@ -0,0 +1,17 @@ + +if (!_out.isClosed()) { + _out.print( + "### SERVER ERROR ###" + ) + /* + // Is insecure but the code below will print errors with more details... + _out.print( + "SERVER ERROR # " + + _error.data().getString("file") + +":"+ + _error.data().getString("line") + +" # "+ + _error.data().getString("message") + ) + */ +} diff --git a/server/core/_request_start.js b/server/core/_request_start.js new file mode 100644 index 0000000..4577349 --- /dev/null +++ b/server/core/_request_start.js @@ -0,0 +1,2 @@ + +_config.set("_script:_request_end", true) diff --git a/server/core/_request_url.js b/server/core/_request_url.js new file mode 100644 index 0000000..d726c92 --- /dev/null +++ b/server/core/_request_url.js @@ -0,0 +1,14 @@ + +// _log.info(_url.url()) + +/** + * ALLOW CORS + */ +/* +_header.response.set("Access-Control-Allow-Origin", "https://www.netuno.org") +_header.response.set("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS") +_header.response.set("Access-Control-Allow-Headers", "content-type,x-requested-with,authorization") +_header.response.set("Access-Control-Allow-Credentials", true) +*/ + +_url.to(_url.request()) diff --git a/server/core/_service_config.js b/server/core/_service_config.js new file mode 100644 index 0000000..a94daa7 --- /dev/null +++ b/server/core/_service_config.js @@ -0,0 +1,13 @@ + +/** + * When service need public access... + */ +if (_env.is("dev")) { + _service.allow() +} + +/* +if (_service.path == 'samples/my-service') { + _service.allow() +} +*/ diff --git a/server/core/_service_end.js b/server/core/_service_end.js new file mode 100644 index 0000000..e69de29 diff --git a/server/core/_service_error.js b/server/core/_service_error.js new file mode 100644 index 0000000..38bcefe --- /dev/null +++ b/server/core/_service_error.js @@ -0,0 +1,5 @@ + +/* +// Print error: +_log.fatal("Service "+ _service.path, _error.data().get("throwable")) +*/ \ No newline at end of file diff --git a/server/core/_service_start.js b/server/core/_service_start.js new file mode 100644 index 0000000..e69de29 diff --git a/server/package.json b/server/package.json new file mode 100644 index 0000000..b5811cf --- /dev/null +++ b/server/package.json @@ -0,0 +1,7 @@ +{ + "name": "server", + "version": "1.0.0", + "description": "Server modules dependencies.", + "author": "netuno.org", + "license": "ISC" +} diff --git a/server/services/admin/contact/list/post.js b/server/services/admin/contact/list/post.js new file mode 100644 index 0000000..ba14b0c --- /dev/null +++ b/server/services/admin/contact/list/post.js @@ -0,0 +1,92 @@ + +const filter = _req.getValues("filter") +const pagination = _req.getValues("pagination") +const sorter = _req.getValues("sorter") + +const pageSize = 10 + +let page = { start: 0, size: pageSize } + +if (pagination != null) { + page.size = pagination.getInt('pageSize', pageSize) + page.start = (pagination.getInt('current', 1) - 1) * page.size +} +if (page.size > 100) { + page.size = 100 +} + +const queryFilter = _val.list() +let queryWhere = ''; + + +if (filter != null) { + if (filter.getString('name') != '') { + queryWhere += ' AND name LIKE ?' + queryFilter.add(`%${ filter.getString('name') }%`) + } + if (filter.getString('email') != '') { + queryWhere += ' AND email LIKE ?' + queryFilter.add(`%${ filter.getString('email') }%`) + } + if (filter.getString('subject') != '') { + queryWhere += ' AND subject LIKE ?' + queryFilter.add(`%${ filter.getString('subject') }%`) + } + if (filter.getString('moment') != '') { + queryWhere += ' AND moment LIKE ?' + queryFilter.add(`%${ filter.getString('moment') }%`) + } +} + + +let querySorter = 'moment DESC'; +if (sorter != null) { + const order = sorter.getString("order") == 'descend' ? 'DESC' : 'ASC' + if (sorter.getString("field") == 'name') { + querySorter = ' name '+ order; + } else if (sorter.getString("field") == 'email') { + querySorter = ' email '+ order; + } else if (sorter.getString("field") == 'subject') { + querySorter = ' subject '+ order; + } else if (sorter.getString("field") == 'moment') { + querySorter = ' moment '+ order; + } +} + +const dbResultados = _db.query(` + SELECT + name, + email, + subject, + moment + FROM contact + WHERE 1 = 1 + ${queryWhere} + ORDER BY ${querySorter} + LIMIT ${page.size} OFFSET ${page.start} +`, queryFilter) + +const resultados = _val.list() + +for (const dbResultado of dbResultados) { + resultados.add( + _val.map() + .set('name', dbResultado.getString('name')) + .set('email', dbResultado.getString('email')) + .set('subject', dbResultado.getString('subject')) + .set('moment', dbResultado.getSQLTimestamp('moment')) + ) +} + +_out.json( + _val.map() + .set( + 'total', + _db.queryFirst(` + SELECT COUNT(1) "total" + FROM contact + WHERE 1 = 1 + ${queryWhere} + `, queryFilter).getInt("total") + ).set('resultados', resultados) +) \ No newline at end of file diff --git a/server/services/cadastro/post.js b/server/services/cadastro/post.js new file mode 100644 index 0000000..8f01944 --- /dev/null +++ b/server/services/cadastro/post.js @@ -0,0 +1,8 @@ +const usuario = _req.getString('usuario') +const senha = _crypto.sha256(_req.getString('senha')) + +_log.info(` ${usuario} = ${senha}`) + +_db.insert('cadastro', { usuario, senha }) + +_out.json({result: true}) \ No newline at end of file diff --git a/server/services/contact/post.js b/server/services/contact/post.js new file mode 100644 index 0000000..6a5cc2e --- /dev/null +++ b/server/services/contact/post.js @@ -0,0 +1,19 @@ +const name = _req.getString('name') +const email = _req.getString('email') +const subject = _req.getString('subject') +const message = _req.getString('message') + +_db.insert( + 'contact', + _val.map() + .set('name', name) + .set('email', email) + .set('subject', subject) + .set('message', message) + .set('moment', _db.timestamp()) +) + +_out.json( + _val.map() + .set('result', true) +) \ No newline at end of file diff --git a/server/setup/001-language.js b/server/setup/001-language.js new file mode 100644 index 0000000..b4f12b2 --- /dev/null +++ b/server/setup/001-language.js @@ -0,0 +1,26 @@ + +// ----------------------------------------------------------- +// +// LANGUAGE +// +// ----------------------------------------------------------- + +_db.insertIfNotExists( + "language", + _val.init() + .set("uid", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("code", "PT") + .set("locale", "pt") + .set("description", "Portugu\u00EAs") + .set("default", true) +); + +_db.insertIfNotExists( + "language", + _val.init() + .set("uid", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("code", "EN") + .set("locale", "en") + .set("description", "English") + .set("default", false) +); diff --git a/server/setup/002-page_status.js b/server/setup/002-page_status.js new file mode 100644 index 0000000..1b6d5e4 --- /dev/null +++ b/server/setup/002-page_status.js @@ -0,0 +1,22 @@ + +// ----------------------------------------------------------- +// +// PAGE_STATUS +// +// ----------------------------------------------------------- + +_db.insertIfNotExists( + "page_status", + _val.init() + .set("uid", "e24a0cdf-c860-48f2-b597-689f165fd110") + .set("code", "published") + .set("description", "Publicada") +); + +_db.insertIfNotExists( + "page_status", + _val.init() + .set("uid", "b0389f50-4dc3-4be1-ad1e-070573a3f999") + .set("code", "draft") + .set("description", "Rascunho") +); diff --git a/server/setup/003-content_type.js b/server/setup/003-content_type.js new file mode 100644 index 0000000..c1b4e26 --- /dev/null +++ b/server/setup/003-content_type.js @@ -0,0 +1,46 @@ + +// ----------------------------------------------------------- +// +// CONTENT_TYPE +// +// ----------------------------------------------------------- + +_db.insertIfNotExists( + "content_type", + _val.init() + .set("uid", "5d68fe7f-bfc9-424b-98bc-50c0bfe96f2f") + .set("code", "text") + .set("description", "Texto") +); + +_db.insertIfNotExists( + "content_type", + _val.init() + .set("uid", "6638fba0-ce12-4f99-be1f-a407eea2eeab") + .set("code", "image-left") + .set("description", "Imagem \u00E0 Esquerda") +); + +_db.insertIfNotExists( + "content_type", + _val.init() + .set("uid", "03a63665-e41d-4549-bd4c-85063c978968") + .set("code", "image-right") + .set("description", "Imagem \u00E0 Direita") +); + +_db.insertIfNotExists( + "content_type", + _val.init() + .set("uid", "b01f00ae-7179-4a21-bb7b-b9ac6efb94db") + .set("code", "image-top") + .set("description", "Imagem no Topo") +); + +_db.insertIfNotExists( + "content_type", + _val.init() + .set("uid", "b79a8510-482c-43a6-9f00-3f7eb093b347") + .set("code", "image-bottom") + .set("description", "Imagem Embaixo") +); diff --git a/server/setup/004-banner_type.js b/server/setup/004-banner_type.js new file mode 100644 index 0000000..fa70bba --- /dev/null +++ b/server/setup/004-banner_type.js @@ -0,0 +1,30 @@ + +// ----------------------------------------------------------- +// +// BANNER_TYPE +// +// ----------------------------------------------------------- + +_db.insertIfNotExists( + "banner_type", + _val.init() + .set("uid", "d7ca6e7d-08a7-4ec0-8d16-9e3f09cd657c") + .set("code", "default") + .set("description", "Padr\u00E3o") +); + +_db.insertIfNotExists( + "banner_type", + _val.init() + .set("uid", "fa15255a-a309-4ef5-bf72-935fd4e1c1a7") + .set("code", "secondary") + .set("description", "P\u00E1gina secund\u00E1ria") +); + +_db.insertIfNotExists( + "banner_type", + _val.init() + .set("uid", "beb0dcb5-b445-4a44-b038-522c4c544c01") + .set("code", "default-sub-banner") + .set("description", "Padr\u00E3o com Destaque") +); diff --git a/server/setup/005-functionality_type.js b/server/setup/005-functionality_type.js new file mode 100644 index 0000000..c83c393 --- /dev/null +++ b/server/setup/005-functionality_type.js @@ -0,0 +1,22 @@ + +// ----------------------------------------------------------- +// +// FUNCTIONALITY_TYPE +// +// ----------------------------------------------------------- + +_db.insertIfNotExists( + "functionality_type", + _val.init() + .set("uid", "2d35fd56-0256-4fc5-a685-8eccf02f17d3") + .set("code", "contact-form") + .set("description", "Formul\u00E1rio de Contacto") +); + +_db.insertIfNotExists( + "functionality_type", + _val.init() + .set("uid", "a1d26bda-57cd-4ba1-9aa3-868714260b01") + .set("code", "contact-map") + .set("description", "Mapa") +); diff --git a/server/setup/006-page.js b/server/setup/006-page.js new file mode 100644 index 0000000..15be697 --- /dev/null +++ b/server/setup/006-page.js @@ -0,0 +1,44 @@ + +// ----------------------------------------------------------- +// +// PAGE +// +// ----------------------------------------------------------- + +if (_db.query(`SELECT * FROM page`).size() == 0) { + _val.global().set('cluar:setup', true); + _db.insertIfNotExists( + "page", + _val.init() + .set("uid", "0194d0aa-c5ec-4f9d-abab-de6298c5f9e9") + .set("language_id", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("parent_id", null) + .set("link", "/") + .set("title", "Principal") + .set("status_id", "e24a0cdf-c860-48f2-b597-689f165fd110") + .set("description", "") + .set("social_description", "") + .set("keywords", "") + .set("social_image", "") + .set("menu", true) + .set("menu_title", "") + .set("sorter", 10) + ); + _db.insertIfNotExists( + "page", + _val.init() + .set("uid", "5002a742-e092-4c0b-8536-546bd1319c7f") + .set("language_id", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("parent_id", null) + .set("link", "/") + .set("title", "Home") + .set("status_id", "e24a0cdf-c860-48f2-b597-689f165fd110") + .set("description", "") + .set("social_description", "") + .set("keywords", "") + .set("social_image", "") + .set("menu", true) + .set("menu_title", "") + .set("sorter", 10) + ); +} \ No newline at end of file diff --git a/server/setup/007-configuration_parameter.js b/server/setup/007-configuration_parameter.js new file mode 100644 index 0000000..4dc407d --- /dev/null +++ b/server/setup/007-configuration_parameter.js @@ -0,0 +1,48 @@ + +// ----------------------------------------------------------- +// +// CONFIGURATION_PARAMETER +// +// ----------------------------------------------------------- + +if (_val.global().getBoolean('cluar:setup')) { + _db.insertIfNotExists( + "configuration_parameter", + _val.init() + .set("uid", "2c3a4663-8a09-409f-bddf-b1506b7b9fb7") + .set("code", "footer-address") + .set("description", "Rodapé - Endere\u00E7o") + ); + + _db.insertIfNotExists( + "configuration_parameter", + _val.init() + .set("uid", "199c3736-4996-4b7b-a565-3a2f45ae8971") + .set("code", "footer-email") + .set("description", "Rodapé - E-mail") + ); + + _db.insertIfNotExists( + "configuration_parameter", + _val.init() + .set("uid", "4188eaeb-da5e-4433-8944-2d80752c326d") + .set("code", "footer-phone") + .set("description", "Rodapé - Telefone") + ); + + _db.insertIfNotExists( + "configuration_parameter", + _val.init() + .set("uid", "7ac5d2fe-7c98-46b2-826c-f8f4d41f9857") + .set("code", "map-latitude") + .set("description", "Mapa - Latitude") + ); + + _db.insertIfNotExists( + "configuration_parameter", + _val.init() + .set("uid", "5502693e-8113-429b-852e-9a7364fc48d0") + .set("code", "map-longitude") + .set("description", "Mapa - Longitude") + ); +} \ No newline at end of file diff --git a/server/setup/008-configuration.js b/server/setup/008-configuration.js new file mode 100644 index 0000000..fb5c53e --- /dev/null +++ b/server/setup/008-configuration.js @@ -0,0 +1,62 @@ + +// ----------------------------------------------------------- +// +// CONFIGURATION +// +// ----------------------------------------------------------- + +if (_val.global().getBoolean('cluar:setup')) { + _db.insertIfNotExists( + "configuration", + _val.init() + .set("uid", "f7ca0cbc-d439-41c0-879b-862ec11a232a") + .set("language_id", null) + .set("parameter_id", "7ac5d2fe-7c98-46b2-826c-f8f4d41f9857") + .set("value", "38.7038342") + ); + + _db.insertIfNotExists( + "configuration", + _val.init() + .set("uid", "96f3dacf-8059-4a32-8959-3827cc2d0422") + .set("language_id", null) + .set("parameter_id", "5502693e-8113-429b-852e-9a7364fc48d0") + .set("value", "-8.9698548") + ); + + _db.insertIfNotExists( + "configuration", + _val.init() + .set("uid", "1eae692a-d89c-475f-878e-56ba9a286435") + .set("language_id", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("parameter_id", "199c3736-4996-4b7b-a565-3a2f45ae8971") + .set("value", "meu@e-mail.org") + ); + + _db.insertIfNotExists( + "configuration", + _val.init() + .set("uid", "5e991293-9430-48c9-8d0f-3673fa97b2ee") + .set("language_id", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("parameter_id", "199c3736-4996-4b7b-a565-3a2f45ae8971") + .set("value", "my@e-mail.org") + ); + + _db.insertIfNotExists( + "configuration", + _val.init() + .set("uid", "6dad2c47-66ab-436a-a171-92fb95d3cbdc") + .set("language_id", null) + .set("parameter_id", "2c3a4663-8a09-409f-bddf-b1506b7b9fb7") + .set("value", "Netuno.org, Cluar CMS\r\nOpen Source") + ); + + _db.insertIfNotExists( + "configuration", + _val.init() + .set("uid", "c330772c-98b4-4ef7-8578-3fef4f8355c4") + .set("language_id", null) + .set("parameter_id", "4188eaeb-da5e-4433-8944-2d80752c326d") + .set("value", "99999 9999") + ); +} \ No newline at end of file diff --git a/server/setup/009-dictionary_entry.js b/server/setup/009-dictionary_entry.js new file mode 100644 index 0000000..d305528 --- /dev/null +++ b/server/setup/009-dictionary_entry.js @@ -0,0 +1,80 @@ + +// ----------------------------------------------------------- +// +// DICTIONARY_ENTRY +// +// ----------------------------------------------------------- + +if (_val.global().getBoolean('cluar:setup')) { + _db.insertIfNotExists( + "dictionary_entry", + _val.init() + .set("uid", "8aa071de-147a-4774-bcba-414ba656a267") + .set("code", "contact-form-validate-message-required") + .set("description", "Formul\u00E1rio de Contato - Mensagem Valida\u00E7\u00E3o - Obrigat\u00F3rio") + ); + + _db.insertIfNotExists( + "dictionary_entry", + _val.init() + .set("uid", "31e6aeb9-f7a7-4c1c-9330-a294be006f32") + .set("code", "contact-form-validate-message-email") + .set("description", "Formul\u00E1rio de Contato - Mensagem Valida\u00E7\u00E3o - E-mail") + ); + + _db.insertIfNotExists( + "dictionary_entry", + _val.init() + .set("uid", "c5a81306-6f43-4dd5-9162-d14b9e836a81") + .set("code", "contact-form-fail") + .set("description", "Formul\u00E1rio de Contato - Falhou") + ); + + _db.insertIfNotExists( + "dictionary_entry", + _val.init() + .set("uid", "50d5d744-83a2-4998-97ba-cac58fc04567") + .set("code", "contact-form-success") + .set("description", "Formul\u00E1rio de Contato - Sucesso") + ); + + _db.insertIfNotExists( + "dictionary_entry", + _val.init() + .set("uid", "b0184ea5-c404-476e-bb6f-75943474e955") + .set("code", "contact-form-name") + .set("description", "Formul\u00E1rio de Contato - Nome") + ); + + _db.insertIfNotExists( + "dictionary_entry", + _val.init() + .set("uid", "a6909e12-db4a-4868-ba83-940c640ee43d") + .set("code", "contact-form-email") + .set("description", "Formul\u00E1rio de Contato - E-mail") + ); + + _db.insertIfNotExists( + "dictionary_entry", + _val.init() + .set("uid", "4bacb148-e1dc-44d0-a9de-5a435275b945") + .set("code", "contact-form-subject") + .set("description", "Formul\u00E1rio de Contato - T\u00EDtulo") + ); + + _db.insertIfNotExists( + "dictionary_entry", + _val.init() + .set("uid", "98c54df2-e402-49ef-9294-ebfd5741189b") + .set("code", "contact-form-message") + .set("description", "Formul\u00E1rio de Contato - Mensagem") + ); + + _db.insertIfNotExists( + "dictionary_entry", + _val.init() + .set("uid", "25a5efa8-24c2-441b-8304-ce597fe1604b") + .set("code", "contact-form-send") + .set("description", "Formul\u00E1rio de Contato - Enviar") + ); +} \ No newline at end of file diff --git a/server/setup/010-dictionary.js b/server/setup/010-dictionary.js new file mode 100644 index 0000000..179897b --- /dev/null +++ b/server/setup/010-dictionary.js @@ -0,0 +1,170 @@ + +// ----------------------------------------------------------- +// +// DICTIONARY +// +// ----------------------------------------------------------- + +if (_val.global().getBoolean('cluar:setup')) { + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "e130993c-b071-4977-966f-3efa77f197b7") + .set("language_id", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("entry_id", "8aa071de-147a-4774-bcba-414ba656a267") + .set("value", "

${label} \u00E9 de preenchimento obrigat\u00F3rio.

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "3c61988c-1477-49e2-9e40-ee257bef372a") + .set("language_id", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("entry_id", "31e6aeb9-f7a7-4c1c-9330-a294be006f32") + .set("value", "

${label} n\u00E3o \u00E9 um e-mail v\u00E1lido.

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "6dfa7992-c17c-415d-8aea-c3830eb57df0") + .set("language_id", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("entry_id", "c5a81306-6f43-4dd5-9162-d14b9e836a81") + .set("value", "

N\u00E3o foi poss\u00EDvel enviar os dados, tente novamente mais tarde.

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "1a3b7585-cdd7-42cc-8a2e-dbcad7de6972") + .set("language_id", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("entry_id", "50d5d744-83a2-4998-97ba-cac58fc04567") + .set("value", "

Os dados foram enviados com sucesso, obrigado.

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "07a7e579-e7f5-4fae-a964-991995c9048e") + .set("language_id", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("entry_id", "b0184ea5-c404-476e-bb6f-75943474e955") + .set("value", "

Nome

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "aeb2ea01-ed37-41cd-9526-63c23627f24c") + .set("language_id", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("entry_id", "a6909e12-db4a-4868-ba83-940c640ee43d") + .set("value", "

E-mail

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "e34bdbbd-a4c8-43af-be57-ce212dadce88") + .set("language_id", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("entry_id", "4bacb148-e1dc-44d0-a9de-5a435275b945") + .set("value", "

T\u00EDtulo

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "6c267748-62bf-48cc-9e3d-6f65397ad6a4") + .set("language_id", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("entry_id", "98c54df2-e402-49ef-9294-ebfd5741189b") + .set("value", "

Mensagem

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "4d0e1d26-e443-4cd4-95cc-bae494294fff") + .set("language_id", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("entry_id", "25a5efa8-24c2-441b-8304-ce597fe1604b") + .set("value", "

Enviar

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "fc1cf2a5-5560-48aa-8683-01766e7f3cf1") + .set("language_id", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("entry_id", "8aa071de-147a-4774-bcba-414ba656a267") + .set("value", "

${label} is mandatory.

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "5d83858a-fecb-4529-a6cf-78126b811b45") + .set("language_id", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("entry_id", "31e6aeb9-f7a7-4c1c-9330-a294be006f32") + .set("value", "

${label} is not a valid e-mail.

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "007cf96b-1f7d-4952-ae4c-b114882bcb6c") + .set("language_id", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("entry_id", "c5a81306-6f43-4dd5-9162-d14b9e836a81") + .set("value", "

Unable to send data, please try again later.

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "2ef5fa06-5ac4-4bcd-a107-4bafae0bb0ab") + .set("language_id", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("entry_id", "50d5d744-83a2-4998-97ba-cac58fc04567") + .set("value", "

Data has been sent successfully, thank you.

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "e8723ce6-82d0-469f-b7d3-66fa6cb8c0ba") + .set("language_id", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("entry_id", "b0184ea5-c404-476e-bb6f-75943474e955") + .set("value", "

Name

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "bfeb5f5a-471d-441b-9ab8-ac5d65d50d06") + .set("language_id", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("entry_id", "a6909e12-db4a-4868-ba83-940c640ee43d") + .set("value", "

E-mail

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "6f12f4b0-362f-48e8-a8a5-6e68277a35d3") + .set("language_id", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("entry_id", "4bacb148-e1dc-44d0-a9de-5a435275b945") + .set("value", "

Subject

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "e43c4485-6370-486b-8125-5968a9ce992e") + .set("language_id", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("entry_id", "98c54df2-e402-49ef-9294-ebfd5741189b") + .set("value", "

Message

") + ); + + _db.insertIfNotExists( + "dictionary", + _val.init() + .set("uid", "76ef9bd4-9244-4f32-afae-295fca3617ce") + .set("language_id", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("entry_id", "25a5efa8-24c2-441b-8304-ce597fe1604b") + .set("value", "

Send

") + ); +} \ No newline at end of file diff --git a/server/setup/011-banner.js b/server/setup/011-banner.js new file mode 100644 index 0000000..6c4cf7c --- /dev/null +++ b/server/setup/011-banner.js @@ -0,0 +1,39 @@ + +// ----------------------------------------------------------- +// +// BANNER +// +// ----------------------------------------------------------- + +if (_val.global().getBoolean('cluar:setup')) { + _db.insertIfNotExists( + "banner", + _val.init() + .set("uid", "5126f3bb-51d1-489e-89dc-08087ed38e5e") + .set("page_id", "0194d0aa-c5ec-4f9d-abab-de6298c5f9e9") + .set("type_id", "d7ca6e7d-08a7-4ec0-8d16-9e3f09cd657c") + .set("image", _storage.filesystem('server', 'default-banner-background.jpg').file()) + .set("image_title", "") + .set("image_alt", "") + .set("title", "Prestes a Voar") + .set("content", "

Aqui é onde voc\u00EA lan\u00E7a websites em uma outra dimens\u00E3o.

") + .set("sorter", 10) + .set("position_x", "") + .set("position_y", "") + ); + _db.insertIfNotExists( + "banner", + _val.init() + .set("uid", "9302bc90-d687-494d-bfc0-b4aeff4df09e") + .set("page_id", "5002a742-e092-4c0b-8536-546bd1319c7f") + .set("type_id", "d7ca6e7d-08a7-4ec0-8d16-9e3f09cd657c") + .set("image", _storage.filesystem('server', 'default-banner-background.jpg').file()) + .set("image_title", "") + .set("image_alt", "") + .set("title", "Ready to Fly") + .set("content", "

Here is where you launch websites into another dimension.

") + .set("sorter", 10) + .set("position_x", "") + .set("position_y", "") + ); +} \ No newline at end of file diff --git a/server/setup/012-content.js b/server/setup/012-content.js new file mode 100644 index 0000000..9f5f85f --- /dev/null +++ b/server/setup/012-content.js @@ -0,0 +1,68 @@ + +// ----------------------------------------------------------- +// +// CONTENT +// +// ----------------------------------------------------------- + +if (_val.global().getBoolean('cluar:setup')) { + _db.insertIfNotExists( + "content", + _val.init() + .set("uid", "f110a9d1-c9cd-40a3-9359-7b472234e0ac") + .set("page_id", "0194d0aa-c5ec-4f9d-abab-de6298c5f9e9") + .set("type_id", "5d68fe7f-bfc9-424b-98bc-50c0bfe96f2f") + .set("image", "") + .set("image_title", "") + .set("image_alt", "") + .set("image_max_width", 0) + .set("title", "Documenta\u00E7\u00E3o") + .set("content", "

Veja a documenta\u00E7\u00E3o oficial online em:

A vers\u00E3o offline est\u00E1 na pasta docs que est\u00E1 na ra\u00EDz deste projeto, a\u00ED \u00E9 onde vai encontrar o README inicial.

") + .set("sorter", 20) + ); + + _db.insertIfNotExists( + "content", + _val.init() + .set("uid", "ed312fe0-b839-4367-82c1-1445464b39d0") + .set("page_id", "0194d0aa-c5ec-4f9d-abab-de6298c5f9e9") + .set("type_id", "5d68fe7f-bfc9-424b-98bc-50c0bfe96f2f") + .set("image", "") + .set("image_title", "") + .set("image_alt", "") + .set("image_max_width", 0) + .set("title", "C\u00F3digo Aberto & Comunidade") + .set("content", "

Todas as tecnologias utilizadas aqui s\u00E3o livres e abertas.

Colabore sugerindo melhorias ou reportando problemas em issues.

Para ajudar a comunidade publique as tuas d\u00FAvidas e dificuldades no forum

Visite o site do Netuno e siga-nos nas redes sociais e participe do nosso servidor no discord, os links est\u00E3o no rodap\u00E9.

") + .set("sorter", 30) + ); + + _db.insertIfNotExists( + "content", + _val.init() + .set("uid", "b0697f9e-3eb0-468f-bb71-13d5a9e211fe") + .set("page_id", "5002a742-e092-4c0b-8536-546bd1319c7f") + .set("type_id", "5d68fe7f-bfc9-424b-98bc-50c0bfe96f2f") + .set("image", "") + .set("image_title", "") + .set("image_alt", "") + .set("image_max_width", 0) + .set("title", "Documentation") + .set("content", "

See the official documentation online at:

The offline version is in the docs folder at the root of this project, that's where you'll find the initial README.

") + .set("sorter", 20) + ); + + _db.insertIfNotExists( + "content", + _val.init() + .set("uid", "d7564744-f70f-4859-9070-86a3b2a83e91") + .set("page_id", "5002a742-e092-4c0b-8536-546bd1319c7f") + .set("type_id", "5d68fe7f-bfc9-424b-98bc-50c0bfe96f2f") + .set("image", "") + .set("image_title", "") + .set("image_alt", "") + .set("image_max_width", 0) + .set("title", "Open Source & Community") + .set("content", "

All technologies used here are free and open.

Collaborate by suggesting improvements or reporting problems in issues.

To help the community post your doubts and difficulties in the forum

Visit Netuno's website and follow us on social media and join our discord server, the links are in the footer.

") + .set("sorter", 30) + ); +} diff --git a/server/setup/_end.js b/server/setup/_end.js new file mode 100644 index 0000000..63f6268 --- /dev/null +++ b/server/setup/_end.js @@ -0,0 +1,6 @@ +// _core : Cluar + +if (_val.global().getBoolean('cluar:setup')) { + Cluar.build({ images: true }); + _val.global().set('cluar:setup', false) +} diff --git a/server/setup/_schema-form-01-action.js b/server/setup/_schema-form-01-action.js new file mode 100644 index 0000000..25ffe72 --- /dev/null +++ b/server/setup/_schema-form-01-action.js @@ -0,0 +1,184 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "A\u00E7\u00E3o") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "action") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "e431bb06-50f4-4618-abf8-c7a608a9101d") +) +_form.createComponentIfNotExists( + "e431bb06-50f4-4618-abf8-c7a608a9101d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "948457b7-3071-4faa-8f05-a03cd4e1b596") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "e431bb06-50f4-4618-abf8-c7a608a9101d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Indica\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "indication") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "2a18f22b-a636-41c5-a5d7-bb1e055d446e") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "e431bb06-50f4-4618-abf8-c7a608a9101d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Idioma") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "language_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"language:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "fbffac1c-893c-4472-bd6c-00148455b1b4") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "e431bb06-50f4-4618-abf8-c7a608a9101d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Liga\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "link") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "6ea33856-cbc2-4a00-a9a4-e3db7433ca2b") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "e431bb06-50f4-4618-abf8-c7a608a9101d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "ea6908d9-62d4-4c09-bde5-14857a49c556") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) diff --git a/server/setup/_schema-form-02-banner.js b/server/setup/_schema-form-02-banner.js new file mode 100644 index 0000000..df47d09 --- /dev/null +++ b/server/setup/_schema-form-02-banner.js @@ -0,0 +1,339 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Estandarte") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "banner") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757") +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "ddf6a6d6-2511-41f2-aa2d-75063aba99e5") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 7) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "image") + .set("uid", "54df2e71-fdcd-4808-bbb3-465986bc5c4e") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem Alt") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_alt") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "069820a3-d36f-42a0-b6f6-774bfd012f82") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "dd14d0e9-388f-4bdb-bffb-92360daecaea") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "P\u00E1gina") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "page_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"page:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "150fb106-8d58-44e1-9df0-486e42f57c43") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Posi\u00E7\u00E3o X") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "position_x") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "21c7d5c9-c22d-4065-ad56-dd84fad1f86e") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 9) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Posi\u00E7\u00E3o Y") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "position_y") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "f5510fdb-16c6-42e4-9202-461592983660") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 2) + .set("y", 9) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "43c2ff14-d92c-4ff2-8011-73274b81ec4e") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 8) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "99b47bf5-02cd-4075-94b0-cb9bea98463f") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Tipo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "type_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"banner_type:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "c1cc1d8b-fa86-4756-8db9-23221831e792") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-03-banner_action.js b/server/setup/_schema-form-03-banner_action.js new file mode 100644 index 0000000..1974631 --- /dev/null +++ b/server/setup/_schema-form-03-banner_action.js @@ -0,0 +1,123 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "A\u00E7\u00E3o") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "banner_action") + .set("parent_uid", "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "25b3d049-5020-404c-b275-ddd94d45854d") +) +_form.createComponentIfNotExists( + "25b3d049-5020-404c-b275-ddd94d45854d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "A\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "action_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"action:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "655fd9c5-f60a-4f69-b0db-28a7a40c3e89") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "25b3d049-5020-404c-b275-ddd94d45854d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Estandarte") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "banner_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"banner:title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "3420c7df-221c-480b-aad2-9096c86bc73b") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "25b3d049-5020-404c-b275-ddd94d45854d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "7cf46707-92a0-4ec3-b2eb-3e19c5a604fd") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) diff --git a/server/setup/_schema-form-04-banner_type.js b/server/setup/_schema-form-04-banner_type.js new file mode 100644 index 0000000..3dabb71 --- /dev/null +++ b/server/setup/_schema-form-04-banner_type.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Tipo") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "banner_type") + .set("parent_uid", "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "24446fbd-870d-4ba1-9547-61ffde717ea4") +) +_form.createComponentIfNotExists( + "24446fbd-870d-4ba1-9547-61ffde717ea4", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "7ea38ec8-1f87-4f5c-a692-be267e9c49de") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "24446fbd-870d-4ba1-9547-61ffde717ea4", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "f93b1fe7-7078-4308-974a-479d07fab5b2") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-05-cadastro.js b/server/setup/_schema-form-05-cadastro.js new file mode 100644 index 0000000..9cbb1cb --- /dev/null +++ b/server/setup/_schema-form-05-cadastro.js @@ -0,0 +1,91 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Cadastro") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "cadastro") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "e52f8825-00e6-4160-9bea-681b3d3aa341") +) +_form.createComponentIfNotExists( + "e52f8825-00e6-4160-9bea-681b3d3aa341", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Senha") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "senha") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "d646a2c7-b447-4caf-8069-a567c01d937b") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "e52f8825-00e6-4160-9bea-681b3d3aa341", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Usu\u00E1rio") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "usuario") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "3ce0b9ef-8a48-4b09-be41-4c7ed14ba8dc") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) diff --git a/server/setup/_schema-form-06-configuration.js b/server/setup/_schema-form-06-configuration.js new file mode 100644 index 0000000..7b3e13e --- /dev/null +++ b/server/setup/_schema-form-06-configuration.js @@ -0,0 +1,122 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Configura\u00E7\u00E3o") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "configuration") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "67c60baf-b667-4341-9f41-7e5039f14b13") +) +_form.createComponentIfNotExists( + "67c60baf-b667-4341-9f41-7e5039f14b13", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Idioma") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "language_id") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"language:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "05461d2c-231f-4927-9e93-31b93ef645d5") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "67c60baf-b667-4341-9f41-7e5039f14b13", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Par\u00E2metro") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "parameter_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"configuration_parameter:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "bf2a6100-29ec-4fcf-8b3e-f77f707ecc6c") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "67c60baf-b667-4341-9f41-7e5039f14b13", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Valor") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "value") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "4425203e-15ac-4fcb-a10e-edb6c5ac15ad") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) diff --git a/server/setup/_schema-form-07-configuration_parameter.js b/server/setup/_schema-form-07-configuration_parameter.js new file mode 100644 index 0000000..51cbfc5 --- /dev/null +++ b/server/setup/_schema-form-07-configuration_parameter.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Par\u00E2metro") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "configuration_parameter") + .set("parent_uid", "67c60baf-b667-4341-9f41-7e5039f14b13") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "5617ebed-9f41-4a31-a118-e616768b7465") +) +_form.createComponentIfNotExists( + "5617ebed-9f41-4a31-a118-e616768b7465", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "9ceff8a2-9553-4e0a-8ac9-18c87f61f139") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "5617ebed-9f41-4a31-a118-e616768b7465", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "d6ef1904-f500-4c27-b1e7-dbe574f5d7bd") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-08-contact.js b/server/setup/_schema-form-08-contact.js new file mode 100644 index 0000000..b98981b --- /dev/null +++ b/server/setup/_schema-form-08-contact.js @@ -0,0 +1,215 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Contacto") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "contact") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "80fe7d91-d01c-4275-abf6-4b2814d5eb33") +) +_form.createComponentIfNotExists( + "80fe7d91-d01c-4275-abf6-4b2814d5eb33", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Email") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "email") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "email") + .set("uid", "75ce45f3-47bf-4648-905b-133d0f2641a1") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "80fe7d91-d01c-4275-abf6-4b2814d5eb33", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "File") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "file") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "file") + .set("uid", "9b937876-cf87-4ffb-8a16-8db5b417bd77") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "80fe7d91-d01c-4275-abf6-4b2814d5eb33", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Mensagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "message") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "da491ea7-e0a1-4e4e-9097-7981f2578e10") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "80fe7d91-d01c-4275-abf6-4b2814d5eb33", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Momento") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "moment") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"DEFAULT_CURRENT\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"true\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "datetime") + .set("uid", "77accaa2-0dff-4055-a3e1-2a072d933336") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "80fe7d91-d01c-4275-abf6-4b2814d5eb33", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Nome") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "name") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "ae1b9314-b868-4a79-b5a7-6023a2cf1cd2") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "80fe7d91-d01c-4275-abf6-4b2814d5eb33", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "subject") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "45b93973-a8cb-4c0d-bead-adbe232650c1") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) diff --git a/server/setup/_schema-form-09-content.js b/server/setup/_schema-form-09-content.js new file mode 100644 index 0000000..3fb165c --- /dev/null +++ b/server/setup/_schema-form-09-content.js @@ -0,0 +1,308 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "content") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "3ed92a11-c243-4bdb-a542-bb22abca638d") +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "fee09c3b-f289-4fc8-bce9-dbc25450f80f") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 7) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "image") + .set("uid", "1868e061-4838-473e-9751-70cdaf7b46d2") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem Alt") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_alt") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "badadeb1-2641-4bda-bbf7-b7b7103c871f") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Largura M\u00E1xima da Imagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_max_width") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "ba93ef25-8282-4ba1-aeb7-0a665dbec354") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "ea3a17d1-2452-49d8-98ef-3954236f8052") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "P\u00E1gina") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "page_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"page:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "d46ff842-2640-4c33-ba15-ecc0446a0f65") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "6e0482fc-5a66-4a56-b5cf-e3327d4efdb0") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 8) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "36c0429a-e1fe-46b7-949d-9281c92f4856") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Tipo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "type_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"content_type:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "edafcbc7-5efe-43bf-8251-3f9a130ea393") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-10-content_action.js b/server/setup/_schema-form-10-content_action.js new file mode 100644 index 0000000..fe72b20 --- /dev/null +++ b/server/setup/_schema-form-10-content_action.js @@ -0,0 +1,123 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "A\u00E7\u00E3o") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "content_action") + .set("parent_uid", "3ed92a11-c243-4bdb-a542-bb22abca638d") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "407e5448-e290-4f69-92cf-704ac2def08c") +) +_form.createComponentIfNotExists( + "407e5448-e290-4f69-92cf-704ac2def08c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "A\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "action_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"action:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "4a5c76fc-dc52-474d-bf1b-b1bf19e718b8") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "407e5448-e290-4f69-92cf-704ac2def08c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"content:page_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "7e6a1253-7e3b-4a1e-9b5f-54e5cec6af70") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "407e5448-e290-4f69-92cf-704ac2def08c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "630f792f-ffe0-4cbd-96ac-2f0d4178d872") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) diff --git a/server/setup/_schema-form-11-content_type.js b/server/setup/_schema-form-11-content_type.js new file mode 100644 index 0000000..5187cad --- /dev/null +++ b/server/setup/_schema-form-11-content_type.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Tipo") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "content_type") + .set("parent_uid", "3ed92a11-c243-4bdb-a542-bb22abca638d") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "a2097bd8-cfaa-4e02-a2e9-f1626864f60e") +) +_form.createComponentIfNotExists( + "a2097bd8-cfaa-4e02-a2e9-f1626864f60e", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "4b971129-ea48-4430-bebf-bfa1d7a3eb7c") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "a2097bd8-cfaa-4e02-a2e9-f1626864f60e", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "0537df6f-a6d8-4bdf-9302-7f0bd93fa630") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-12-dictionary.js b/server/setup/_schema-form-12-dictionary.js new file mode 100644 index 0000000..e607dff --- /dev/null +++ b/server/setup/_schema-form-12-dictionary.js @@ -0,0 +1,122 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Dicion\u00E1rio") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "dictionary") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "d2cfcdaf-b308-4e99-bfc1-b1a5df0b3090") +) +_form.createComponentIfNotExists( + "d2cfcdaf-b308-4e99-bfc1-b1a5df0b3090", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Chave") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "entry_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"dictionary_entry:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "0e427d42-ca01-4459-a5ee-2471a2e17389") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "d2cfcdaf-b308-4e99-bfc1-b1a5df0b3090", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Idioma") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "language_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"language:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "c41e5986-a5a8-4b3f-bccf-0fa0dfa14ed5") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "d2cfcdaf-b308-4e99-bfc1-b1a5df0b3090", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Valor") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "value") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "6458e5c8-78b7-421e-9f00-dffeddc88036") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) diff --git a/server/setup/_schema-form-13-dictionary_entry.js b/server/setup/_schema-form-13-dictionary_entry.js new file mode 100644 index 0000000..f13de29 --- /dev/null +++ b/server/setup/_schema-form-13-dictionary_entry.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Entrada") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "dictionary_entry") + .set("parent_uid", "d2cfcdaf-b308-4e99-bfc1-b1a5df0b3090") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "44450cdb-eece-4485-9fc7-0a38da700beb") +) +_form.createComponentIfNotExists( + "44450cdb-eece-4485-9fc7-0a38da700beb", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "cddbaf4c-219e-4e09-b4ec-515e4930765e") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "44450cdb-eece-4485-9fc7-0a38da700beb", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "06ebc3ab-9262-44f1-a039-19d4846e060b") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-14-functionality.js b/server/setup/_schema-form-14-functionality.js new file mode 100644 index 0000000..4b718f0 --- /dev/null +++ b/server/setup/_schema-form-14-functionality.js @@ -0,0 +1,215 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Funcionalidade") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "functionality") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "62b515ac-e376-4859-9b47-03558601a872") +) +_form.createComponentIfNotExists( + "62b515ac-e376-4859-9b47-03558601a872", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "13bf7618-e51f-40fb-ace9-67ca696a1b55") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "62b515ac-e376-4859-9b47-03558601a872", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "image") + .set("uid", "d9d692d7-fb0e-4e06-b9cf-4f4ed63f6e88") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "62b515ac-e376-4859-9b47-03558601a872", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "P\u00E1gina") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "page_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"page:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "87c30ca4-f2f4-423c-abc0-a32e462d30b1") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "62b515ac-e376-4859-9b47-03558601a872", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "a66d20be-e827-4b52-9e61-acce56dfd575") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "62b515ac-e376-4859-9b47-03558601a872", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "8501086e-1b4f-4409-b4a6-d4de9bbe9e59") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "62b515ac-e376-4859-9b47-03558601a872", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Tipo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "type_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"functionality_type:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "d3e210e1-8ef9-4823-a1bf-b314922bb867") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-15-functionality_type.js b/server/setup/_schema-form-15-functionality_type.js new file mode 100644 index 0000000..3e9dfff --- /dev/null +++ b/server/setup/_schema-form-15-functionality_type.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Tipo") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "functionality_type") + .set("parent_uid", "62b515ac-e376-4859-9b47-03558601a872") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "80e8f4dc-e626-4b3d-9b69-5a733789c41e") +) +_form.createComponentIfNotExists( + "80e8f4dc-e626-4b3d-9b69-5a733789c41e", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "637028fc-ddda-4793-9252-f0c209d4baa2") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "80e8f4dc-e626-4b3d-9b69-5a733789c41e", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "6242fac3-38c8-4268-80e9-1d58f70e8f1f") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-16-language.js b/server/setup/_schema-form-16-language.js new file mode 100644 index 0000000..d23b75a --- /dev/null +++ b/server/setup/_schema-form-16-language.js @@ -0,0 +1,153 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Idioma") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "language") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "a9d53c5e-4d74-4616-8d5e-244f719cc5b8") +) +_form.createComponentIfNotExists( + "a9d53c5e-4d74-4616-8d5e-244f719cc5b8", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "fae99d53-d542-4c35-aefd-bf0abc9ad40a") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "a9d53c5e-4d74-4616-8d5e-244f719cc5b8", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Padr\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "default") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"DEFAULT\":{\"default\":\"true\",\"type\":\"BOOLEAN\",\"value\":\"true\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "checkbox") + .set("uid", "5541c115-0a73-48aa-ad99-2a6a20ee14d6") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "a9d53c5e-4d74-4616-8d5e-244f719cc5b8", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "5dd0c4ef-101a-4856-b84d-1fc790ab0351") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "a9d53c5e-4d74-4616-8d5e-244f719cc5b8", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Localiza\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "locale") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "4190e066-d29e-48d3-9411-ce58a3630990") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-17-listing.js b/server/setup/_schema-form-17-listing.js new file mode 100644 index 0000000..71f01d4 --- /dev/null +++ b/server/setup/_schema-form-17-listing.js @@ -0,0 +1,277 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Listagem") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "listing") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "033ca390-bda9-42ce-9867-7e234bfc6df2") +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "a53d3098-0a17-4b9f-a723-ec4e3cf944bf") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "image") + .set("uid", "4ed8b858-df1e-422f-b68c-13d8cf1fdc41") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem Alt") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_alt") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "2a5f5495-6955-40a7-a285-e74c59679ba5") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 7) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "b6ba2516-e44d-41cb-a54f-1ced9712b5cc") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "P\u00E1gina") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "page_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"page:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "06eccded-9d54-4c28-bbfb-e3d346adc786") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "7c0f1456-c96b-44a2-8767-2362fabb2c76") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 8) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "aeeabf99-2990-42eb-99d6-74759f861b75") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Tipo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "type_id") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"listing_type:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "b5505781-f5bc-4a15-82e0-6440a16d2cd0") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-18-listing_item.js b/server/setup/_schema-form-18-listing_item.js new file mode 100644 index 0000000..5b52e5a --- /dev/null +++ b/server/setup/_schema-form-18-listing_item.js @@ -0,0 +1,278 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Item") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "listing_item") + .set("parent_uid", "033ca390-bda9-42ce-9867-7e234bfc6df2") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "fcd6e4d2-019d-469a-8b7e-d61008a7574c") +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "a2679800-5d79-4c14-8dfe-0602139269a4") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "image") + .set("uid", "2ffc9635-e913-4498-8b59-7f5c3062a10b") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem Alt") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_alt") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "a08f2fe6-0c21-474e-8843-f4d4a1f5cb1d") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "02d528ef-3b3e-42b4-b6db-0bc1e300814f") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "URL") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "link") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "6c7aa1b2-b66f-4d20-a70a-249010603e93") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 8) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Listagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "listing_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"listing:page_id,title,type_id\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "ae837d53-fc9e-4df3-ba01-e98ae17d2dda") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "e9691ccd-ce0c-41b6-8529-39426b25dba7") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 7) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "df575094-1232-4665-b532-aadbc41887be") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-19-listing_type.js b/server/setup/_schema-form-19-listing_type.js new file mode 100644 index 0000000..bbdf394 --- /dev/null +++ b/server/setup/_schema-form-19-listing_type.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Tipo") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "listing_type") + .set("parent_uid", "033ca390-bda9-42ce-9867-7e234bfc6df2") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "4e7b1b9b-522f-4ea9-bbab-444625419a26") +) +_form.createComponentIfNotExists( + "4e7b1b9b-522f-4ea9-bbab-444625419a26", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "4e596e41-abf9-4a01-8f2b-3c02f84a9cde") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "4e7b1b9b-522f-4ea9-bbab-444625419a26", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "15d58665-99a5-49dc-b683-3383b0c8f6bc") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-20-page.js b/server/setup/_schema-form-20-page.js new file mode 100644 index 0000000..4616559 --- /dev/null +++ b/server/setup/_schema-form-20-page.js @@ -0,0 +1,401 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "P\u00E1gina") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "page") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "e6c40643-e58a-40aa-b430-7a003ec65246") +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o ") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "39f672bd-6294-49e5-aa84-c768564d56d2") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Palavras-Chave") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "keywords") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "651e35a1-c4e6-41c5-b1f3-7779e6de8a25") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 7) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Idioma") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "language_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"language:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "5ef839d0-fd32-4f2a-ae13-8fe02f425a0d") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Liga\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "link") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "c5f38402-49e4-4836-9bba-91dbc7bcda5d") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Menu") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "menu") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"DEFAULT\":{\"default\":\"true\",\"type\":\"BOOLEAN\",\"value\":\"true\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "checkbox") + .set("uid", "494744b1-9dfb-4c93-ac91-51bff5a2f048") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 9) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Menu T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "menu_title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "796486c7-32af-4cbc-aa50-8f97878e2848") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 2) + .set("y", 9) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Pai") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "parent_id") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"page:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "9aca938d-609a-41ff-960f-82c143019e31") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o para as Redes Sociais") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "social_description") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "b9218efb-a330-4fad-98cc-ffd8b4e344c3") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem para as Redes Sociais") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "social_image") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "image") + .set("uid", "9737f863-7015-49b0-8dbb-df281dfa683d") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 8) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "d13b694a-ddfd-4b06-a132-5155d4c0fdf3") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 10) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Estado") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "status_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"page_status:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "b51687ee-519e-4ad2-8d31-6174b2047f4c") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "f553f488-a153-495d-a767-a4e0fe474a33") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) diff --git a/server/setup/_schema-form-21-page_status.js b/server/setup/_schema-form-21-page_status.js new file mode 100644 index 0000000..5dc2371 --- /dev/null +++ b/server/setup/_schema-form-21-page_status.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Estado") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "page_status") + .set("parent_uid", "e6c40643-e58a-40aa-b430-7a003ec65246") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "814c194a-1d3a-4ea4-9855-bbad176f2c36") +) +_form.createComponentIfNotExists( + "814c194a-1d3a-4ea4-9855-bbad176f2c36", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "74d24cb2-ac6f-42fa-8584-30b2977ed8d8") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "814c194a-1d3a-4ea4-9855-bbad176f2c36", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "b67e991d-8313-44be-8b24-9341d61ead1a") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_start.js b/server/setup/_start.js new file mode 100644 index 0000000..e69de29 diff --git a/server/templates/dashboard.html b/server/templates/dashboard.html new file mode 100644 index 0000000..ddf58ed --- /dev/null +++ b/server/templates/dashboard.html @@ -0,0 +1,2 @@ + +
diff --git a/server/templates/dev/dashboard.html b/server/templates/dev/dashboard.html new file mode 100644 index 0000000..6d3b631 --- /dev/null +++ b/server/templates/dev/dashboard.html @@ -0,0 +1,31 @@ + +
+
+
+

+ _{&lang=netuno.main.dashboard.title} +

+

_{&lang=netuno.main.dashboard.description}

+
+
+

+ _{&lang=netuno.main.dashboard.welcome_netuno} +

+

_{&lang=netuno.dev.main.you_not_form}

+

_{&lang=netuno.dev.main.you_can_start_by_clicking_top_bar}

+
+ +
+ #macro(listFormItems $items) + + #end + #listFormItems($data.get('menu').get('forms')) +
+
diff --git a/server/templates/scripts.html b/server/templates/scripts.html new file mode 100644 index 0000000..12fb56d --- /dev/null +++ b/server/templates/scripts.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/templates/scripts_dev.html b/server/templates/scripts_dev.html new file mode 100644 index 0000000..e69de29 diff --git a/server/templates/scripts_login.html b/server/templates/scripts_login.html new file mode 100644 index 0000000..e69de29 diff --git a/server/templates/styles.html b/server/templates/styles.html new file mode 100644 index 0000000..9698d22 --- /dev/null +++ b/server/templates/styles.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/templates/styles_dev.html b/server/templates/styles_dev.html new file mode 100644 index 0000000..9698d22 --- /dev/null +++ b/server/templates/styles_dev.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/templates/styles_login.html b/server/templates/styles_login.html new file mode 100644 index 0000000..e69de29 diff --git a/storage/filesystem/private/info.txt b/storage/filesystem/private/info.txt new file mode 100644 index 0000000..0b8da6f --- /dev/null +++ b/storage/filesystem/private/info.txt @@ -0,0 +1,4 @@ + +Secure data files comes here... + +Only accessible for logged users! diff --git a/storage/filesystem/public/info.txt b/storage/filesystem/public/info.txt new file mode 100644 index 0000000..55f3ca4 --- /dev/null +++ b/storage/filesystem/public/info.txt @@ -0,0 +1,2 @@ + +Public storage files comes here... diff --git a/storage/filesystem/server/default-banner-background.jpg b/storage/filesystem/server/default-banner-background.jpg new file mode 100644 index 0000000..74e106f Binary files /dev/null and b/storage/filesystem/server/default-banner-background.jpg differ diff --git a/storage/filesystem/server/info.txt b/storage/filesystem/server/info.txt new file mode 100644 index 0000000..33a81aa --- /dev/null +++ b/storage/filesystem/server/info.txt @@ -0,0 +1,4 @@ + +Secure data files comes here... + +Only accessible through server side! diff --git a/ui/.babelrc b/ui/.babelrc new file mode 100644 index 0000000..12b16e5 --- /dev/null +++ b/ui/.babelrc @@ -0,0 +1,9 @@ +{ + "presets": [ + "@babel/preset-env", + "@babel/preset-react" + ], + "plugins": [ + ["import", { "libraryName": "antd", "style": "less" } ] + ] +} \ No newline at end of file diff --git a/ui/.gitignore b/ui/.gitignore new file mode 100644 index 0000000..ae15f2b --- /dev/null +++ b/ui/.gitignore @@ -0,0 +1,18 @@ + +node_modules/ + +.DS_Store +*.log +.idea/ +.metadata/ +.vscode +package-lock.json +yarn.lock + +.Trash + +*~* +*#* + + + diff --git a/ui/README.md b/ui/README.md new file mode 100644 index 0000000..2605aa2 --- /dev/null +++ b/ui/README.md @@ -0,0 +1,24 @@ + +### Install Packages + +`npm install` + +### Watch changes and auto recompile + +`npm run watch` + +### Installation requirements + +On Windows with an Administrator terminal, run: + +``` +npm install --global --production windows-build-tools +npm install --global node-gyp +``` + +With others Python version, then configure the Python 2.7 path: + +``` +node-gyp --python /path/to/python2.7 +npm config set python /path/to/executable/python2.7 +``` diff --git a/ui/package.json b/ui/package.json new file mode 100644 index 0000000..7ee31eb --- /dev/null +++ b/ui/package.json @@ -0,0 +1,38 @@ +{ + "name": "ui", + "version": "1.0.0", + "description": "", + "main": "src/index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "webpack --mode production", + "watch": "webpack --mode development --watch" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@babel/core": "^7.17.5", + "@babel/plugin-proposal-object-rest-spread": "^7.17.3", + "@babel/preset-env": "^7.16.11", + "@babel/preset-react": "^7.16.7", + "babel-loader": "^8.2.3", + "babel-plugin-import": "^1.13.3", + "css-loader": "^6.7.0", + "less": "^4.1.2", + "less-loader": "^10.2.0", + "prop-types": "^15.8.1", + "style-loader": "^3.3.1", + "webpack": "^5.70.0", + "webpack-cli": "^4.9.2" + }, + "dependencies": { + "@ant-design/icons": "^4.7.0", + "@netuno/service-client": "^1.0.10", + "@netuno/ws-client": "^1.0.8", + "antd": "^4.18.9", + "chart.js": "^3.7.1", + "react-chartjs-2": "^4.0.1", + "react-highlight-words": "^0.17.0" + } +} diff --git a/ui/src/components/MyButton/index.js b/ui/src/components/MyButton/index.js new file mode 100644 index 0000000..a53e8b1 --- /dev/null +++ b/ui/src/components/MyButton/index.js @@ -0,0 +1,20 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { Button } from 'antd'; + +function MyButton({ text, onClick }) { + return ( +
+ +
+ ); +}; + +MyButton.propTypes = { + text: PropTypes.string.isRequired, + onClick: PropTypes.func.isRequired +}; + +export default MyButton; \ No newline at end of file diff --git a/ui/src/containers/ContactTable/index.js b/ui/src/containers/ContactTable/index.js new file mode 100644 index 0000000..9061576 --- /dev/null +++ b/ui/src/containers/ContactTable/index.js @@ -0,0 +1,215 @@ +import React, { useEffect, useState, useRef } from 'react'; + +import { Table, Input, Button, notification } from 'antd'; + +import { SearchOutlined } from '@ant-design/icons'; + +import Highlighter from 'react-highlight-words'; + +import _service from '@netuno/service-client'; + +const { Column } = Table; + +const pageSize = 10; + +const columnsNames = [ 'name', 'email', 'subject', 'moment' ]; + +const columnsTitles = { + name: 'Nome', + email: 'E-mail', + subject: 'Título', + moment: 'Momento' +}; + +function ContactTable() { + const [ uid, setUID ] = useState(null); + const [ dataSource, setDataSource ] = useState([]); + const [ loading, setLoading ] = useState(true); + const [ filter, setFilter ] = useState({ + name: '', + email: '', + subject: '', + moment: '' + }); + const [ pagination, setPagination ] = useState({ + current: 1, + pageSize, + total: 0 + }); + const [ sorter, setSorter ] = useState({ + field: '', + order: '' + }); + + const searchInput = useRef(); + + const loadTable = (settings) => { + if (settings == null || typeof settings == "undefined") { + settings = { state: null }; + } + if (typeof settings.filter == 'undefined') { + settings.filter = filter; + } + if (typeof settings.pagination == 'undefined') { + settings.pagination = pagination; + } + if (typeof settings.sorter == 'undefined') { + settings.sorter = sorter; + } + setFilter(settings.filter); + setSorter(settings.sorter); + setPagination(settings.pagination); + setLoading(true); + _service({ + method: 'POST', + url: "/admin/contact/list", + data: { filter, pagination, sorter }, + success: (response) => { + setDataSource(response.json.resultados); + setPagination({ + ...pagination, + total: response.json.total + }); + setLoading(false); + }, + fail: (e) => { + console.error("Service admin/tabela error.", e); + notification.error({ + message: 'Tabela', + description: 'Não foi possível carregar os dados.' + }); + setDataSource([]); + setLoading(false); + } + }); + } + + const handleTableChange = (pagination, filters, sorter) => { + loadTable({ pagination, filters, sorter: { field: sorter.field, order: sorter.order } }); + }; + + const handleSearch = (selectedKeys, confirm, value, dataIndex) => { + if (value != null && value != '') { + filter[dataIndex] = value; + } + confirm(); + loadTable({ filter }); + }; + + const handleReset = (clearFilters, dataIndex) => { + filter[dataIndex] = ''; + clearFilters(); + loadTable({ filter }); + }; + + const getColumnSearchProps = (dataIndex) => { + return { + filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => { + let field = null; + let width = 200; + let filterValue = ''; + let buttons = []; + buttons.push( + + ); + buttons.push( + + ); + field = ( + setSelectedKeys(e.target.value ? [e.target.value] : [])} + onPressEnter={() => handleSearch(selectedKeys, confirm, selectedKeys.length > 0 ? selectedKeys[0] : '', dataIndex)} + /> + ); + return ( +
+
+ { field } +
+ { buttons } +
+ ); + }, + filterIcon: filtered => { + return ( + + ); + }, + onFilter: (value, record) => { + return record; + }, + onFilterDropdownVisibleChange: visible => { + if (visible && searchInput.current) { + window.setTimeout(() => searchInput.current.select()); + } + }, + render: text => { + if (text && filter != null && filter[dataIndex] != null && filter[dataIndex] != '') { + return ( + + ); + } + return text; + }, + }; + }; + + useEffect(() => { + loadTable(); + const handleNavigationLoad = () => { + $('[netuno-navigation]').find('a').on('netuno:click', (e) => { + const link = $(e.target); + if (link.is('[netuno-navigation-dashboard]')) { + // Memu > Dashboard > Clicked! + loadTable(); + } + }); + }; + netuno.addNavigationLoad(handleNavigationLoad); + return () => { + netuno.removeNavigatoinLoad(handleNavigationLoad); + }; + }, []); + return ( + + {columnsNames.map( + (columnName) => + + )} +
+ ); +} + +export default ContactTable; \ No newline at end of file diff --git a/ui/src/containers/ContactTable/index.less b/ui/src/containers/ContactTable/index.less new file mode 100644 index 0000000..e69de29 diff --git a/ui/src/containers/DashboardContainer/index.js b/ui/src/containers/DashboardContainer/index.js new file mode 100644 index 0000000..3341a35 --- /dev/null +++ b/ui/src/containers/DashboardContainer/index.js @@ -0,0 +1,27 @@ +import React from "react"; + +import { Typography, Tabs } from "antd"; + +import ContactTable from "../ContactTable"; + +import "./index.less"; + +const { Title } = Typography; + +const { TabPane } = Tabs; + +function DashboardContainer() { + return ( +
+ Dashboard + + +

Lista de contactos submetidos pelo formulário do website.

+ +
+
+
+ ); +} + +export default DashboardContainer; \ No newline at end of file diff --git a/ui/src/containers/DashboardContainer/index.less b/ui/src/containers/DashboardContainer/index.less new file mode 100644 index 0000000..da3b33f --- /dev/null +++ b/ui/src/containers/DashboardContainer/index.less @@ -0,0 +1,8 @@ + +.my-dashboard { + width: 100%; + &__button { + padding: 80px; + text-align: center; + } +} diff --git a/ui/src/index.js b/ui/src/index.js new file mode 100644 index 0000000..2c0555e --- /dev/null +++ b/ui/src/index.js @@ -0,0 +1,45 @@ +import React from "react"; +import ReactDOM from "react-dom"; +import _service from '@netuno/service-client'; +import DashboardContainer from "./containers/DashboardContainer"; + +_service.config({ + prefix: netuno.config.urlServices +}); + +const dashboardDiv = document.getElementById("app-dashboard"); + +const dashboardContainer = dashboardDiv ? ReactDOM.render(, dashboardDiv) : false; + +netuno.addNavigationLoad(() => { + $('[netuno-navigation]').find('a').on('netuno:click', (e)=> { + const link = $(e.target); + if (dashboardContainer && link.is('[netuno-navigation-dashboard]')) { + // Menu > Dashboard > Clicked! + } + }); +}); + +netuno.addContentLoad((container) => { + // When any content is loaded dinamically this is executed... + if (container.is('[netuno-form-search="YOUR_FORM_NAME"]')) { + // When search page is loaded... + } else if (container.is('[netuno-form-edit="YOUR_FORM_NAME"]')) { + // When form edit is loaded... + } +}); + +netuno.addPageLoad(() => { + // When page is loaded... + let modal = $('#app-dashboard-modal-form'); + modal.on('hidden.bs.modal', ()=> { + modal.find('[netuno-form-edit]').empty(); + }); + $('#app-dashboard-modal-form-button').on('click', ()=> { + modal.modal('show'); + netuno.loadFormEdit(modal.find('[netuno-form]')); + }); + modal.find('[netuno-form]').on('netuno:save', ()=> { + modal.modal('hide'); + }); +}); \ No newline at end of file diff --git a/ui/src/styles/main.less b/ui/src/styles/main.less new file mode 100644 index 0000000..5a69da6 --- /dev/null +++ b/ui/src/styles/main.less @@ -0,0 +1,4 @@ + +/*** GLOBAL CSS ***/ + +@import '~antd/dist/antd'; \ No newline at end of file diff --git a/ui/webpack.config.js b/ui/webpack.config.js new file mode 100644 index 0000000..cd552dd --- /dev/null +++ b/ui/webpack.config.js @@ -0,0 +1,84 @@ +const path = require('path'); + +module.exports = { + entry: [ './src/index.js', './src/styles/main.less' ], + devtool: "source-map", + output: { + path: __dirname +'/../public/scripts', + filename: 'main.js' + }, + module: { + rules: [ + { + test: /\.jsx$/, + include: [ + path.resolve(__dirname, 'src') + ], + exclude: [/node_modules/], + use: [{ + loader: 'babel-loader' + }] + }, + { + test: /\.js$/, + include: [ + path.resolve(__dirname, 'src') + ], + exclude: [/node_modules/], + use: [{ + loader: 'babel-loader' + }] + }, + { + test: /\.css$/, + include: [ + path.resolve(__dirname, 'src') + ], + exclude: [/node_modules/], + use: [ + 'style-loader', + 'css-loader' + ] + }, + { + test: /\.less$/, + include: [ + path.resolve(__dirname, 'src') + ], + exclude: [/node_modules/], + use: [ + { + loader: 'style-loader' // creates style nodes from JS strings + }, + { + loader: 'css-loader', // translates CSS into CommonJ, + options: { + sourceMap: true + /*, + modules: { + mode: 'local', + localIdentName: "[local]___[hash:base64:5]", + context: path.resolve(__dirname, 'src'), + hashPrefix: 'app', + }*/ + } + }, + { + loader: 'less-loader', // compiles Less to CSS + options: { + lessOptions: { + modifyVars: { + '@primary-color': '#1178FF', + '@link-color': '#1178FF', + '@border-radius-base': '5px' + }, + javascriptEnabled: true + }, + sourceMap: true + } + } + ] + } + ] + } +}; diff --git a/website/.editor.config b/website/.editor.config new file mode 100644 index 0000000..03f7253 --- /dev/null +++ b/website/.editor.config @@ -0,0 +1,6 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 \ No newline at end of file diff --git a/website/.gitignore b/website/.gitignore new file mode 100644 index 0000000..ba989fd --- /dev/null +++ b/website/.gitignore @@ -0,0 +1,43 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +package-lock.json +yarn.lock + +*~* +*#* + +src/config/config.json + +build/cluarData.js +public/cluarData.js + +public/sitemap.xml + +public/images/banner/ +public/images/content/ +public/images/functionality/ +public/images/listing/ +public/images/listing_item/ + diff --git a/website/README.md b/website/README.md new file mode 100644 index 0000000..9c40dcd --- /dev/null +++ b/website/README.md @@ -0,0 +1,68 @@ +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `yarn start` + +Runs the app in the development mode.
+Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+You will also see any lint errors in the console. + +### `yarn test` + +Launches the test runner in the interactive watch mode.
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `yarn build` + +Builds the app for production to the `build` folder.
+It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `yarn eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting + +### Analyzing the Bundle Size + +This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size + +### Making a Progressive Web App + +This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app + +### Advanced Configuration + +This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration + +### Deployment + +This section has moved here: https://facebook.github.io/create-react-app/docs/deployment + +### `yarn build` fails to minify + +This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify diff --git a/website/build.sh b/website/build.sh new file mode 100755 index 0000000..8c5999f --- /dev/null +++ b/website/build.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +if [ -f "build/cluarData.js" ]; then + mv build/cluarData.js .cluarData.js +fi + +cp src/config-prod.json src/config.json + +rsync -av build/images/ public/images/ + +yarn install + +yarn build + +cp src/config-dev.json src/config.json + +if [ -f ".cluarData.js" ]; then + mv .cluarData.js build/cluarData.js +fi diff --git a/website/craco.config.js b/website/craco.config.js new file mode 100644 index 0000000..e0bd06c --- /dev/null +++ b/website/craco.config.js @@ -0,0 +1,21 @@ +const CracoLessPlugin = require('craco-less'); + +module.exports = { + plugins: [ + { + plugin: CracoLessPlugin, + options: { + lessLoaderOptions: { + lessOptions: { + modifyVars: { + '@primary-color': '#FFCB05', + '@font-size-base': '16px', + '@border-radius-base': '20px' + }, + javascriptEnabled: true, + }, + }, + }, + }, + ], +}; diff --git a/website/package.json b/website/package.json new file mode 100644 index 0000000..dd08585 --- /dev/null +++ b/website/package.json @@ -0,0 +1,52 @@ +{ + "name": "cluar", + "version": "0.1.0", + "private": true, + "dependencies": { + "@animated-burgers/burger-slip": "^1.1.2", + "@ant-design/icons": "^4.7.0", + "@netuno/service-client": "^1.0.10", + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^12.0.0", + "@testing-library/user-event": "^13.2.1", + "antd": "^4.18.7", + "classnames": "^2.3.1", + "craco-less": "^2.0.0", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-ga": "^3.3.0", + "react-icons": "^4.3.1", + "react-map-gl": "^7.0.9", + "react-router-dom": "^6.2.1", + "react-scripts": "5.0.0", + "react-scroll-parallax": "^3.0.3", + "sal.js": "^0.8.5", + "sprintf-js": "^1.1.2", + "web-vitals": "^2.1.0" + }, + "scripts": { + "start": "craco start", + "build": "craco build", + "test": "craco test", + "eject": "craco eject", + "watch": "craco start --watch" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/website/public/images/favicon-1024.png b/website/public/images/favicon-1024.png new file mode 100644 index 0000000..92eba0a Binary files /dev/null and b/website/public/images/favicon-1024.png differ diff --git a/website/public/images/favicon-192.png b/website/public/images/favicon-192.png new file mode 100644 index 0000000..5fafe37 Binary files /dev/null and b/website/public/images/favicon-192.png differ diff --git a/website/public/images/favicon-512.png b/website/public/images/favicon-512.png new file mode 100644 index 0000000..a22c6d1 Binary files /dev/null and b/website/public/images/favicon-512.png differ diff --git a/website/public/images/favicon.ico b/website/public/images/favicon.ico new file mode 100644 index 0000000..32debfe Binary files /dev/null and b/website/public/images/favicon.ico differ diff --git a/website/public/images/logo.png b/website/public/images/logo.png new file mode 100644 index 0000000..8d4ce1d Binary files /dev/null and b/website/public/images/logo.png differ diff --git a/website/public/index.html b/website/public/index.html new file mode 100644 index 0000000..b1e7a0c --- /dev/null +++ b/website/public/index.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/website/public/manifest.json b/website/public/manifest.json new file mode 100644 index 0000000..1b55bb6 --- /dev/null +++ b/website/public/manifest.json @@ -0,0 +1,30 @@ +{ + "short_name": "CLUAR", + "name": "CLUAR - CMS for ReactJS and Website Backoffice", + "icons": [ + { + "src": "images/favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "images/favicon-192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "images/favicon-512.png", + "type": "image/png", + "sizes": "512x512" + }, + { + "src": "images/favicon-1024.png", + "type": "image/png", + "sizes": "1024x1024" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#ffffff", + "background_color": "#ffffff" +} diff --git a/website/public/robots.txt b/website/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/website/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/website/src/App.js b/website/src/App.js new file mode 100644 index 0000000..2cc7932 --- /dev/null +++ b/website/src/App.js @@ -0,0 +1,69 @@ +import React from 'react'; +import { Layout } from 'antd'; +import { + BrowserRouter, + Routes, + Route, + Navigate +} from "react-router-dom"; + +import Analytics from './common/Analytics'; +import Cluar from './common/Cluar'; +import Builder from './common/Builder'; +import BaseCookies from './base/Cookies'; +import BaseHeader from './base/Header'; +import BaseFooter from './base/Footer'; +import NotFound from './pages/NotFound'; + +import './styles/App.less'; + +const { Content } = Layout; + +function App() { + const storageLocale = window.localStorage.getItem('locale'); + if (storageLocale == null) { + window.localStorage.setItem('locale', Cluar.currentLanguage().locale); + } else { + Cluar.changeLanguage(storageLocale); + } + + const routes = []; + for (const language of Cluar.languages()) { + if (!Cluar.pages()[language.code]) { + continue; + } + const subroutes = []; + for (const page of Cluar.pages()[language.code]) { + subroutes.push( + } /> + ); + } + routes.push( + + {subroutes} + + ); + } + + return ( + + { Cluar.isGAEnabled() && } +
+ + + + + } /> + {routes} + } /> + + + + + +
+
+ ); +} + +export default App; \ No newline at end of file diff --git a/website/src/App.test.js b/website/src/App.test.js new file mode 100644 index 0000000..4db7ebc --- /dev/null +++ b/website/src/App.test.js @@ -0,0 +1,9 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + const { getByText } = render(); + const linkElement = getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/website/src/base/Cookies/index.js b/website/src/base/Cookies/index.js new file mode 100644 index 0000000..96925aa --- /dev/null +++ b/website/src/base/Cookies/index.js @@ -0,0 +1,36 @@ + +import React, { useState } from 'react'; +import { Button } from 'antd'; + +import Cluar from '../../common/Cluar'; + +import './index.less'; + +function BaseCookies() { + const [acceptedCookies, setAcceptedCookies] = useState(sessionStorage.getItem('cookies-accepted')); + const onClick = () => { + sessionStorage.setItem('cookies-accepted', '1'); + setAcceptedCookies('1'); + } + if (acceptedCookies === '1') { + return null; + } + return ( +
+
+
+

+ {Cluar.currentLanguage().locale === 'pt' && <>Utilizamos cookies no nosso website para lhe proporcionar a experiência mais relevante, para mais informações consulte a nossa política de cookies e privacidade. } + {Cluar.currentLanguage().locale === 'en' && <>We use cookies to provide you the best experience, check our cookies and privacy policy. } +

+ +
+
+
+ ) +} + +export default BaseCookies; \ No newline at end of file diff --git a/website/src/base/Cookies/index.less b/website/src/base/Cookies/index.less new file mode 100644 index 0000000..ef4bf22 --- /dev/null +++ b/website/src/base/Cookies/index.less @@ -0,0 +1,32 @@ +.cookies { + position: absolute; + height: 100px; + background-color: #777777; + &--popup { + position: fixed; + z-index: 10000; + width: 100%; + height: auto; + bottom: 0; + background-color: #fff; + box-shadow: 0 -1px 10px 0 rgba(172, 171, 171, 0.3); + &__content { + color: rgba(0, 0, 0, 0.85); + padding: 20px 50px; + @media only screen and (max-width: 800px) { + padding: 20px 20px; + } + display: flex; + justify-content: space-between; + p { + margin-bottom: 0; + } + @media only screen and (max-width: 768px) { + display: block; + p { + margin-bottom: 1em; + } + } + } + } +} diff --git a/website/src/base/Footer/index.js b/website/src/base/Footer/index.js new file mode 100644 index 0000000..e590729 --- /dev/null +++ b/website/src/base/Footer/index.js @@ -0,0 +1,68 @@ +import React from 'react'; +import { Layout, Row, Col } from 'antd'; +import { PhoneOutlined, HomeOutlined, MailOutlined } from '@ant-design/icons'; +import { FaHome, FaPhone, FaEnvelope, FaYoutube, FaGithub, FaFacebook, FaLinkedin, FaTwitter, FaInstagram, FaDiscord } from 'react-icons/fa'; +import { RiOpenSourceFill } from 'react-icons/ri'; +import Configuration from '../../components/Configuration'; + +import './index.less'; + +const { Footer } = Layout; + +function BaseFooter() { + return ( + + ); +} + +export default BaseFooter; \ No newline at end of file diff --git a/website/src/base/Footer/index.less b/website/src/base/Footer/index.less new file mode 100644 index 0000000..c16bc73 --- /dev/null +++ b/website/src/base/Footer/index.less @@ -0,0 +1,123 @@ +@import "../../styles/variables.less"; + +.ant-layout-footer { + z-index: 3; + width: 100%; + position: relative; + padding: 0 20px 20px 20px; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .2), + 0 1px 1px 0 rgba(0, 0, 0, .14), + 0 2px 1px -1px rgba(0, 0, 0, .12); + background: @footer-background !important; + color: @footer-color !important; + + &__wrapper{ + width: 100%; + max-width: @site-max-width; + margin: auto; + } + + .logo { + img { + width: 100%; + max-width: 200px; + } + } + + @media only screen and (max-width: @header-mobile-width) { + text-align: center; + padding: 20px 0 10px; + > div:last-child { + padding: 0 20px; + } + } + + h1 { + font-size: 25px; + padding: 0 10px; + + + @media only screen and (min-width: @header-desktop-width) { + margin: 0 calc((100% - @header-desktop-width) / 2); + } + + @media only screen and (max-width: @header-mobile-width) { + width: 100%; + margin: 0 auto; + font-size: 20px; + } + } + + .line { + height: 20px; + opacity: .5; + border: 0; + border-radius: 50%; + border-bottom: 2px solid @primary-color; + width: 100%; + } + + .links-bar, + .copyright { + padding: 0 10px; + display: inline-block; + width: 50%; + font-size: .875em; + + a { + color: @footer-color; + text-decoration: underline; + } + + @media screen and (min-width: @header-desktop-width) { + width: calc(50% - calc((100% - @header-desktop-width) / 2)); + } + + @media only screen and (max-width: @header-mobile-width) { + display: block; + width: 100%; + margin: 20px auto !important; + font-size: 12px; + text-align: center; + } + } + + .links-bar { + margin: 20px auto; + + @media screen and (min-width: @header-desktop-width) { + margin-left: calc((100% - @header-desktop-width) / 2); + } + } + + .copyright { + color: @footer-color; + text-align: right; + + @media screen and (min-width: @header-desktop-width) { + margin-right: calc((100% - @header-desktop-width) / 2); + } + } + + .cellphone { + color: @footer-color; + text-align: left; + + @media screen and (min-width: @header-desktop-width) { + margin-right: calc((100% - @header-desktop-width) / 2); + } + } + + .copyright, + .cellphone { + @media screen and (max-width: @header-mobile-width) { + text-align: center; + } + } + + .social-links { + >a { + margin-right: 10px; + } + } +} diff --git a/website/src/base/Header/index.js b/website/src/base/Header/index.js new file mode 100644 index 0000000..4892d2c --- /dev/null +++ b/website/src/base/Header/index.js @@ -0,0 +1,163 @@ +import React, { useState } from 'react'; +import { Layout, Menu } from 'antd'; +import { GlobalOutlined } from '@ant-design/icons'; +import Burger from '@animated-burgers/burger-slip'; +import '@animated-burgers/burger-slip/dist/styles.css'; +import classNames from 'classnames'; +import { + Route, + Link +} from "react-router-dom"; +import Cluar from '../../common/Cluar'; +import Builder from '../../common/Builder'; + +import './index.less'; + +const { Header } = Layout; +const { SubMenu } = Menu; + +function BaseHeader() { + const [burgerMenu, setBurgerMenu] = useState(false); + const [activeMenu, setActiveMenu] = useState('main'); + + const handleMenuClick = (selectMenu) => { + setBurgerMenu(false); + if (selectMenu) { + setActiveMenu(selectMenu); + } + window.scrollTo(0, 0); + }; + + const menuLanguages = []; + const menu = []; + const subMenuKeys = []; + const routes = []; + for (const language of Cluar.languages()) { + if (!Cluar.pages()[language.code]) { + continue; + } + if (language.code !== Cluar.currentLanguage().code) { + menuLanguages.push( + { + Cluar.changeLanguage(language.locale); + window.localStorage.setItem('locale', Cluar.currentLanguage().locale); + window.location.href = `/${language.locale}/`; + }}>{language.description} + ); + } + + const buildMenu = (page, level) => { + if (page.menu && language.code === Cluar.currentLanguage().code) { + const key = `${page.link}`; + if (Cluar.pages()[language.code].find((p) => p.menu && p.parent === page.link)) { + subMenuKeys.push(key); + return ( + handleMenuClick(key)}> + {page.title} + + }> + { Cluar.pages()[language.code].filter((p) => p.menu && p.parent === page.link).map((p) => buildMenu(p, level + 1))} + + ); + } else { + /** + * Sample of submenu items customization, only on level 1: + * + if (level == 1) { + return ( + + handleMenuClick(key)}> +

{page.title}

+

{page.description}

+ +
+ ); + } + **/ + return ( + + handleMenuClick(key)}> + {page.title} + + + ); + } + } + return null; + }; + + const subroutes = []; + for (const page of Cluar.pages()[language.code]) { + if (page.menu && page.parent === "" && language.code === Cluar.currentLanguage().code) { + menu.push( + buildMenu(page, 0) + ); + } + subroutes.push( + } /> + ); + } + routes.push( + + {subroutes} + + ); + } + + return ( +
+
+
+ handleMenuClick('/')}> + logo + +
+
+ + {menu} + +
+
+ + {menu} + +
+
+ { setBurgerMenu(!burgerMenu); }} /> +
+ + } title={Cluar.currentLanguage().code}> + {menuLanguages} + + +
+
+ ); +} + +export default BaseHeader; \ No newline at end of file diff --git a/website/src/base/Header/index.less b/website/src/base/Header/index.less new file mode 100644 index 0000000..1d20e5b --- /dev/null +++ b/website/src/base/Header/index.less @@ -0,0 +1,197 @@ +@import "../../styles/variables.less"; + +.ant-layout-header { + padding: 0 calc((100% - @header-desktop-width) / 2); + position: fixed; + display: flex; + justify-content: center; + flex-direction: row; + z-index: 1000; + top: 0; + width: 100%; + height: @header-size !important; + line-height: @header-size !important; + background: @header-background !important; + box-shadow: 0 0px 10px 7px rgba(0, 0, 0, 0.25); + padding: 20px; + + @media (max-width: @header-mobile-width) { + padding: 0 20px !important; + } + + &__wrapper{ + width: 100%; + max-width: @site-max-width; + display: flex; + } + + >*:not(.menu-burger-open) { + z-index: 3; + } + + &.header-burger-open .menu { + z-index: 0; + } + + .logo { + display: block; + width: @logo-width; + height: auto; + + a { + img { + width: auto; + height: 50px; + } + } + + @media only screen and (max-width: @header-mobile-width) { + width: auto; + max-width: 400px; + a { + img { + max-width: 124px; + height: auto; + } + } + } + } + + .menu-languages { + line-height: @header-line-height !important; + background-color: transparent; + color: @header-menu-color; + border-bottom: none; + display: flex; + width: 150px !important; + + .ant-menu-submenu-title:hover { + color: @header-menu-color-hover !important; + } + + li { + margin-bottom: 20px !important; + display: inline; + + &:hover { + border-color: @header-menu-color-hover !important; + } + } + } + + .menu { + width: 100%; + line-height: @header-line-height !important; + + @media only screen and (max-width: @header-mobile-width) { + display: none; + } + + ul { + width: 100%; + background-color: transparent; + margin-left: auto; + border-bottom: none; + border-right: none; + justify-content: flex-end; + + li { + border: 0 !important; + background-color: transparent !important; + + &:after { + content: unset; + } + + @media screen and (max-width: @header-mobile-width) { + display: block; + } + + &:hover { + a { + color: @header-menu-color-hover; + } + + border-color: @header-menu-color-hover !important; + } + + a { + color: @header-menu-color; + font-size: 1em; + } + } + } + + &-languages { + margin-left: 0 !important; + + @media screen and (max-width: @header-mobile-width) { + margin-right: 32px; + margin-left: auto !important; + } + } + } + + .menu-burger-button { + position: absolute; + width: auto; + height: auto; + top: calc(@header-size / 4); + right: calc(@header-size / 4); + + @media only screen and (min-width: @header-mobile-width) { + display: none; + } + + .burger { + height: calc(@header-size-mobile / 2); + } + } + + .menu-burger { + @media only screen and (min-width: @header-mobile-width) { + display: none; + } + } + + .menu-level-1 { + /* SAMPLE OF MENU CUSTOM LEVEL */ + } +} + +.ant-menu-sub, +.ant-menu-submenu-popup { + border-radius: 2px !important; +} + +.header-burger-open { + .menu { + display: block; + position: fixed; + width: 100%; + height: calc(100% - @header-size); + top: @header-size; + left: 0; + right: 0; + z-index: 9998; + background-color: @mobile-menu-background; + padding: @mobile-menu-padding-vertical @mobile-menu-padding-horizontal; + overflow: auto; + margin-top: 0; + + @media only screen and (max-width: @header-mobile-width) { + height: calc(100% - @header-size-mobile); + top: @header-size-mobile; + } + } +} + +.burger .burger-lines, +.burger .burger-lines:after, +.burger .burger-lines:before { + background-color: @header-menu-color !important; +} + +.burger.burger-slip.open .burger-lines{ + background-color: initial !important; +} diff --git a/website/src/common/Analytics.js b/website/src/common/Analytics.js new file mode 100644 index 0000000..477c435 --- /dev/null +++ b/website/src/common/Analytics.js @@ -0,0 +1,31 @@ +import { useEffect } from 'react'; +import PropTypes from 'prop-types'; +import ReactGA from 'react-ga'; + +const logPageChange = (pathname, search = '', options) => { + const page = pathname + search; + const { location } = window; + ReactGA.set({ + page, + location: `${location.origin}${page}`, + ...options + }); + ReactGA.pageview(page); +}; + +function Analytics({ location, options }) { + useEffect(() => { + logPageChange(location.pathname, location.search, options); + }, [location, options]); + return null; +} + +Analytics.propTypes = { + location: PropTypes.shape({ + pathname: PropTypes.string, + search: PropTypes.string + }).isRequired, + options: PropTypes.object +}; + +export default Analytics; \ No newline at end of file diff --git a/website/src/common/Builder.js b/website/src/common/Builder.js new file mode 100644 index 0000000..6e0aa0e --- /dev/null +++ b/website/src/common/Builder.js @@ -0,0 +1,49 @@ +import React, { useEffect } from 'react'; + +import sal from 'sal.js'; + +import Cluar from '../common/Cluar'; + +import Banner from '../components/Banner'; +import Content from '../components/Content'; +import Listing from '../components/Listing'; +import ContactForm from '../components/functionality/ContactForm'; +import ContactMap from '../components/functionality/ContactMap'; + +import Cadastro from '../components/functionality/Cadastro'; + +function Builder({ page }) { + useEffect(() => { + sal(); + document.getElementsByTagName('meta')["keywords"].content = page.keywords; + document.getElementsByTagName('meta')["description"].content = page.description; + document.title = page.title + ' | ' + Cluar.config().name; + }, [page]); + + const components = []; + for (const item of page.structure) { + const { uid } = item; + if (item.section === 'banner') { + components.push(); + } else if (item.section === 'content') { + components.push(); + } else if (item.section === 'listing') { + components.push(); + } else if (item.section === 'functionality') { + if (item.type === 'contact-form') { + components.push(); + } else if (item.type === 'contact-map') { + components.push(); + } else if (item.type === 'cadastro') { + components.push(); + } + } + } + return ( +
+ {components} +
+ ); +} + +export default Builder; \ No newline at end of file diff --git a/website/src/common/Cluar.js b/website/src/common/Cluar.js new file mode 100644 index 0000000..2b58a2d --- /dev/null +++ b/website/src/common/Cluar.js @@ -0,0 +1,122 @@ + +import _service from '@netuno/service-client'; +import ReactGA from 'react-ga'; +import CluarCustomData from './CluarCustomData'; + +let data = null; +let currentLanguage = null; +let customData = null; +let gaEnabled = false; + +export default class Cluar { + static init() { + data = window.cluarData; + currentLanguage = Cluar.defaultLanguage(); + customData = new CluarCustomData(data); + _service.config({ + prefix: data.config.services.api + }); + if (data.config.analytics && data.config.analytics !== '') { + ReactGA.initialize(data.config.analytics); + gaEnabled = true; + } + } + + static customData() { + return customData; + } + + static config() { + return data.config; + } + + static isGAEnabled() { + return gaEnabled; + } + + static defaultLanguage() { + return data.languages.find((e) => e.default === true); + } + + static currentLanguage() { + return currentLanguage; + } + + static changeLanguage(codeOrLocale) { + currentLanguage = data.languages.find((e) => e.code === codeOrLocale || e.locale === codeOrLocale); + } + + static languages() { + return data.languages; + } + + static pages() { + return data.pages; + } + + static configuration(parameter) { + let value = data.configuration[Cluar.currentLanguage().code] ? data.configuration[Cluar.currentLanguage().code][parameter] : null; + if (!value) { + value = data.configuration['GENERIC'] ? data.configuration['GENERIC'][parameter] : null; + } + if (value) { + return value; + } + return parameter; + } + + static configurationNumber(parameter) { + const value = Cluar.configuration(parameter); + if (value && value.match(/^-?\d+\.?\d*$/)) { + return parseFloat(value); + } else { + return 0; + } + } + + static configurationMultilines(parameter) { + let value = Cluar.configuration(parameter); + value = value.replace(/(?:\r\n|\r|\n)/g, '
'); + return value; + } + + static plainDictionary(entry) { + let value = Cluar.dictionary(entry); + if (value) { + return (value).replace(/<\/?((p)|(br))[^>]*>/g, "") + } + return entry; + } + + static dictionaryNoParagraph(entry) { + let value = Cluar.dictionary(entry); + if (value) { + return (value).replace(/<\/?p[^>]*>/g, "") + } + return entry; + } + + static dictionary(entry) { + let value = data.dictionary[Cluar.currentLanguage().code] ? data.dictionary[Cluar.currentLanguage().code][entry] : null; + if (value) { + return value; + } + return entry; + } + + static banner(type) { + const i = data.banners.find((e) => e.type === type && e.language === Cluar.currentLanguage().code); + if (i) { + return i; + } + return { type, language: Cluar.currentLanguage().code, title: type, content: type, image: null }; + } + + static content(type) { + const i = data.contents.find((e) => e.type === type && e.language === Cluar.currentLanguage().code); + if (i) { + return i; + } + return { type, language: Cluar.currentLanguage().code, title: type, content: type }; + } +} diff --git a/website/src/common/CluarCustomData.js b/website/src/common/CluarCustomData.js new file mode 100644 index 0000000..50b0957 --- /dev/null +++ b/website/src/common/CluarCustomData.js @@ -0,0 +1,6 @@ + +export default class CluarCustomData { + constructor(data) { + this.data = data; + } +} diff --git a/website/src/common/serviceWorker.js b/website/src/common/serviceWorker.js new file mode 100644 index 0000000..b04b771 --- /dev/null +++ b/website/src/common/serviceWorker.js @@ -0,0 +1,141 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +export function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://bit.ly/CRA-PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' }, + }) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + 'No internet connection found. App is running in offline mode.' + ); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready + .then(registration => { + registration.unregister(); + }) + .catch(error => { + console.error(error.message); + }); + } +} diff --git a/website/src/components/Actions/Item/index.js b/website/src/components/Actions/Item/index.js new file mode 100644 index 0000000..23f13db --- /dev/null +++ b/website/src/components/Actions/Item/index.js @@ -0,0 +1,17 @@ +import React from 'react'; + +import './index.less'; + +function Item({ section, type, title, content, indication, link }) { + return ( +
  • +
    window.location = link}> + { title !== '' ?

    {title}

    : null} + { content.replace(/ /g,'') !== '' ?

    : null } + { indication !== '' ? {indication} : null} +

    +
  • + ); +} + +export default Item; \ No newline at end of file diff --git a/website/src/components/Actions/Item/index.less b/website/src/components/Actions/Item/index.less new file mode 100644 index 0000000..54761dd --- /dev/null +++ b/website/src/components/Actions/Item/index.less @@ -0,0 +1,39 @@ +@import "../../../styles/variables.less"; + +.actions__item { + width: 280px; + padding: 15px; + margin: 0 0 20px 0; + @media only screen and (max-width: @header-mobile-width) { + margin: 0; + } + border: @actions-item-border-width solid @actions-item-border-color; + border-radius: @actions-item-border-radius; + transition: all .1s ease-in; + background-color: @actions-item-background; + color: @actions-item-text-color; + font-weight: 600; + &:hover { + cursor: pointer; + background-color: @actions-item-background-hover; + color: @actions-item-text-color-hover; + a { + color: @actions-item-link-color-hover; + } + } + + h4 { + color: @actions-item-text-color; + font-size: 1.2em; + margin-bottom: 0.2em; + } + p { + font-size: 1.0em; + margin-bottom: 0.5em; + } + a { + text-transform: uppercase; + font-size: 1.0em; + color: @actions-item-link-color; + } +} diff --git a/website/src/components/Actions/index.js b/website/src/components/Actions/index.js new file mode 100644 index 0000000..c6479b5 --- /dev/null +++ b/website/src/components/Actions/index.js @@ -0,0 +1,22 @@ +import React from 'react'; + +import Item from './Item'; + +import './index.less'; + +function Actions({ section, type, actions }) { + const list = []; + for (const action of actions) { + list.push(); + } + if (list.length === 0) { + return null; + } + return ( +
      + {list} +
    + ); +} + +export default Actions; \ No newline at end of file diff --git a/website/src/components/Actions/index.less b/website/src/components/Actions/index.less new file mode 100644 index 0000000..07b64a5 --- /dev/null +++ b/website/src/components/Actions/index.less @@ -0,0 +1,10 @@ +.actions { + list-style-type: none; + margin: 0; + padding: 0 0 0 20px; + @media only screen and (max-width: 800px) { + padding: 0 0 0 0; + display: flex; + flex-wrap: wrap; + } +} diff --git a/website/src/components/Banner/index.js b/website/src/components/Banner/index.js new file mode 100644 index 0000000..cb2266a --- /dev/null +++ b/website/src/components/Banner/index.js @@ -0,0 +1,40 @@ +import React from 'react'; +import { Row, Col } from 'antd'; + +import Actions from '../Actions'; +import Cluar from '../../common/Cluar'; + +import './index.less'; + +function Banner({ section, type, image, image_title, image_alt, title, content, position, actions }) { + let backgroundPositionX = position.x !== "" ? position.x : "50%"; + let backgroundPositionY = position.y !== "" ? position.y : "50%"; + + return ( +
    +
    + + +
    +

    {title}

    +
    +
    + + + + +
    +
    + {Cluar.plainDictionary('text-sub-banner')} +
    +
    +
    +
    + ); +} + +export default Banner; \ No newline at end of file diff --git a/website/src/components/Banner/index.less b/website/src/components/Banner/index.less new file mode 100644 index 0000000..e0dacdd --- /dev/null +++ b/website/src/components/Banner/index.less @@ -0,0 +1,170 @@ +@import "../../styles/variables.less"; + +.banner { + position: relative; + + &__wrapper{ + width: 100%; + max-width: @site-max-width; + margin-top: -32px; + + @media only screen and (max-width: @header-mobile-width) { + margin-top: 0 + } + } + + &__sub-banner { + display: none; + position: absolute; + bottom: 32px; + left: 0; + background-color: @banner-sub-banner-bg; + padding: 15px 0; + width: 100% !important; + text-align: center; + font-weight: bold; + font-size: 1.3em; + letter-spacing: .025em; + box-shadow: @banner-sub-banner-box-shadow; + color: @banner-sub-banner-color; + @media only screen and (max-width: @header-mobile-width) { + font-size: 1.2em; + bottom: 0 + } + } + + &__default-sub-banner { + padding-top: calc(1.8em + 30px) !important; + padding-bottom: calc(1.8em + 30px) !important; + .banner__sub-banner { + display: block; + } + > div > div > div { + p { + margin-bottom: 0; + &:nth-last-child(1) { + margin-bottom: 1em; + } + } + } + @media only screen and (max-width: @header-mobile-width) { + > div > div > div { + margin: auto; + } + } + } + + &__default, &__default-sub-banner { + min-height: 600px; + height: calc(100vh - @header-size); + @media only screen and (max-width: @header-mobile-width) { + height: calc(100vh - @header-size-mobile); + } + .banner__darken-bg { + display: none; + } + } + &__secondary { + position: relative; + height: calc(40vh - @header-size); + text-align: left; + @media only screen and (max-width: @header-mobile-width) { + height: calc(30vh - @header-size-mobile); + } + div:nth-child(1) { + z-index: 2; + h2 { + text-shadow: 0 0 10px @banner-secondary-text-shadow; + } + } + .banner__darken-bg { + width: 100%; + height: 100%; + background-color: @banner-secondary-darken-bg-color; + position: absolute; + z-index: 1; + } + @media only screen and (max-width: @header-mobile-width) { + height: calc(33vh - @header-size-mobile) !important; + } + } + > div { + display: flex; + align-items: center; + justify-content: center; + text-align: left; + padding: 0 50px; + width: 100%; + background-color: #777; + background-size: cover; + background-attachment: fixed; + background-repeat: no-repeat; + + @media only screen and (max-width: @header-mobile-width) { + height: calc(100vh - @header-size-mobile); + min-height: unset; + text-align: center; + padding: 0; + } + > div { + width: 100%; + > div { + > div { + width: calc(80% - 40px); + height: auto; + > h1 { + margin-bottom: 0; + font-weight: 400; + font-size: 3.5em; + color: @primary-color; + letter-spacing: .01em; + @media only screen and (max-width: @header-mobile-width) { + font-size: 2em; + line-height: 1.2em; + margin-bottom: 10px; + } + } + @media only screen and (max-width: @header-mobile-width) { + width: 100%; + padding: 0 20px + } + > div { + > p { + font-size: 1.4em; + color: #fff; + @media only screen and (max-width: @header-mobile-width) { + font-size: 1.5em; + line-height: 1.5em; + } + } + } + } + } + .actions { + position: relative; + display: inline-block; + padding-left: 0; + text-align: center; + .actions__item { + h4 { + font-size: 1.0em; + margin-bottom: 0.1em; + } + p { + font-size: 1.1em; + margin-bottom: 0.1em; + } + a { + font-size: 1em + } + &:hover { + h4 { + color: #000000; + } + } + } + } + } + } +} + \ No newline at end of file diff --git a/website/src/components/Configuration/index.js b/website/src/components/Configuration/index.js new file mode 100644 index 0000000..57efa2a --- /dev/null +++ b/website/src/components/Configuration/index.js @@ -0,0 +1,18 @@ +import React from 'react'; + +import Cluar from '../../common/Cluar'; + +function Configuration({parameter, number, multilines}) { + let value = Cluar.configuration(parameter); + if (multilines) { + value = Cluar.configurationMultilines(parameter); + } + if (number) { + value = Cluar.configurationNumber(parameter); + } + return ( + + ); +} + +export default Configuration; \ No newline at end of file diff --git a/website/src/components/Content/index.js b/website/src/components/Content/index.js new file mode 100644 index 0000000..d4c67e3 --- /dev/null +++ b/website/src/components/Content/index.js @@ -0,0 +1,114 @@ +import React from 'react'; +import { Row, Col } from 'antd'; + +import Actions from '../Actions'; + +import './index.less'; + +function Content({section, type, title, content, image, image_title, image_alt, image_max_width, actions}) { + let layout = null; + const imageStyle = {}; + if (image_max_width > 0) { + imageStyle["maxWidth"] = `${image_max_width}px`; + } + if (type === 'text') { + layout = ( +
    +
    +

    { title }

    + { title ?
    : null } +
    +
    +
    + ); + } else if (type === 'image-left') { + layout = ( +
    + + +
    + { +
    + + +
    +

    { title }

    +
    +
    + +
    +
    + ); + } else if (type === 'image-right') { + layout = ( +
    + + +
    +

    { title }

    +
    +
    +
    + + +
    + { +
    + +
    +
    + ); + } else if (type === 'image-top') { + layout = ( +
    +
    + { +
    +
    +

    { title }

    +
    +
    +
    + ); + } else if (type === 'image-bottom') { + layout = ( +
    +
    +

    { title }

    +
    +
    +
    + { +
    +
    + ); + } else if (type === 'image') { + layout = ( +
    +
    + { +
    +
    + ); + } else { + layout = ( +
    +
    + { +
    +
    +

    { title }

    +
    +
    +
    + ); + } + return ( +
    + { layout } + +
    + ); +} + +export default Content; \ No newline at end of file diff --git a/website/src/components/Content/index.less b/website/src/components/Content/index.less new file mode 100644 index 0000000..8d20a0f --- /dev/null +++ b/website/src/components/Content/index.less @@ -0,0 +1,115 @@ +@import "../../styles/variables.less"; + +.content { + width: 100%; + max-width: calc(@site-max-width + 120px); + margin: 50px auto; + padding: 0 60px; + display: flex; + @media only screen and (max-width: 800px) { + padding: 0 20px; + margin: 20px auto; + flex-wrap: wrap; + } + + > div { + width: 100%; + } + + > ul.actions { + width: 300px; + @media only screen and (max-width: 800px) { + width: 100%; + } + } + + .image { + width: 100%; + height: auto; + img { + display: block; + margin-left: auto; + margin-right: auto; + } + } + + .text { + > h1 { + font-size: 2em; + font-weight: normal; + letter-spacing: .01em; + } + + > div { + font-size: 1.2em; + > ul { + margin-left: 40px !important; + } + } + } + + &__text { + + } + + &__image-left { + + } + &__image-right { + + } + &__image-top { + + } + &__image-bottom { + + } + + &__text-service { + > h1 { + font-size: 2em; + font-weight: normal; + letter-spacing: .01em; + } + &__title-border { + height: 4px; + width: 8vw; + margin-top: -1em; + margin-bottom: 1em; + background: rgb(255,255,255); + } + .ant-btn { + height: 50px; + min-width: 190px; + > span { + text-transform: uppercase; + letter-spacing: .05em; + font-size: 1.2em; + padding: 0 20px; + } + } + } + + .actions__item { + background-color: @primary-color; + text-align: center; + border-color: @primary-color; + h4 { + color: #ffffff; + } + a { + color: @secondary-color; + } + &:hover { + cursor: pointer; + background-color: @secondary-color; + color: #000000; + h4 { + color: #000000; + } + a { + color: @primary-color; + } + } + } +} diff --git a/website/src/components/Dictionary/index.js b/website/src/components/Dictionary/index.js new file mode 100644 index 0000000..5f0b2aa --- /dev/null +++ b/website/src/components/Dictionary/index.js @@ -0,0 +1,20 @@ +import React from 'react'; + +import Cluar from '../../common/Cluar'; + +function Dictionary({entry, oneLine, noParagraph}) { + let value = Cluar.dictionary(entry); + if (noParagraph) { + value = Cluar.dictionaryNoParagraph(entry); + } else if (oneLine) { + value = Cluar.plainDictionary(entry); + return ( + + ) + } + return ( +
    + ); +} + +export default Dictionary; \ No newline at end of file diff --git a/website/src/components/Listing/Item/index.js b/website/src/components/Listing/Item/index.js new file mode 100644 index 0000000..7d9ce78 --- /dev/null +++ b/website/src/components/Listing/Item/index.js @@ -0,0 +1,42 @@ +import React from 'react'; +import { Col } from 'antd'; + +import './index.less'; + +function Item({ section, type, image, image_title, image_alt, title, content, link }) { + let layout = null; + if (type === 'YOUR-CUSTOM-TYPE-HERE') { + layout = ( + + + {title} +
    +
    + + ); + } else if(type === 'OTHER-CUSTOM-TYPE-HERE') { + layout = ( +
  • +
    +

    {title}

    +
    +
    +
  • + ); + } else { + layout = ( +
  • +
    +

    {title}

    + { +
    +
    +
  • + ); + } + return ( + layout + ); +} + +export default Item; \ No newline at end of file diff --git a/website/src/components/Listing/Item/index.less b/website/src/components/Listing/Item/index.less new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/website/src/components/Listing/Item/index.less @@ -0,0 +1 @@ + diff --git a/website/src/components/Listing/index.js b/website/src/components/Listing/index.js new file mode 100644 index 0000000..a7e7e2d --- /dev/null +++ b/website/src/components/Listing/index.js @@ -0,0 +1,46 @@ +import React from 'react'; +import { Row } from 'antd'; + +import Item from './Item'; + +import './index.less'; + +function Listing({section, type, image, image_title, image_alt, title, content, items}) { + const children = []; + for (const item of items) { + children.push(); + } + + let listLayout = ( +
    +

    { title }

    +
    +
    +
      + { children } +
    +
    + ); + + if (type === 'YOUR-CUSTOM-TYPE-HERE') { + listLayout = ( + + { children } + + ); + } else if (type === 'OTHER-CUSTOM-TYPE-HERE') { + listLayout = ( + + { children } + + ); + } + + return ( +
    + { listLayout } +
    + ); +} + +export default Listing; \ No newline at end of file diff --git a/website/src/components/Listing/index.less b/website/src/components/Listing/index.less new file mode 100644 index 0000000..928a1c2 --- /dev/null +++ b/website/src/components/Listing/index.less @@ -0,0 +1,36 @@ +@import "../../styles/variables.less"; + +.listing { + margin: auto; + max-width: 80%; + padding: 50px 60px 0; + display: flex; + @media only screen and (max-width: 800px) { + padding: 20px 0; + margin: 20px auto; + flex-wrap: wrap; + } + &__title-border { + height: 4px; + width: 8vw; + margin-top: -1em; + margin-bottom: 1em; + background: rgb(255,255,255); + background: linear-gradient(90deg, @primary-color 0%, @secondary-color 100%); + } + + > div > h1 { + font-size: 2em; + font-weight: normal; + letter-spacing: .01em; + } + > div > div { + font-size: 1.2em; + } + + > div > ul { + list-style-type: none; + margin: 0; + padding: 0; + } +} diff --git a/website/src/components/functionality/Cadastro/index.js b/website/src/components/functionality/Cadastro/index.js new file mode 100644 index 0000000..4d32bb5 --- /dev/null +++ b/website/src/components/functionality/Cadastro/index.js @@ -0,0 +1,94 @@ +import React, { useState } from 'react'; + +import { Form, Input, Button, notification } from 'antd'; + +import _service from '@netuno/service-client'; + +import './index.less'; + +function Cadastro() { + const [ loading, setLoading ] = useState(false); + + const onFinish = (values) => { + console.log('Success:', values); + setLoading(true); + const fail = () => { + setLoading(false); + notification.error({ + message: 'Houve uma falha', + description: 'Por favor tente novamente mais tarde.', + top: 100 + }); + }; + _service({ + url: "cadastro", + method: 'POST', + data: values, + success: (response) => { + if (response.json && response.json.result === true) { + setLoading(false); + notification.success({ + message: 'Sucesso', + description: 'Os dados foram salvados com sucesso.', + top: 100 + }); + } else { + fail(); + } + }, + fail: (e) => { + console.log("Cadastro falhou:", e); + fail(); + } + }); + }; + + return ( +
    +
    + + + + + + + + + + + +
    +
    + ); +}; + +export default Cadastro; \ No newline at end of file diff --git a/website/src/components/functionality/Cadastro/index.less b/website/src/components/functionality/Cadastro/index.less new file mode 100644 index 0000000..4e8410b --- /dev/null +++ b/website/src/components/functionality/Cadastro/index.less @@ -0,0 +1,13 @@ + +.cadastro { + padding: 20px; + + .ant-btn { + color: #000000; + width: 70%; + + &:hover { + color: #000000; + } + } +} diff --git a/website/src/components/functionality/ContactForm/index.js b/website/src/components/functionality/ContactForm/index.js new file mode 100644 index 0000000..0c84aa3 --- /dev/null +++ b/website/src/components/functionality/ContactForm/index.js @@ -0,0 +1,100 @@ +import React, { useState } from 'react'; +import { Row, Col, Form, Input, Button, notification } from 'antd'; +import _service from '@netuno/service-client'; +import Cluar from '../../../common/Cluar'; + +import './index.less'; + +const { TextArea } = Input; + +function ContactForm({ title }) { + const validateMessages = { + required: Cluar.plainDictionary('contact-form-validate-message-required'), + types: { + email: Cluar.plainDictionary('contact-form-validate-message-email') + } + }; + + const layout = { + rowGutter: { gutter: [25, 0] }, + labelCol: {span: 'hide'} + }; + + const [ loading, setLoading ] = useState(false); + const handleFinish = (values)=> { + values.contactForm.locale = window.localStorage.getItem('locale'); + setLoading(true); + const fail = () => { + setLoading(false); + notification.error({ + message: title , + description: Cluar.plainDictionary('contact-form-fail'), + top: 100 + }); + }; + _service({ + url: "contact", + method: 'POST', + data: values.contactForm, + success: (response) => { + if (response.json && response.json.result === true) { + setLoading(false); + notification.success({ + message: title , + description: Cluar.plainDictionary('contact-form-success'), + top: 100 + }); + } else { + fail(); + } + }, + fail: (e) => { + console.log("ContactForm failed:", e); + fail(); + } + }); + }; + return ( +
    +
    +
    +

    {title}

    + + + + + + + + + + + + + + + + + + + + + + +