Documentació

Why two languages?

The documentation is mixed between English and Catalan, for no special reason.

I tend to write in English for technical issues, when the target is a developer or a system administrator. For more friendly explanations or instructions to final users, then I use Catalan.

Per què dos idiomes?

La documentació es barreja entre l'anglès i el català, sense cap motiu especial.

Tendeixo a escriure en anglès per raons tècniques, quan l'objectiu és un desenvolupador o un administrador del sistema. Quan intento explicacions o instruccions més amigables als usuaris finals, utilitzo el català.

BaaS

Understanding BaaS

BaaS is a full-featured service running in a cloud, usually with not less than 4Gb of RAM serving a minimum of 2 vCPU.

Well, this configuration is by choice. The BaaS structure is distributed and fully scalable. The databases could be located on different computers, using different database servers. The same applies to the web application, running on a JEE compliant server. BaaS fits perfectly on Amazon Web Services, like EC2, EBS and RDS.

BaaS stands for BrightSide as a Service.

BaaS from the foundations

BaaS components, BrightSide and Elephant, are Open Source projects hosted at TiC Foundation. Both can be freely distributed.

For differences and relation between Turro.Org and TiC Foundation, see here.


The full dependency tree can be found here.

For developers, source code can be downloaded here under the OSI approved AGPL license.

Also, source code can be browsed here.

How does BaaS integrates with other services?

BlueBee service is a retailer brand example, based on BaaS. As you can see in this graphic, BaaS integrates seamlessly.


The BlueBee service is described here.

References

BaaS Service
Foundation Hub
TiC Foundation

Single Sign On

Turró.Org BaaS has a self-hosted unique SSO method. Only affects BaaS users and the implementation isn't provided as standard. Developers can implement their own methods by using the IElephantSSO interface.

Relevant features

Differences when using SSO

The flow


Roadmap

Single Sign On will be fully deployed on March 19. In order to make it consistent with Live Links and to actually substitute them, changes will follow this roadmap.

March 2019

  • SSO substitutes current login system as default authentication system.
  • The only SSO entry point will be the login form.
  • Live Links will continue to work as expected.

April 2019

  • Publication Live Links will be substituted for normal links.
  • Password reminder will direct to a new SSO entry point.
  • Users will be able to check on how many devices are signed.
  • Live Links will be removed for users with an SSO session.

May 2019

  • Live Links will be removed except for those explicitly set.
Single Sign On and Live Links are individually activated. BaaS owners can choose to deactivate one or both whenever required.
BrightSide

BrightSide és un conjunt de mòduls integrables funcionant sobre les llibreries Elephant. Elephant és una aplicació web, executable des dels navegadors d'Internet, amb el control d'usuaris i els rols dels mateixos integrada.

Seguretat

Tot mòdul creat per a Elephant utilitza el sistema de seguretat integrat. Les encriptacions internes es generen usant criptografia simétrica i asimétrica, segons el tipus de clau, i amb claus d'encriptació úniques generades pel propi entorn i diferents per a cada web.

Distribuible

BrightSide es desplega còmodament en la WAN per excelència: Internet. Les bases de dades poden ser distribuides en diferents llocs, segons necessitats d'accesibilitat, capacitat o seguretat.


Multi-plataforma

Elephant, i per tant BrightSide, s'han desenvolupat per a la JEE, Java Enterprise Edition, i es despleguen en qualsevol contenidor compatible amb l'especificació.

Els sistemes operatius soportats son:

Multi-sistema d'enmagatzament

BrightSide utilitza el JPA com a Persistent Layer. La configuració del JPA està diferenciada per mòdul, sent possible connectar la majoria de Servidors SQL del mercat:

Client multi-plataforma

El client de Elephant i BrightSide és el navegador d'Internet. Qualsevol sistema operatiu amb navegador d'Internet pot veure planes web i també pot executar l'aplicació. Els navegadors soportats son:

Application Framework

El marc per aplicacions de BrightSide és el mòdul sobre el que es construeixen la resta de mòduls de BrightSide. També és el que dona les característiques comunes a l'entorn.

El marc de treball


Marc de treball

El marc de treball de l'aplicació està basat en sessions d'usuari. La sessió normal caduca al cap de 5 minuts d'inactivitat, mentre que dins del marc l'allarga fins a 3 hores.

La composició del marc es distribueix en una barra de menús, una barra d'accés ràpid, una barra d'estat i l'espai de treball central. Els llistats i els formularis ocupen l'espai central en forma de pestanyes, cadascuna d'elles independent. Un usuari pot tenir obertes tantes pestanyes com necessiti.

La barra de menús i la barra d'accés ràpid són sensibles als mòduls habilitats i als permisos d'usuari. Quan l'usuari no té permisos per un apartat concret de l'aplicació, l'opció de menú o el menú sencer no es mostren.

La barra d'estat mostra l'usuari autenticat en un component d'informació de contacte que permet la navegació quan es clica a sobre. En el cas d'usar el mòdul de facturació, la barra d'estat mostra també l'empresa.

Les sessions

Una sessió es correspon a un usuari/navegador. Les pestanyes d'un navegador comparteixen la mateixa sessió. L'acció de tancar sessió esborra la sessió actual i en crea una de nova, sense usuari autenticat.

Integració amb els mòduls

Les opcions mostrades dins el marc de treball depenen dels mòduls habilitats. Els mòduls que posa a disposició la Fundació TiC són els que es veuen en la següent gràfica.


Mòduls relacionats amb el marc

Sign-In

Entrar en una plataforma BrightSide on sigueu usuaris registrats es fa seguint l'adreça http://domini/user, com a configuració per defecte. Els propietaris del domini podrien canviar la manera d'accedir-hi segons les seves necessitats.

Estic registrat, però no sé o he oblidat el password

Si s'acaba de registrar, rebrà un correu per poder accedir a la plataforma. Un cop hagi accedit, procedeixi com s'indica a Canvi de password.

Si ha entrat usant un correu de notificació, procedeixi com s'indica a Canvi de password.

Si es troba a l'àrea d'usuari, on es pregunta Usuari/Email i Password, però no sap el password, faci el següent:

Al moment es genera un correu amb un enllaç per poder entrar a la plataforma. Revisi el seu correu i segueixi les instruccions. Seguidament, canviï el password.

Canvi de password

Vagi a l'àrea d'usuari. Veurà un menú on apareix el seu nom, amb el que es va registrar. Posis a sobre i es desplegaran més opcions. Premi sobre Canviar password. S'obrirà un diàleg on podrà posar el nou password.

Per plataformes on s'han configurat dades de perfil esteses, el canvi de password pot també estar dins la opció El meu perfil (visible només quan hi ha dades esteses).

Personificar

Els usuaris amb permisos adequats, poden personificar altres usuaris. Això permet veure les dades tal i com les veurà l'usuari personificat.

Implicacions directes derivades de personificar

Quan es personifica un usuari, les entrades a registre es veuran com l'usuari real, sent la personificació una acció feta per aquest usuari. Així, quan un usuari amb permisos suplanti un altre usuari, en el registre es veurà l'acció Usuari real -> Personifica -> Usuari, usant els noms.

Tot i així, cal actuar amb precaució quan es facin accions que resultin en notificacions. Aquestes sí es veuran com fetes per l'usuari personificat i podria rebre la notificació.

El perquè de personificar

Personificar no està pensat perquè un usuari administrador pugui usar l'aplicació com si fos un altre usuari. La finalitat real, i la més útil, és usar la personificació per saber què pot veure un usuari i com ho veu.

Com personificar?

Podeu personificar des del BaaS o des de l'àrea d'usuari.

Les opcions relacionades amb personificar són:

Les opcions relacionades amb personificar són les úniques que recorden l'usuari real. Així, Personificar continuarà sent visible encara que s'estigui suplantant un usuari que no pot usar aquesta opció.

Per poder personificar, l'usuari real necessita tenir accés al BaaS i poder administrar contactes.

A tenir en compte

La personificació a la web i dins el BaaS són conjuntes. Quan suplantem un usuari, ho fem arreu. Així com la web carrega pàgina a cada petició i l'usuari suplantat es fa evident, cal tenir en compte que si es tenen dues sessions (pestanyes explorador) obertes, una a la web i l'altre al BaaS, i es suplanta des de la web, el BaaS no carregarà pàgina però actuarà com si fos l'usuari suplantat.

Agenda programable

Tasques programables

BrightSide permet afegir tasques desl mòduls dins la seva agenda programable. Les tasques programables tenen la finalitat que defineix el mòdul. L'agenda decideix en quin moment s'executaran aquestes tasques.

Entitats programables

Les entitats programables son entitats definides dins els mòduls. L'agenda asegura que una entitat programada executarà l'opció configurada en el moment indicat.

Contactes

BrightSide Contacts és la base comuna de persones físiques o jurídiques. Els contactes també poden arribar a ser derivats de persones jurídiques, com seus i departaments.

El mínim per poder crear un contacte és el nom. Les dades que se li poden afegir es descriuen a continuació:

Camp

Descripció

Nom

Representa el nom del contacte. També pot representar-se en les variacions per l'ús formal o informal d'aquest. La fitxa de contacte té una opció que permet endevinar quines són les variacions basant-se en el nom complet. Més informació a Complex names .

Tipus

Indica si el contacte és un Usuari, Empresa, Centre d'estudis o per ús Intern. En els casos d'Usuari o Intern, la potencialitat de ser un usuari s'explica amb més detall a connectors o a Users .

Agrupament

Permet una classificació interna i amplia. Les finalitats més usades són el filtratge quan cap altre tipus de dada ho permet.

Identificador global

També anomenat NIF, és l'identificador del contacte en la seva forma global, més enllà de l'aplicatiu.

CNAE, Facturació, Personal

Camps directament associats a l'activitat d'empreses.

Lloc

Indica la regió basada en zones del món. Permet descobrir llenguatge i formats específics del contacte.

Moneda

Moneda utilitzada en la zona del contacte.

Clau

Permet definir una clau pel contacte. També permet reiniciar de la clau actual. Si fos aquest el cas, cal clicar primerament en el nom del camp per activar l'entrada.

Desactivat

Quan marcat, desactiva el contacte. Un contacte desactivat continua sent vàlid per l'ús, però no podrà autenticar, ni rebrà cap mena de notificació per correu.

Grups socials

Veieu Grups socials .


Elements d'un contacte

Els connectors

Els connectors d'un contacte permeten definir quins sistemes tenim per connectar-hi. També són útils per a propietats d'altres tipus, com veurem en algunes de les convencions del nom de connector.

Els connectors són bàsicament el Nom del connector i el Valor del connector. Els noms de connectors són completament lliures, tot i que alguns segueixen unes convencions per poder ser usats en altres mòduls. Aquestes són els noms de connector amb un ús específic:

Nom del connector

Valor

On s'usa

Email

Conté el correu electrònic primari del contacte. Ha de ser únic, tant el connector com el valor.

Per l'autenticació d'usuari, l'enviament de recordatoris de password, l'enviament de notificacions i comunicacions, el perfil.

PhoneProfile

Conté el telèfon de l'usuari.

En el perfil.

Web

Conté la web de l'usuari. Perquè aquesta sigui vàlida en fitxes de la web, cal que s'indiqui l'adreça completa, incloent-hi el protocol. Ex https://www.domain.cat

En el perfil.

NetworkProfile

Conté l'adreça completa al perfil extern de l'usuari. Habitualment alguna xarxa social.

En el perfil.

TradeName

Conté el nom comercial del contacte.

En el perfil.

FiscalName

Usat quan el nom comercial és la base primària del contacte. Permet crear la imatge d'una persona jurídica a partir d'una persona física. En aquestes ocasions, l'Identificador global del contacte és dins aquesta imatge, enlloc del contacte original.

En la facturació.

indica que l'usuari pot editar-ho en el seu Perfil .

Les adreces

Un contacte pot tenir diverses adreces, diferenciades pel nom. Les convencions pel nom són:

Nom de l'adreça

On s'usa

Fiscal

En la facturació i en qualsevol informe fiscal.

Delivery

En la botiga en línia

indica que l'usuari ho manté.

Les relacions amb empreses o centres

Les relacions amb empreses o centres permeten crear l'organigrama o organigrames del contacte. Els contactes no estan restringits a una sola relació. Aquesta és una descripció dels camps:

Camp

Significat

Empresa

Indica l'empresa, centre, seu o departament on el contacte ocupa una posició. Els organigrames complexos (seus i departaments) només es poden gestionar des de l'aplicatiu.

Tipus

Indica el tipus de relació segons l'aplicatiu. Aquesta relació no és visible pel contacte i només té significat intern. Els tipus especials s'expliquen més extensament a Relacions .

Descripció

Indica la posició dins l'empresa segons l'usuari.

Data inici / final

Indica el període on el contacte va ocupar una posició dins l'empresa. Sense inici s'entén com des de sempre i sense final s'entén com fins ara.

Preferent

Indica l'empresa preferent del contacte. S'utilitza per resoldre l'empresa principal del perfil quan el contacte té diverses relacions actives.

Validat

Indica quan la relació ha estat validada per un usuari administrador o pel contacte de RRHH de l'empresa.

indica que l'usuari pot editar-ho en el seu Perfil .

Els comentaris

Els comentaris són texts lliures associats a un contacte. Alguns prefixes de comentari segueixen convencions de mòduls per donar-hi utilitats concretes. Les convencions són:

Prefixe

Signicat

On s'usa

#cv#

És Al voltant de el contacte. S'usa tant per contactes individuals com per empreses o centres. El prefixe té variacions per acceptar la regionalització:

  • #cv# És la descripció per defecte.
  • #cv#_[LANG] És la descripció regionalitzada. Ex #cv#_ca
Quan no es troba una descripció regionalizada s'usa la descripció per defecte.

En el perfil.

#reg

Són les dades fiscals específiques per documents oficials.

En la facturació.

indica que l'usuari pot editar-ho en el seu Perfil o en el perfil de l'empresa, si té els permisos.

Integració amb altres mòduls

La gràfica a continuació mostra com els contactes poden integrar-se en altres mòduls, transformant-se en Clients, Dinamitzadors de projecte, Subscriptors de newsletter, etc.


Integració d'un contacte

Grups socials

Els contactes s'assignen a grups socials perquè agafin el conjunt de permisos necessaris per funcionar dins el mòduls BrightSide.


Els grups socials sempre es refereixen a la relació entre el servei BaaS i els usuaris registrats. És la relació entre nosaltres i els usuaris que ens visiten. Mai és la relació entre l'usuari i l'empresa on treballi. Per exemple, si un usuari és al departament d'administració de la seva empresa, ho direm en el seu organigrama, no com a grup social, perquè no és a l'administració de la nostra empresa.

Podeu trobar una relació completa a Social groups .

Rols de participació

Es contactes poden agafar un rol dins l'activitat dels mòduls. Aquest rol queda definit pels permisos estàtics del Grup social i la participació activa dins un o varis mòduls.

Rols per conveni directament relacionats amb la participació

Rol

Dossier

Financials

Responsable relació amb empresa

Intervenció com a Titular

Responsable de comissió

Propietari de la categoria de la comissió

Membre de comissió

Assistent a la categoria de la comissió

Dinamitzador d'un dossier

Participa com a Dinamitzador

Beneficiari d'un dossier

Participa com a Beneficiari

Oferent d'un dossier

Participa com a Oferent

Variacions previstes

Un cop el funcionament d'aquests rols es va assentant, la intenció és passar-los a atributs directes. Un exemple és el rol de responsable de la relació amb empreses externes. La convenció no contempla si haurà de rebre documents generats per Financials, deixant un buit clar. També les participacions a dossier són clarament insuficients; la convenció respon al text del discriminador de la participació i les competències assignades es veuen diferenciades dins el codi.

Les variacions que es facin tindran compatibilitat descendent i apuntaran a millores més que a substitucions.

Networking
Networking dins del BaaS

Anteriorment anomenat Social, Networking substitueix i amplia el concepte.

El servei BaaS permet la creació d'eines de networking dins l'entorn web de l'usuari del servei, adaptant-se a la imatge corporativa de la web.

La part central del networking dins del BaaS, és la base de contactes.

Contingut

Objectiu

L'objectiu de l'espai de Networking és posar en contacte als usuaris d'un determinat perfil. Aquests poden editar les seves dades, definir les seves habilitats, indicar el sector on desenvolupen la seva activitat econòmica i quines són les seves especialitats.

Definició dels membres

Els membres de l'espai de networking són els socis i els formants de la junta.

Tipus de membre

Grup social del contacte

Junta

Patrons

Soci

Socis

Cal entendre socis i junta com la definició social del grup. Per explicar millor l'exemple, veiem dues definicions de soci en dos mòduls diferents de BrightSide.

Mòdul

Configuració

Atribucions / Obligacions

Networking

BS Financials

Contracte de tipus Soci

Aportacions al capital, repartiment de dividends.

BS Contacts

Grup social Socis

Pagament de quota, accés al serveis. Dins BS Financials podria ser un Client.

Perfil

El perfil d'usuari és l'espai on l'usuari autenticat gestiona les seves dades, Relacions i Habilitats .

Composició

El perfil està separat quatre seccions: Dades d'usuari, Experiència, Estudis i Habilitats. La secció d'usuari té un contingut fix, mentre que experiència, estudis i habilitats són col·leccions que poden contenir des de zero a múltiples elements.

Secció

Camp

Descripció

Mantingut per l'usuari

Privacitat

Dades d'usuari

Nom

Nom en el moment de l'alta. Els canvis de nom s'han de tramitar amb els usuaris administradors.

Dades d'usuari

Correu electrònic

Correu de validació de l'alta. Els canvis de correu s'han de tramitar amb els usuaris administradors.

Dades d'usuari

Imatge

Imatge del perfil.

Dades d'usuari

Telèfon

Camp descriptiu

Dades d'usuari

Xarxa professional

Adreça URL completa.

Experiència

Múltiples

Explicat a Relacions

Estudis

Múltiples

Explicat a Relacions

Habilitats

Múltiples

Explicat a Habilitats

Dades que es mostren, quan i com

Els perfils es poden veure en diferents llocs de l'espai web del servei BaaS. En algunes ocasions com a emergents, per exemple, en etiquetes o en els noms dels usuaris. En altres, en fitxes de perfil, habitualment en directoris.

Component

Descripció

Nom d'usuari

Quan clicable, mostra l'emergent de perfil.

Etiqueta d'usuari i empresa

Permet clicar sobre l'usuari o l'empresa, mostrant l'emergent de cadascun d'ells per separat.

Fitxa de directori

Per defecte mostra les relacions vigents, en les seccions d'experiència i estudis, i les habilitats.

Emergent

Per defecte mostra totes les relacions. Les no vigents apareixen sobre un fons sòlid i en colors més tènues.

En tots els casos, les dades mostrades tenen en compte l'usuari que visualitza i les opcions de privacitat de l'usuari del perfil.

Privacitat

Alguns dels apartats del perfil són controlats per les polítiques de privacitat. Aquestes es veuen com a icones al costat dels camps configurables. El significat de les icones és aquest:

Icona

Ajuda emergent

Descripció

Públic

El contingut del camp és públic.

Usuaris

El contingut del camp és visible exclusivament per a usuaris registrats.

Seguint

El contingut del camp és visible exclusivament per a usuaris a qui l'usuari del perfil segueix.

Privat

El contingut del camp és privat i serà visible exclusivament per a l'usuari del perfil i per a tasques d'administració interna.

Perfil d'empresa

El perfil d'empresa és l'espai on l'usuari autenticat gestiona les dades de la seva empresa. Per a poder editar l'empresa cal ser considerat Responsable tal com es defineix a Relacions .

Composició

Camp

Descripció

Mantingut pel responsable

Nom

Nom en el moment de l'alta. Els canvis de nom s'han de tramitar amb els usuaris administradors.

Web

Web de l'empresa o centre.

Imatge

Logotip de l'empresa o centre.

Nom comercial

Nom comercial de l'empresa o centre.

Sector

Sectors als quals pertany l'activitat de l'empresa o centre. Es poden especificar varis. Explicat a Sector i especialitats .

Especialitat

Especialitats en els serveis de l'empresa o centre. Es poden especificar vàries. Explicat a Sector i especialitats .

Quadres de text amb idiomes

Informació al voltant de l'empresa o centre.

El quadre Per defecte és el text que es mostrarà en cas de no haver-hi text específic per l'idioma de l'usuari visitant. És recomanable omplir aquest i deixar en blanc l'específic que el representa.

Relacions

Tant contactes com relacions tenen una tipificació interna que apunta a facilitar la creació de noves relacions per part dels usuaris.

La finalitat de les relacions és crear una base d'experiències i estudis mantinguda pels mateixos usuaris.

Contactes i els seus tipus

Els tipus de contactes afecten el perfil i les relacions establertes amb altres contactes, independentment dels permisos d'accés que aquests tinguin i el rol que juguin dins del conjunt de mòduls. Els contactes poden ser de quatre tipus diferents:

Tipus

Descripció

Usuari

És el tipus per defecte quan l'usuari es registra dins del BaaS. Els contactes tipus usuari són els que, habitualment, fan login i participen en les activitats.

Empresa

Són contactes amb qui l'usuari pot establir relació per omplir la seva Experiència, sigui passada o vigent.

Centre d'estudis

Són contactes amb qui l'usuari pot establir relació per omplir els seus Estudis, siguin cursats o en curs.

Intern

Són contactes que no participen del networking. Per exemple proveïdors interns, organismes recaptadors de tributs, etc.

I els treballadors en centres?

Existeix el cas especial de relacions amb centres, de contactes que hi treballen, per exemple docents. Aquest cas es veurà més endavant, en els tipus per descobriment.

Les relacions

Quan parlem d'Experiència o d'Estudis dins del BaaS, parlem de relacions entre usuaris, empreses i/o centres. Aquestes relacions es composen de la següent informació:

Camp

Descripció

Mantingut per l'usuari

Privacitat

Empresa o centre

És l'empresa o centre amb qui l'usuari es relaciona.

Tipus

És el tipus de relació. Quan l'usuari crea la relació, sempre és del tipus STAFF (Personal). El tipus de relació té un significat intern traduïble a: com es relaciona la persona en qüestió amb l'entitat propietaria del BaaS, quan actua en nom de l'empresa relacionada.

Sempre privat

Posició o curs

Si la relació és amb una empresa, representa la posició. Si és amb un centre, representa el curs. Aquest camp permet escollir entre valors existents o crear-ne de nous.

Data d'inici

Data d'inici de la relació. Si no es posa cap valor vol dir des de sempre.

Data final

Data final de la relació. Si no es posa cap valor vol dir en curs.

Preferent

Camp de desambiguació. Permet escollir una relació preferent entre les existents. Habitualment, la lògica de relacions ja permet descobrir quina és la relació preferent.

Validada

Indica quan la relació a passat les regles de validació. Únicament les relacions validades es mostren en el perfil.

Tipus per descobriment

Els tipus per descobriment són aquells que no s'assignen directament com a tals, sinó que es dedueixen a partir dels tipus definits. Aquests tipus per descobriment són bàsics pel Perfil i pels diferents tipus de Directori .

Tipus

Composició

Natural

El contacte és del tipus Usuari i té relacions amb contactes jurídics.

Jurídic

El contacte és del tipus Empresa o Centre d'Estudis.

Treballador

El contacte és del tipus per descobriment Professional i/o Docent.

Professional

El contacte té una relació vigent amb una Empresa.

Docent

El contacte té una relació vigent amb un Centre d'estudis i la relació no és del tipus STAFF.

Estudiant

El contacte té una relació vigent amb un Centre d'estudis i la relació és del tipus STAFF.

STAFF (Personal)

El contacte té una relació vigent del tipus STAFF.

Responsable

El contacte té una relació vigent diferent del tipus STAFF.

HHRR

El contacte té una relació vigent diferent del tipus Recursos Humans.

Autònom

El contacte és del tipus Usuari i no té relacions amb contactes jurídics.

La següent imatge mostra els diferents tipus d'usuaris i les interseccions dels tipus per descobriment.


Tipus de contacte per tipificació i per descobriment.

Elephant security

Més informació respecte a l'ús dels permisos a Permissions .

Vigència de les relacions

S'entén una relació com a vigent, quan es troba dins les dates d'inici i fi. Aquesta vigència es valida amb la data actual del sistema.

Alguns mòduls usen tant el contacte com la seva empresa o centre, per gestionar la participació. En aquests casos, la vigència es valida amb la data de la participació, no la de sistema. Això permet la traçabilitat en les participacions d'empresa o centre.

Procés de validació de la relació

Les relacions iniciades per usuaris autenticats queden pendents de validació. Per resoldre aquest estat, se segueixen unes regles predefinides:

  1. Sí l'usuari té un correu amb el mateix domini que el connector web o connectors domini del contacte amb qui es vol relacionar, la relació es valida.
  2. Si el contacte amb qui es vol relacionar té un responsable de validacions, se li proposa que sigui aquest qui ho validi.
  3. S'afegeix l'opció que sigui un usuari administrador qui ho validi. S'envia avís als usuaris administradors i queda a la cua de pendents.
  4. S'afegeix l'opció d'indicar un correu amb la persona que pot validar.

El resultat del procés, en cas de validar-se, generarà un avís pels usuaris administradors. Totes les validacions pendents es veuran en la cua d'avisos dels usuaris administradors.

Si l'usuari escull el cas 4, internament poden donar-se els següents casos:

  1. El correu existeix a la base, és de la mateixa empresa/centre i és el mateix que el del responsable de validacions. S'executarà igual que si hagués escollit el cas 2.
  2. El correu existeix a la base, és de la mateixa empresa/centre i aquesta no té responsable de validacions. S'enviarà un avís als usuaris administradors perquè avaluïn el cas.
  3. El correu existeix a la base, és de la mateixa empresa/centre, però no correspon al responsable de validacions. S'enviarà un avís als usuaris administradors perquè avaluïn el cas.
  4. El correu és d'un usuari administrador. S'executarà igual que si hagués escollit el cas 3.
Habilitats

Les habilitats permeten ampliar el perfil d'usuari i són usades internament per a la gestió d'homònims.

Les habilitats se separen en tres tipus:

Tipus

Descripció

Coneixement

Habilitats de coneixement, descrites amb substantius. Comptabilitat, Administració, Programació, ...

Funcional

Habilitats funcionals, descrites amb verbs. Organitzar, Promocionar, Liderar, ...

Actitut

Habilitats d’actitud, descrites amb adjectius. Pacient, Independent, Ordenat, ...

Els usuaris poden afegir tantes habilitats al seu perfil com creguin oportunes.

Més informació a Skills & Tags
Sector i especialitats

Les empreses i centres poden ampliar el perfil afegint sectors i especialitats.

Tipus

Descripció

Sector

Un sector empresarial comprèn diverses empreses que produeixen béns i serveis en l’economia.

Especialitat

Àrea de negoci o estudi en què l’empresa / centre està especialitzada o té coneixements especials.

Més informació a Skills & Tags
Calendari

El calendari és una eina associada a l'activitat dins els mòduls del servei BaaS. Això s'explica pel fet que moltes activitats tenen dates associades, siguin d'inici, modificació, finalització i d'altres. Els calendaris són capaços de mostrar l'activitat, lligant-la a l'entitat que l'ha produïda. Així, des d'una data, l'usuari pot arribar fins a l'activitat i acabar consultant els usuaris associats.

Com la resta de components, el calendari és sensible a la privacitat imposada per l'usuari en el seu perfil.

Calendaris públics

Els calendaris poden mostrar-se públicament sense posar en perill dades sensibles. Segons els permisos de l'usuari autenticat, les entitats associades a les dates mostraran més o menys contingut.

Teniu un exemple de calendari public a Activitat .

Convocatòries

Les convocatòries formen part de l'anomenat Networking, donat que és l'eina per a reunir un grup d'usuaris en unes dates i hores determinades. Els usuaris convocats poden consultar les convocatòries públiques vigents o passades i les convocatòries privades on han estat convocats. En el visor complet de convocatòries hi ha llistat els assistents usant etiquetes de contacte que mostren el perfil emergent de l'usuari.

Convocatòries està explicat a Convocatòries .

Directori

El Directori és un llistat de perfils on els usuaris amb permisos poden consultar les dades dels perfils segons les polítiques de privacitat que cadascun dels usuaris del perfil hagin definit.

Els directoris poden ser totals o per tipus.

Tipus

Descripció

Tot

Mostra tots els usuaris que no siguin del tipus Intern.

Empreses

Mostra els contactes del tipus Empresa.

Centres d'Estudi

Mostra tots els contactes del tipus Centre d'Estudis.

Treballadors

Mostra tots els contactes del tipus per descobriment Treballador.

Professionals

Mostra tots els contactes del tipus per descobriment Professional.

Docents

Mostra tots els contactes del tipus per descobriment Docent.

Estudiants

Mostra tots els contactes del tipus per descobriment Estudiant.

Autònoms

Mostra tots els contactes sense relacions.

Es pot trobar informació dels diferents tipus a Relacions .

Tauler d'anuncis

El tauler d'anuncis permet als usuaris penjar ofertes o demandes de diferents tipus. Aquests anuncis poden estar associats a l'empresa o directament a l'usuari, segons configuració. El tauler d'anuncis és una ampliació dels serveis de contacte.

El Serveis són reservats a les empreses donades d'alta a la base de contactes. La definició d'empresa és molt laxa i es refereix a contactes que tenen treballadors en el seu organigrama.

Definició ràpida del que són empreses i treballadors

Una empresa és aquell contacte que no necessàriament té autenticació dins la base de contactes i que conté en el seu organigrama contactes amb autenticació.

Un treballador és aquell contacte que té autenticació i és dins un o varis organigrames d'empresa.

Els camps d'un servei

Camp

Descripció

Títol

El títol que apareix als llistat i que utilitza el cercador.

Empresa

Una de les empreses de l'usuari autenticat

Dinamitzador

O responsable. Un dels treballadors de l'empresa, incloent l'usuari autenticat.

Rol

Si es tracta d'una oferta o una demanda.

Tipus

El tipus de servei. Predefinits Servei, Formació, Seminari, Webminar, Activitat, Producte i Esdeveniment. Els usuaris poden afegir tipus nous.

Temàtica

Reglamentari o orientatiu segons el tipus de servei.

Enllaç

Enllaç on trobar més informació del servei.

Data inici

Moment en el que s'inicia el servei.

Opcional

Data final

Moment en el que s'acaba el servei.

Opcional

Preu

Si fos el cas, el preu del servei. Base imposable.

Opcional

Impost

Si fos el cas, l'impost al que està subjecte el servei. Habitualment IVA.

Opcional

Periodicitat

La periodicitat amb que es carrega el preu.

Opcional

Descripció

Descripció amb text ric del servei.

Àmbit i permisos necessaris

Creant noves entrades des de l'entorn web i l'àrea d'usuari

Els dos grups socials que tenen permís per a crear noves entrades són Soci i Marketplace.

Els serveis són sempre editables pels treballadors de l'empresa que dóna el servei i pels usuaris administradors. L'aplicació permet enviar un correu de prova als treballadors de l'empresa.

Un servei es pot publicar. L'acció de publicar pot executar-se una sola vegada per part dels treballadors i tantes vegades com vulguin els usuaris administradors. L'àmbit de l'acció de publicar són els subscriptors de la cua Notificacions del lloc web. També pot haver-hi un context dins la web amb els serveis publicats.

Marketplace

Usant els serveis de contactes i les Macros del mòdul, és possible crear un context tipus marketplace.

En l'exemple que es mostra a continuació, el context que mostra el marketplace és /marketplace.

Exemple del contingut de la pàgina

{ @services:all:all:/marketplace:12:#preload}
<div class="ui basic padded segment">
  <div class="ui stackable grid">
    <div class="five wide column">
      <div class="ui segment">
        <h3>{ @res:VIEW_CALENDAR:2}</h3>
        { @marker:calendar:fullcalendar:sources=[servTypes=all;color=#880E0E]}
        <div class="ui hidden divider"></div>
        <h3>{ @res:VIEW_LASTENTRIES:2}</h3>
        { @lastservice-summary:all:all:/marketplace:10:item}
      </div>
    </div>
    <div class="eleven wide column">
      { @dao-search:/marketplace}
      { @services:all:all:/marketplace:12}
    </div>
  </div>
</div>

Com funciona?

La primera macro usa el template fals #preload, per indicar al iterador que carregui els valors previs. Aquests serviran per omplir les llistes de rols, tipus i temàtiques dels serveis, usades pel cercador estàndard per a serveis.

La resta afegiran, a la part esquerra, un calendari i un llistat de darreres entrades. I a la part dreta, el cercador i l'iterador de serveis amb pàgines de 12 serveis màxim.


Context final segons l'exemple.

Exemple de l'arxiu dao-search-marketplace

A Best Practices hi ha un exemple de com afegir un buscador. El template search és part de l'estàndard.

<?xml version="1.0" encoding="ISO-8859-1"?>

<elephant version="1.0">
  <dao-search class="services-search" root="service" template="search">
    <input name="search-value"/>
    <select name="role"/>
    <select name="type"/>
    <input name="actives"/>
    <input name="with-date"/>
  </dao-search>
</elephant>

Configuració específica

El marketplace té configuracions específiques dins l'arxiu service-context.properties que es troba a BaaS -> Eines -> Fitxers -> Configuració -> Propietats. El format de l'arxiu és clau=valor.

Clau

Significat

type_n

Seguint l'ordinal n seran els tipus de servei per defecte.

thematic_n

Seguint l'ordinal n seran les temàtiques de servei per defecte.

allow-single

Permet crear serveis lligats al propi contacte. Per defecte els serveis només poden estar enllaçats a l'empresa.

market-roles

Són els rols d'usuari per a poder crear nous serveis. La definició de roles és igual que a Context role Attributes .

question-roles

Són els rols d'usuari per a poder fer preguntes al responsable anònimament. La definició de roles és igual que a Context role Attributes .

Darrera activitat

Mostrar la darrera activitat és una manera d'incentivar usuaris a ser més actius. Aprofitant LastActivity API i UserLastActivity API de la llibreria Elephant, l'apartat de Networking pot mostrar el moviment dins del servei BaaS.

L'activitat del conjunt

LastActivity API recull els darrers moviments de les entitats del sistema, hi associa el conjunt de participants usant una cerca profunda i, finalment, serialitza els resultats pel seu ús. Per a cada element d'activitat, l'API contrasta amb el controlador de l'entitat si el participant pot veure l'element. Com a resultat, els elements mostrats són específics per l'usuari a qui es mostren.

L'activitat pròpia

L'aproximació usada per UserLastActivity API és diferent. En ser un llistat orientat a l'usuari, la cerca es fa en les activitats específiques d'aquest. El resultat final és un conjunt d'elements restringits a l'usuari a qui es mostra.

Quan es pretén mostrar l'activitat de tercers, els elements mostrats es controlen usant Visual elements .

Públic vs restringit

Tots els mòduls del servei BaaS donen la possibilitat de crear espais públics i espais restringits. La diferència és, en moltes ocasions, subtil. En ambdós casos, les dades a mostrar poden variar la privacitat segons el rol de la persona a qui es mostren. Una única entitat podria ser formada per parts amb privacitats ben diferents.

Característiques dels espais públics i els restringits

Característica

Públic

Restringit

Espai on es publica

Qualsevol pàgina de la web és vàlid per a publicar contingut d'entitats.

L'àrea d'usuari és el lloc on hi ha tots els visors restringits d'entitats.

Qui ho pot veure?

Vindrà controlat pels permisos donats al context.

Exclusivament els participants.

Quines dades poden veure?

Les que s'hagin definit específicament pel visor.

Només les dades que pertoquen a l'usuari segons el seu rol.

On es configura?

El visor usa Visual elements per a controlar quines dades es mostraran segons el rol de l'usuari.

Dins l'aplicació, en l'entitat i la participació de l'usuari.

Cas d'ús

Volem mostrar l'activitat en projectes, tauler d'anuncis i/o talent a usuaris no autenticats o autenticats sense rols. Veuran títols, només empreses i/o estudiants i una part de les descripcions i de la documentació.

Donem als usuaris un entorn web amigable per a veure les seves dades en els diferents mòduls: projectes, dossiers, contractes, productes contractats, factures, cartera comptable pròpia, convocatòries, dispositius on està autenticat i un llarg etc.

Actors per defecte

Junta / Socis Clients / Proveïdors / Col·laboradors Estudiants Marketplace Usuaris

Projectes

Context públic
Descriptors d'obertura
Descriptors de tancament
Arxius adjunts
Nom dels participants
Nom de les empreses
Opció a participar
Presentar ofertes

Networking

Context públic
Directori
Directori d'empreses i centres
Debats al fòrum Una porció del tòpic Una porció del tòpic Una porció del tòpic Una porció del tòpic
Convocatòries públiques

Marketplace

Context públic
Publicar ofertes
Contactar anònimament

Talent

Context públic
Plataforma talent
Borsa de pràctiques
Reptes
Directori d'estudiants
Directori de centres

Criteris de cerca

Quan es busquen contactes dins l'entorn BrightSide, es possible variar la manera com es busca i concretar els llocs on es busca.

Si simplement introduïm un text, aquest es divideix en paraules i es busca l'existència de cadascuna d'elles dins els diferents camps del contacte.

Variacions al buscar per nom

Buscant camps específics

Propostes d'alta

Les propostes d'alta poden ser en format vCard o CSV. En ambdues opcions s'utilitzen les convencions vCard amb les extensions BS Contacts.

Els fitxers d'importació han d'usar la codificació UTF-8. En el cas dels CSV, els separadors són punt-i-coma (;) i tots els camps entrecometes (").

Els camps acceptats

Camp

Traducció

X-GID

NIF/CIF, internament l'identificador global.

FN

Nom del contacte

N:First N:Middle N:Last

Concatenats, nom del contacte.

ADR:WORK

Adreça fiscal

ADR:WORK:Street

Carrer

ADR:WORK:City

Ciutat

ADR:WORK:Province

Provincia

ADR:WORK:ZipCode

Codi postal

ADR:WORK:State

Estat

ADR:HOME

Adreça postal

ADR:HOME:Street

Carrer

ADR:HOME:City

Ciutat

ADR:HOME:Province

Provincia

ADR:HOME:ZipCode

Codi postal

ADR:HOME:State

Estat

EMAIL

Connector Email

TEL

Connector Telèfon

CELL

Connector Mòbil

FAX

Connector Fax

WEB

Connector Web

NOTE

Commentari

CON:ID

Connector ID

Propostes de relacions

Les propostes de relacions són un mètode ràpid per donar d'alta relacions per a contactes existents o nous.

El format de l'arxiu a importar és CSV estàndard. Camps separats per comes i text entre cometes (si cal, quan el text conté comes)

Els camps acceptats

Camp

Descripció

email

Email del contacte.

name

Nom del contacte.

relatedTo

Nom de l'empresa o centre.

position

Posició o estudis.

Funcionament

Les propostes d'alta de relació poden generar nous contactes, o simplement crear una relació. Cal tenir en compte:

Quan es marca Enviar benvinguda, un cop finalitzada l'alta de la relació, s'envia un correu de benvinguda a l'usuari.

Adjunts

BrightSide Attachments és el mòdul de base documental. El motiu pel qual s'anomena d'adjunts és perquè permet bases documentals associades a entitats. La base d'adjunts se separa en dos grans tipus, els adjunts pròpiament dits i els fitxers.

Motivació

La categorització de documents segons l'origen, el tipus, les dates i d'altres atributs és un dels grans esculls de les bases documentals. BS Attachments soluciona bona part del problema en automatitzar el procés de crear espais per a documents allà on aquests es generen. Contactes, dossiers, temes, contractes, factures, són exemples d'espais complets de base documental pròpia.

Tot i formar bases documentals separades, el sistema usat per la base d'adjunts, en qualsevol de les modalitats, permet una arrel comuna, visible pels administradors, que facilita la localització dels documents.

Els tipus

BS Attachments se separa en dos grans tipus: Adjunts i Fitxers. Alhora, Fitxers ho fa en dos subtipus: Publicables i Privats. Malgrat la diferència en el nom, tots els tipus són adjuntables.

Tots els tipus d'adjunts poden ser visualitzats a Elephant Web. La diferència principal és que només els Fitxers Publicables són accessibles directament, la resta fan servir visors específics que controlen permisos i activitat. L'ús dels directament publicables és, principalment, imatges, galeries d'imatges i documents públics. Els Adjunts i Fitxers Privats s'usen per a documents privats on els permisos determinen l'accés per part d'usuaris.


Elements d'adjunts

Comparativa

Característica

Adjunts

Fitxers

Basats en

Base de dades

Dispositiu físic

Publicables

Amb visor específic

Sí a l'arrel publicable. Amb visor específic la resta.

Control de versions integrat

No

Carpetes

Galeries d'imatges

No

Sí, veure Galeria d'imatges

Control de descàrregues

Personalització de les descàrregues

Sí, veure Convencions

No

Convencions

El mòdul d'adjunts utilitza convencions per automatitzar l'ús de la base documental dins altres mòduls BrightSide.

Dossiers

L'atribut de participació Veure tots els adjunts controla que el participant vegi o no adjunts amb la propietat publicable.

Veure tots els adjunts

Publicable

Visible

No

No

No

No

No

Per dossiers amb visor públic a la web, la propietat publicable controla si l'arxiu es mostra.

Carpetes segons participació

Quan els participants a dossier ho fan usant els atributs de participació, és possible crear carpetes visibles només pel tipus de participació. Per activar aquest mecanisme es prefixe la carpeta amb el símbol #. El format és #participació, sent participació el nom de l'atribut.

Participació

Nom

Carpeta

Dinamitzador

#Driver

Coordinador

#Coordinator

Beneficiari

#Beneficiary

Consorci

#Consortium

Oferent

#Offerer

I+D

#Research

Finançament

#Funding

Suport

#Support

Administrador

#Admin

Carpetes segons discriminador

Quan el participant té definit un discriminador, és possible crear carpetes visibles només pels participants amb el mateix discriminador. Per activar aquest mecanisme es prefixe la carpeta amb el símbol #. El format és #discriminador, sent discriminador el valor posat en aquest camp.

Per permetre que un participant pugui veure totes les carpetes amb el prefix #, la propietat discriminador seria *.

Carpetes segons rol

El rol dels participants a dossier pot ser usat com a discriminador de carpetes. Funciona igual que Carpetes segons discriminador sent el discriminador el rol de la participació.

Rol

Carpeta

Propietari

#PARTICIPANT_OWNER

Assistent

#PARTICIPANT_ASSISTANT

Subjecte

#PARTICIPANT_SUBJECT

Temes

Per temes amb visor públic a la web, la propietat publicable controla si l'arxiu es mostra.

Contractes

L'atribut publicable controla quan es mostren els documents adjunts al subjecte del contracte, dins els visor de contractes.

Quan s'envia un document per email, l'atribut publicable controla quins documents s'adjunten en el email. La convenció és Mail/[Tipus document]/[Arxiu]. Per exemple, si vol que un document s'envií conjuntament amb les factures d'un determinat contracte, segueixi els següents passos:

  1. Obri el contracte
  2. Vagi a la pestanya Adjunts
  3. Creï la carpeta Mail si no existeix
  4. Creï la carpeta Factura si no existeix
  5. Pugi l'arxiu que vol adjuntar dins aquesta darrera carpeta
  6. Asseguris que la propietat publicable és certa (icona )

Documents

L'atribut publicable controla quan l'adjunt s'envia per email conjuntament amb el document. Per exemple, si té documents relacionats amb una factura i vol que s'enviïn pel correu que genera BrightSide, segueixi els següents passos:

  1. Obri el document
  2. Vagi a la pestanya Adjunts
  3. Pugi l'arxiu que vol adjuntar
  4. Asseguris que la propietat publicable és certa (icona )
  5. Premi el botó Enviar document
Arbre web

És possible modificar el comportament de l'arbre d'adjunts què es mostra a la web.

Condicions de només lectura

Es crea el context quan la carpeta s'anomena /#ROT (Read Only Terms). Els arxius d'aquesta carpeta seran descarregables només si s'accepta el text contingut dins l'arxiu /_internal/terms/content/rot.txt.

No cal ser usuari registrat. No queda registre de l'acceptació.

Petició de descàrrega

L'atribut Requereix acceptació controla l'accés a l'arxiu. Inicialment és Prohibit. Els usuaris autenticats podran crear una petició de lectura, adjuntant el motiu pel que volen l'arxiu. La petició s'envia a l'usuari que ha pujat l'arxiu, que és qui l'ha d'acceptar. Mentre la petició no és acceptada, l'usuari veu l'estat de Pendent. Un cop acceptada la petició, l'usuari veu l'estat Acceptat i ja pot descarregar l'arxiu.

Els usuaris reben correus en els canvis d'estat. Queda registre del moment de la petició i el moment de l'acceptació. Les descàrregues, al ser un circuit per a usuaris registrats, queden en el registre de l'arxiu i del sistema.


Visitant


Accés denegat


Pendent d'acceptar


Acceptat

Específic PDFs

Marca d'aigua

L'atribut Marca d'aigua controla que la descàrrega la faci un usuari registrat. L'arxiu que s'entrega conté el nom de l'usuari com a marca d'aigua a totes les pàgines del document.

Si la descàrrega és anònima, l'arxiu és buit.

Fitxers

Els Fitxers són una part de BrightSide Attachment. A diferència d'adjunts, basats en bases de dades, fitxers són directoris i arxius reals.

Els fitxers se separen en dues categories.

Publicables

Són arxius que podran ser llegits directament pels navegadors d'internet. Publicables és útil per imatges o documents dels quals no necessitem un registre d'activitat.

Privats

Són arxius accessibles només des de navegadors BrightSide Attachment amb l'excepció dels components [ Deliverables, Documentation ] .

Galeria d'imatges

Usant els fitxers publicables de les entitats BrightSide és possible crear galeries d'imatges. La distribució estàndard inclou un template que segueix les següents convencions per crear galeries.

Galeries d'imatges a partir de Fitxers

Les imatges tindran com extensió .jpg o .png en minúscules.

Dins Fitxers -> Publicables, es busca el directori gallery. Si existeix, totes les imatges dins aquest directori formen una galeria.

Galeries amb nom

Dins el directori gallery és possible crear sub-directoris amb imatges. Les galeries creades usant aquests sub-directoris tindran com a nom el nom del directori.

Dossiers

BrightSide Dossiers permet fer un seguiment relatiu a diferents tipus de informació. Un dossier és un grup de dades i canvis executats sobre aquestes dades. El dossier es pot fer servir com agrupació de documents i compartir-los amb els diferents participants del dossier. També permet el seguiment de temes, amb assignació de informants i responsables.


Usant el dossier com a...

Els dossiers es poden agrupar en categories, que poden identificar-se com a grups de treball.

Al donar nom a les categories, transformem el dossier en diferents tipus de grups d'informació. Aquestes categories son configurables pel usuari, o creades automàticament per altres mòduls BrightSide. Quan es creen automàticament, el dossier o tema queda associat a la entitat que l'ha creat.


Els atributs d'un dossier


Extensions

Tant dossiers com temes poden ser usats de manera no prevista inicialment, només aprofitant el flux de estats dels temes. Es poden crear extensions que siguin visibles a les web, públicament. Un exemple son les preguntes freqüents o l'assoliment d'objectius.

Camps definits

Es possible assignar camps definits a les categories de dossiers. Tots els dossiers de la categoria tindran camps addicionals d'informació.

Camps especials relacionats amb els emails

Camp

Ús

Exemple

dossierOpenUrl

Resums de dossier obert

/context/?item=#DID

dossierClosedUrl

Resums de dossier tancat

Igual que per oberts

issueOpenUrl

Resums de tema obert

Per a navegadors amb dossiersOnly = true
/context/?item=#DID&issueId=#IID

Per a navegadors amb dossiersOnly = false
/context/?item=#IID

issueClosedUrl

Resums de tema tancat

Igual que per oberts

Els exemples són de notificacions que envien l'usuari directament a un context de la web, ja autenticat.
Categories

Les categories de dossiers permeten crear una estructura jeràrquica on assignar els dossiers i projectes que es vagin creant. Aquesta estructura té a més, un ordre jeràrquic real pel que fa als permisos d'usuari.

Les categories formen estructures d'arbre amb tantes branques com calguin. Els usuaris assignats a una categoria tindran els seus permisos propagats per a totes les branques inferiors. Les arrels són aquelles categories que no tenen una categoria pare.

Estructuració i bones pràctiques

L'ús de dossiers i projectes és prou transversal i adaptable com per a permetre crear arbres amb usos ben diferenciats. Un dels punts més feixucs és enfrontar-se a una estructura buida i projectar què necessitarem en el futur. Aquest epígraf és per ajudar a decidir quins són els nostres arbres.

Arrel de gestió i comptable

Aquesta arrel es crea automàticament quan s'utilitza la creació de temes i dossiers des de BS Financials. La categoria arrel es diu Financials i les branques són els tipus de contracte.

Els participants d'aquestes categories solen posar-se només a l'arrel i són part de l'administració de l'empresa.

L'ús immediat d'aquesta categoria és ordenar correctament les incidències produïdes per la relació comptable amb clients, proveïdors, col·laboradors, entitats tributàries i similars. Un exemple ràpid serien: la gestió d'impagats, les no-conformitats, els canvis en factures ja emeses, etc.

Les automatitzacions d'aquesta arrel creen les relacions pertinents entre:

A més d'aquestes automatitzacions, és possible navegar del dossier al contracte, del tema al document i a l'inrevés.

Es recomana no modificar l'estructura creant items nous.

Tant categories d'aquesta arrel, com dossiers relacionats i temes d'aquests dossiers, haurien d'haver estat creats des de les opcions de crear dossier dins contractes i afegir tema dins documents.

Arrel d'àrees estratègiques

Tota activitat segueix estratègies que apunten a corregir-la i millorar-la. Un primer pas és descobrir quines són aquestes estratègies. En el cas d'una empresa de serveis, la categorització dels serveis probablement serveix. Per una empresa de fabricació, segurament seran les línies de treball que permeten que el producte es fabriqui i arribi al destinatari.

Oblidem el com

És important no intentar classificar aquest nivell pensant en si millorem, corregim o escalem, per posar tres exemples. Aquesta classificació la faran els temes un cop iniciem l'activitat.

Veurem aquestes categories com a grups de treball inter-empresa i dinàmics. Cadascuna d'elles podrà tenir els seus responsables i beneficiaris, oferents i observadors.

Els elements dins aquesta arrel solen ser projectes que compleixen els següents requisits:

Arrel d'estructura interna

L'arrel d'estructura interna conté dossiers i projectes que solen ser interessants només per a les parts implicades. Alguns exemples d'aquesta arrel serien:

Els participants d'aquesta arrel solen ser els responsables de cada punt. La part externa interessada participa només en els dossiers que els hi pertoquen.

Les arrels i la seva visibilitat

La visibilitat no s'aplica a àrees restringides

Els usuaris participants de categories o dossiers veuran, en la seva àrea d'usuari, tots els elements on participen segons els seus permisos. Aquest epígraf fa referència a la publicació de les dades en espais no restringits.

Arrel

Visibilitat

Arrel de gestió i comptable

Aquesta arrel és privada. El possible accés que hi tinguin clients, proveïdors o col·laboradors s'hauria de gestionar via els temes i sempre aquells temes on participin directament, mai donar-los visibilitat per a tot.

Arrel d'àrees estratègiques

Aquesta arrel pot ser publicada, sempre que es consideri interesant que visitants o convidats puguin accedir a aquesta informació. Les parts concretes vindran controlades pels Visual elements .

Arrel d'estructura interna

No és recomanable publicar aquesta arrel. El contingut és accessible entre les parts interessades des de l'àrea d'usuari.

Filtres per a seleccionar una arrel

Arrel

Participants

Objectiu per a tercers

Publicable

Auto-registre

Arrel de gestió i comptable

  • Categories: Personal d'administració.
  • Dossiers: Cap.

No.

No.

No.

Arrel d'àrees estratègiques

  • Categories: Grups de treball amb usuaris interns i externs.
  • Projectes: Habitualment dinamitzadors, beneficiaris i oferents del projecte.

Sí.

Sí.

Millor usuaris auto-registrats.

Arrel d'estructura interna

  • Categories: Personal d'administració.
  • Dossiers/Projectes: Implicats directes.

No.

No.

Qualsevol cas val.

Temes

Els temes de BrightSide Dossiers apunten accions concretes a una resolució final.

Els temes son un sistema de seguiment. El seu principal objectiu és reunir els defectes, millores, característiques i similars, i redirigir-los a responsables. Per l'usuari, constitueix una eina per solucionar, millorar o realitzar qualsevol objectiu, alhora que reuneix tota l'informació en un sol lloc.

Els atributs d'un tema


Participants

Informant

L'informant és que qui va crear el tema, ja sigui donant-lo d'alta o informant del mateix. Durant la vida del tema, d'altres podran inserir comentaris o obtenir funcions específiques.

Responsable

El tema necessita un responsable. En cas de no indicar quin és, el sistema assigna a la persona que dona d'alta el tema. Responsables són els que poden resoldre el problema, o tenen intenció de fer-ho.

Control de qualitat

Els temes amb un control de qualitat assignat, tenen un pas més a cobrir dins el flux del tema: la verificació. Només el contacte assignat com a QA és qui pot verificar la resolució.

Assistent

No té cap responsabilitat. Només rep informació de com avança el tema i pot afegir comentaris.

Inici i final d'un tema

El tema no necessita de l'existència del control de qualitat, així com qui verifica o tanca els temes. No és important, ja que tots els implicats en el tema seran sempre notificats dels canvis.

Sense QA.

  1. L'informant obre un tema.
  2. El responsable l'accepta.
  3. S'intercanvia informació... (Incidències, comentaris, etc.)
  4. El responsable resol el problema.
  5. L'informant tanca el tema o si no hi està d'acord, el reobre.

Amb QA.

  1. L'informant obre un tema.
  2. El responsable l'accepta.
  3. S'estableix un QA.
  4. S'intercanvia informació... (Incidències, comentaris, etc.)
  5. El responsable resol el problema.
  6. El QA verifica la resolució.
  7. L'informant tanca el tema o si no hi està d'acord, el reobre.
En pràctica habitual que el responsable faci el pas de resoldre conjuntament amb el de tancar el tema. Quan es fa així, l'usuari informant veu els temes tancats com a pendents de repassar. Aquest estat és únicament visible per l'informant. Un cop repassat, el tema es pot arxivar, que és el mateix estat on estaria si l'hagués tancat l'informant.
Visors de temes

Els temes poden veure's com a llistat d'activitat d'un dossier. Per a dossiers amb molta activitat, aquest tipus de visor té poca utilitat. També és poc útil per a trobar temes concrets quan es desconeix a quin dossier han estat associats. Per a resoldre les diferents necessitats que adrecen els temes, el mòdul de dossiers dóna diferents visors de temes.

Els meus temes


El visor de Els meus temes dóna una visió global dels temes pendents, sigui dins el context de dossier, de categoria o total.

Els meus temes s'ordena per estats, prioritats i tipus, sent sensible a la persona que ho consulta. Dins l'ordenació es contemplen les agrupacions Data sobrepassada, Per fer, Per supervisar, Reunió demanada, Per venir i Congelats. Un mateix tema seria dins Per fer si ho consultés el responsable i dins Per supervisar si ho fes l'informant.

Els temes dins l'agrupació Per venir es mostren junt amb el motiu que els fa futuribles. Sigui la data d'inici o que depenguin de l'inici o finalització d'un altre tema.
Per a qui és?
El visor de Els meus temes és el recomanat pel treball del dia a dia. Mostra sempre quins són els temes que l'usuari autenticat té per fer, sense necessitat d'haver d'interpretar els estats.

Kanban


És un subconjunt de les opcions que dóna Els meus temes i es mostra en tres columnes: Per fer, En progrés i Fet. El visor Kanban del mòdul de dossiers dóna per fets aquells temes resolts i encara no tancats. Degut a la quantitat de temes que es podrien crear dins un sol dossier, no té massa sentit mostrar els temes ja tancats.

Per a qui és?
El visor Kanban és una simplificació que pot ser útil també pel dia a dia.

Visor de tasques


Mostra els temes com un llistat de temes, podent seleccionar veure només els oberts. La diferència del llistat normal és que mostra d'una manera molt clara quins són els temes que depenen de la terminació o l'inici d'altres.

Per a qui és?
El Visor de tasques està pensat per a la planificació de tasques. Principalment quan aquestes van lligades a subtasques.

Gantt


Genera una gràfica Gantt amb les dades dels temes. Quan no s'han assignat hores estimades, li assigna 1 hora al tema. Si hi ha hores reals, ho mostra en una barra sobreposada.

Per a qui és?
El Gantt és una representació gràfica de les tasques. També està pensat per a la planificació.

Graph


Genera un graph amb les relacions del temes. La diferència amb el visor de tasques és que permet amagar els temes que no siguin fites, facilitant la tasca de treballar arbres complexes amb fites.

Per a qui és?
Els Graph són una representació gràfica de les relacions entre temes. Ideal per a projectes controlats per fites.
Guia d'estats

Estat

Establit per

Timming

Explicació

NOU

Automàticament

Responsable, QA

Estat inicial del problema. L'informant ha omplert els camps.

INCOMPLET

Responsable

Informant

El responsable pensa que no hi ha prou informació per començar.

COMENÇAT

Responsable

Responsable

El responsable ha acceptat la qüestió. A partir d'ara, ell és l'únic que es preocupa per l'estat de la qüestió.

REOBERT

Informant, QA

Responsable, QA

Qualsevol tema pot ser reobert si l'informant o el QA creuen que no està ben resolt.

REUNIÓ

Informant, QA, Responsable

Informant, QA, Responsable

Algú ha demanat una reunió. Es congela el tema fins que es canvií l'estat.

CONGELAT

Informant, QA, Responsable

Informant, QA, Responsable

Algú ha congelat el tema. Es tracta els temes congelats com si estiguessin tancats, fins un canvi d'estat.

RESOLT

Responsable

Informant, QA

El responsable resol el tema. Vegeu les resolucions.

VERIFICAT

QA

Informant

El QA ha comprovat el tema. Quan no hi ha control de qualitat aquesta etapa no existeix i es passa directament a l'estat proper.

TANCAT

Informant, QA

Informant, QA

El tema és finalment tancat. Els temes tancats no surten directament en Els meus temes.

Guia de prioritats

Les prioritats del tema es numeren de P1 fins P5, sent P1 la més important /greu.

Prioritat

Explicació

P1

  • Funció (part identificable de la funcionalitat) no funciona, no existeix solució.
  • Les dades es corrompen, pot derivar en pèrdua de dades.
  • Error reproduïble, inevitable o punt mort.
  • Bloqueja el curs d'altres, cap solució existeix.
  • Text o gràfics incorrectes amb implicacions legals.
  • Regressió en la funcionalitat o degradació del rendiment.

P2

  • Característica afectada significativament, una solució pot existir però és difícil d'usar o poc pràctic.
  • Accident intermitent o bloqueig, passa amb força freqüència.
  • Problema d'usabilitat crític.
  • Greu problema de rendiment.
  • Afecta el curs d'altres.

P3

  • Part d'una funció es veu afectada, una solució viable existeix.
  • El rendiment és deficient.
  • Alta visibilitat d'un problema d'usabilitat.

P4

  • Comportament incorrecte que no afecta la funcionalitat.
  • Problema d'usabilitat menor.
  • Aparença visual incorrecta.

P5

  • Causa inquietud, pertorbació menor / molèstia.
Bones pràctiques

El bon informant

Per a ser un bon informant cal tenir en compte que la persona que rebrà la informació no és dins el context on aquesta s'ha donat. El que segueix és una petita guia pel bon informant:

Omplir el sumari del tema

El sumari és el que surt en els llistats, el primer que es veu del tema. Per això la descripció que es doni en el sumari és la que identificarà el tema.

Els temes poden ser publicables, es a dir, podrien sortir llistats en pàgines web relacionades amb l'empresa. No és bona idea incloure noms en els sumaris. Hi han altres eines, com els dossiers i les entitats relacionades, per saber de qui es parla o qui té el problema.

Incloure informació relacionada amb el tema

Es bo incloure en el comentari els recursos usats, possibles versions o números de sèrie. També està bé posar la periodicitat en que es reprodueix el tema.

Si es coneix, és una bona pràctica incloure un pas a pas per reproduir el cas. També què és el que s'esperava que fes.

Si hi han arxius relacionats, com PDFs, còpies de pantalla... és bo adjuntar-los al tema. Les còpies de pantalla s'haurien de adjuntar en format imatge (JPG, PNG...) ja que així son visibles sense necessitat de descarregar-les.

Fer cas dels missatges que vagi generant el tema

Un cop iniciat, un tema anirà generant missatges segons informin els participants. Un bon informant farà cas d'aquests missatges i prendrà les accions pertinents.

És important incloure comentaris en cada canvi d'estat, per fer més fàcil la interpretació del canvi.

No fer copiar-i-enganxar

La informació cal interpretar-la i després escriure el que s'ha entès. Copiar-i-enganxar només pot portar confusió.

Evitar posar noms de persones que no intervinguin

Cal evitar l'esment a persones que no intervinguin en el tema, ja des d'un bon principi. Qui vulgui, o pugui, participar, ja ho farà pel seu compte.

No copiar-i-enganxar text que vingui d'altres converses i que contingui noms de persones. Evitar els 'tal ha dit'.

El bon responsable

Un bon responsable és aquell que resol els temes ràpida i eficaçment. Però també és aquell que detalla el motiu del problema i com ha arribat a solucionar-lo. Saber quin era el problema i què s'ha fet per resoldre'l pot ser de gran utilitat per a l'informant.

Mantenir les formes, per sobre la tensió de la feina

No cal ser educat (salutacions, abraços, etc.) ni fer comentaris punyents. L'ideal és provar a ser sintètic en les descripcions, sense afegir qüestions personals.

Hi ha moments, però, en que la defensa d'un tema pot portar a parlar d'estats d'ànim, molèsties i d'altres similars. És en aquests moments on un punt d'educació ho agrairan tots els implicats.

Hores, despeses i preu

Els temes permeten portar el compte d'acumulats estimats i reals per a les categories hores, despeses i preu. En l'ús normal, s'entén que els acumulats reals es resten dels d'estimacions, donant l'acumulat restant. Si això ho portem al dossier, aquests treballa amb els acumulats dels seus temes, respectant el tipus d'acumulat i la seva categoria.

Per a tots els casos que es veuran a continuació, els valors imputats a l'agregat tenen el mateix propòsit. És possible mesclar propòsits quan la categoria de l'agregat canvia.

Els usos més habituals dels acumulats

Aquests són casos d'ús adaptats al món real per usuaris de BS Dossiers.

Packs de manteniment

Els packs de manteniment porten la problemàtica dels diferents tipus d'hores. El cas que veurem inclou les hores preventives i les hores d'acció ràpida. La diferència entre els dos tipus és la manera com s'apliquen.

Exemple d'un dossier tipus pack de manteniment

Tipus d'hora

Com s'aplica

Preu

Hores contractades

Total

Preventiva

Via l'agenda de preferència del responsable. Es calcula basant-se en la duració de la rutina preventiva.

70€

5 / mes

350€

Acció ràpida

Per incidència en el concepte del manteniment. S'adapta al nombre d'incidències per un període estipulat.

140€

10 / mes

1.400€

Totals mes

15 hores

1.750€

Per adaptar el funcionament a un dossier i portar el control d'hores, seguiríem aquestes passes:

Tema

Descripció

Hores estimades

Hores reals

Factura de manteniment

Crearem un tema indicant que és una factura de provisió pel manteniment. La quantitat d'hores serà la suma d'ambdós tipus, preventives i d'acció ràpida.

Intervenció preventiva

Crearem un tema indicant el tipus d'intervenció. És important esgotar les hores preventives acordades, donat que no tenim manera de diferenciar el tipus d'hora.

Acció ràpida

Crearem un tema indicant que és una acció ràpida. En casos reals, el client pot haver demanat una intervenció normal usant les hores del contracte.

Regularització per termini de període

Crearem un tema indicant que és una regularització per termini de període. Les hores poden ser negatives, amb l'objectiu de deixar l'acumulat a zero.

Al final del període contractat, es pot fer un seguiment de les hores contractades (estimades) i les sobrants. Aquest seguiment el poden fer també els clients amb el pack contractat, via els informes per correu o per accés a l'àrea de membres de la web.

Per casos on es consideri que la intervenció descompta d'hores d'acció ràpida i no ho és, es pot dividir per dos les hores imputades. Ex. 5 / 2 = 2.5. Aquest cas es dóna sovint en tancament de períodes i regularització d'hores.

Packs d'hores

Els packs d'hores són fàcilment controlables des d'un dossier específic.

Exemple d'un dossier tipus pack d'hores

Per adaptar el funcionament a un dossier i portar el control d'hores contractades vs. gastades, seguiríem aquestes passes:

Tema

Descripció

Hores estimades

Hores reals

Factura de pack d'hores

Crearem un tema indicant que és una factura de provisió d'hores. La quantitat d'hores serà quantitat total del pack.

Intervecions relacionades amb el pack

Crearem un tema indicant el motiu de la intervenció.

Des del dossier és visible el nombre d'hores restants al pack.

Control d'impagats

El control d'impagats es pot portar des d'un dossier específic. En aquest exemple usarem l'agregat de preu.

Exemple d'un dossier tipus control d'impagats

Per adaptar el funcionament a un dossier i portar el control dels imports impagats, els documents a què corresponen i les respostes del subjecte del dossier, seguiríem aquestes passes:

Tema

Descripció

Preu estimat

Preu real

Document impagat

Crearem un tema indicant quin és el document impagat. A preu posarem el total del document.

Pagaments totals o fraccionats

Crearem un tema indicant quin tipus de pagament és. El pagament el posarem a preu.

Contacte amb el subjecte per resoldre el pagament

Crearem un tema indicant com ens hem posat en contacte i amb qui hem parlat.

En el visor del dossier tindrem les quantitats degudes, les liquidades i el restant. Per aquest dossier és útil el visor d'activitat transversal dels temes. Aquest visor dóna una seqüència temporal de la relació amb el subjecte.

Activitat text vs parser

Els comentaris generats quan s'aporta informació d'un tema inclouen una versió text de les dades. Aquest text és el mostrat quan es veu l'activitat d'un tema. També és la informació que s'envia per correu als integrants del tema i en els resums d'activitat dels propietaris de dossier.

Un exemple del text rebut seria:

Canvis
Descripció []: Assegurar que es crida isEmpty() per permetre la gravació de tots els EntityComposer
Dossier []: BrightSide Application Framework
Prioritat [P3: Tinc una sol·lució]: P1: No puc continuar
Tipus [Tasca]: Acció correctiva
Versió []: 1.5

Participants
Informant: Someone
Responsable: Someone

Usant el parser

Amb la vinguda de les LastActivity com a secció externa de les Newsletter, el comentari d'activitat contenia més informació de la necessària per a cada data mostrada. Això ha obligat a crear un parser del text del comentari que permet tipificar les dades contingudes. El resultat és la possibilitat de retallar i donar format al contigut.

Un exemple de detall amb format de l'informe de darrera activitat seria:

578 » ASSEGURAR QUE ES CRIDA ISEMPTY() PER PERMETRE LA GRAVACIÓ DE TOTS ELS ENTITYCOMPOSER [1.5 » 9 FEBR. 2011] [ACCIÓ CORRECTIVA, NOU]

3 gen. 2017

Tipus: Tasca > Acció correctiva
Prioritat: P3: Tinc una sol·lució > P1: No puc continuar
Participants: Someone (Informant), Someone (Responsable)

Propietats

Les propietats que separa el parser són: comment, participants, attachments, description, prioritity, type, grouping, dossier, version, publishable, control, delivery, startDate, status, resolution, duplicated, hours, expenses, price, previsionHours, previsionExpenses, previsionPrice.

Publicacions

El mòdul BrigthSide Publication permet convertir un context de la web en:

Les categories de publicacions

La categoria de la publicació permet filtrar el conjunt de publicacions, per decidir coses com:

Subscriptors

Les categories admeten subscriptors. Quan aquests subscriptors poden fer manteniment de la seva subscripció, o no, es decideix per categoria. En les categories públiques, els usuaris administren la seva subscripció. Les categories públiques poden també restringir l'accés per grup social; quan és així els usuaris que no siguin del grup social no podran subscriure's.

Els usuaris poden sempre demanar no rebre d'una categoria, sigui o no privada, exceptuant les notificacions de sistema.

Tipus principals de publicacions

Publicació


Ordenació

Les publicacions s'ordenen per la data de la publicació, editable, en ordre descendent. És a dir, la més nova la primera.

Els bloggers

La funcionalitat per bloggers és estrictament a nivell web i per publicacions no acceptades. No s'entra a l'aplicació.

Es poden afegir bloggers a una categoria. Els bloggers poden ser, amés, administradors de la categoria.

Per veure què es pot fer segons el rol assignat, consulteu aquesta taula:

Operació dins la categoria

Administrador

Blogger

Veure publicacions aceptades

No

No

Nova publicació

Editar publicació pròpia

Editar publicació aliena

No

Públic o privat, resum de funcionalitats

Funcionalitat per categoria

Pública

Privada

Sortir en el context de publicacions de la web

No

Subscripció administrada per usuari

No

Personalitzable amb nom, email, etc.

No

Enviament per correu

Les publicacions s'envien per correu als subscriptors. Una publicació enviada ja no es torna a enviar. L'atribut enviada és editable, així que un administrador pot controlar els enviaments i els re-enviaments.

Quan especificat, l'atribut Retenir fins controla que no es faci l'enviament fins que es compleixi la data i hora.

Llançadores de correu

La forma estàndard d'enviament de publicacions és mitjançant una tasca d'enviament. La periodicitat d'execució d'aquesta tasca és configurable. Quan la tasca troba publicacions no enviades les prepara per enviar als subscriptors de la categoria de la publicació.

Per poder enviar la publicació usant la forma estàndard, cal que l'usuari hagi confirmat els seus Agreements i haver donat conformitat a la seva subscripció en Mail queue .

Una publicació sempre pot ser enviada usant Sendables .

Newsletter

Les newsletter poden veure's com publicacions i també poden funcionar igual. Però són, internament, completament diferents. Així com una newsletter pot fer de publicació, al la inversa és impossible.

La composició d'una newsletter és el següent (només els camps més significatius):

Camp

Explicació

Títol

És el títol de la newsletter. Per a newsletter tipus informe, el títol de la newsletter pot contenir macros que s'expandiran en el moment de l'enviament. Això permet crear els números de newsletter a partir d'una sola maquetació.

Acceptat

Cert quan la newsletter és llesta per a ser enviada.

Categoria

Es correspon a les categories d'enviament del sistema i inclouen les categories de publicacions. Les categories són les que administren les subscripcions.

Plantilla

És el sobre que s'utilitzarà per enviar la newsletter. Per defecte és el mateix que s'utilitza per a la resta de notificacions.

En la configuració bàsica s'afegeix la NoLogo, que elimina el logo inicial de la plantilla per defecte, i la Clean que només deixa el cos central de la plantilla.

Contingut estàtic

Aquest atribut controla la duració en el temps del contingut d'una newsletter. Quan el contingut és estàtic, la newsletter està pensada per a ser enviada una única vegada. Les newsletter amb contingut estàtic poden ser fàcilment substituïdes per publicacions dins newsletter sense contingut estàtic.

Vol o Podria voler

La Newsletter pot comportar-se com una notificació de sistema variant aquest atribut.

  • Vol comprova que l'usuari tingui acceptats tots els acords de notificacions i la subscripció sigui activa.
  • Podria voler comprova que l'usuari no hagi denegat algun acord de notificació i la subscripció sigui activa.

Per a més informació, veieu Mail queue .

Seccions

Són el contingut de la newsletter. Poden ser de diferents tipus, segons la informació que continguin.

Les seccions

Les seccions tenen propietats comunes i propietats específiques segons el tipus.

Propietats comunes

Propietat

Explicació

Columna

Una secció pot ser una columna. Si es marca aquest atribut, les seccions adjacents amb el mateix atribut formen columnes.

Ample

Si la secció és una columna, aquest atribut controla l'amplada de la columna. Si no s'indica res, les columnes es distribueixen amb el mateix ample.

Disparador

Per enviaments que necessitin disparador, aquest atribut converteix la secció en un disparador només si té contingut.

Tipus de seccions

Tipus

Explicació

Text

Les seccions de tipus text són de contingut wiki. Contenen text amb format, imatges i qualsevol altre contingut multimèdia admès pel wiki.

Imatge

Les seccions d'imatge són formades per una imatge que ocuparà el 100% d'ample de la secció. La utilitat és crear banners amb facilitat.

Externa

Les seccions externes s'alimenten del contingut dels mòduls BrightSide. Una secció externa, per exemple, podria contenir publicacions, una publicació sola, un llistat de temes per fer, projectes, contractes, documents. Les seccions externes admeten crear filtres de les dades que mostren, poden fer que el contingut sigui personalitzat per a cada persona a qui s'envia.

Propietats per tipus de secció

Tipus

Propietat

Explicació

Text o Externa

Banner

És el banner que encapçalarà la secció. La newsletter proporciona un editor de banners per facilitar-ne la creació.

Imatge

Imatge

És la imatge que omplirà la secció. La imatge ocuparà l'ample total de la secció, tenint en compte si és una columna.

Imatge

Enllaç

Si es defineix un enllaç, quan es faci click sobre la imatge es navegarà fins l'enllaç.

Gràfica simplificada d'una newsletter


Macros externes

Les seccions externes permeten incloure contingut d'altres mòduls. La comunicació es fa via funcions macro que s'expandeixen en el contingut final. Segons els atributs, una funció pot tornar contingut específic per a cada usuari o genèric per a tots.

No cal escriure les macros senceres. La majoria funcionen correctament amb els paràmetres per defecte.

convocations
Mostra les convocatòries.

convocations([context=<String>];[count=10<Integer>];[template=summary<String>];[restricted=true<Boolean>];[public=false<Boolean>];[future=true<Boolean>])

Atributs

Descripció Tipus Opcions Per defecte
context Indica on porten els enllaços per llegir més. <String>
count El nombre d'ítems a mostrar. <Integer> 10
template El patró del format per mostrar els items. <String> summary
restricted Cert si el que es mostra és específic per a l'usuari. <Boolean> true
public <Boolean> false
future Cert si es mostren els items amb data futura. <Boolean> true

polls
Mostra les enquestes.

polls([context=<String>];[count=10<Integer>];[restricted=true<Boolean>];[active=false<Boolean>];[template=summary<String>])

Atributs

Descripció Tipus Opcions Per defecte
context Indica on porten els enllaços per llegir més. <String>
count El nombre d'ítems a mostrar. <Integer> 10
restricted Cert si el que es mostra és específic per a l'usuari. <Boolean> true
active Cert si l'item es actiu. <Boolean> false
template El patró del format per mostrar els items. <String> summary

dossiers
Mostra els dossiers.

dossiers([status=onwork<onwork|closed|all>];[context=<String>];[categoryIds=<String>];[dossierId=0<Long>];[count=10<Integer>];[restricted=false<Boolean>];[direct=false<Boolean>];[related=false<Boolean>];[template=summary<String>])

Atributs

Descripció Tipus Opcions Per defecte
status L'estat en que es troba l'item. <String> onwork|closed|all onwork
context Indica on porten els enllaços per llegir més. <String>
categoryIds Les categories a mostrar. Buit per a totes. <String>
dossierId L'identificador del dossier a mostrar. <Long> 0
count El nombre d'ítems a mostrar. <Integer> 10
restricted Cert si el que es mostra és específic per a l'usuari. <Boolean> false
direct Cert si el que es mostra és per participació directe de l'usuari. <Boolean> false
related Cert si el que es mostra es participat per membres de la mateixa empresa que l'usuari. <Boolean> false
template El patró del format per mostrar els items. <String> summary

projects
Mostra els projectes.

projects(status=onwork<onwork|closed|all>;context=<String>;[categoryIds=<String>];[dossierId=0<Long>];[count=10<Integer>];[restricted=false<Boolean>];[direct=false<Boolean>];[related=false<Boolean>];[template=summary<String>])

Atributs

Descripció Tipus Opcions Per defecte
status L'estat en que es troba l'item. <String> onwork|closed|all onwork
context Indica on porten els enllaços per llegir més. <String>
categoryIds Les categories a mostrar. Buit per a totes. <String>
dossierId L'identificador del dossier a mostrar. <Long> 0
count El nombre d'ítems a mostrar. <Integer> 10
restricted Cert si el que es mostra és específic per a l'usuari. <Boolean> false
direct Cert si el que es mostra és per participació directe de l'usuari. <Boolean> false
related Cert si el que es mostra es participat per membres de la mateixa empresa que l'usuari. <Boolean> false
template El patró del format per mostrar els items. <String> summary

issues
Mostra els temes.

issues(status=onwork<onwork|closed|all>;context=<String>;[categoryId=0<Long>];[dossierId=0<Long>];[count=10<Integer>];[restricted=false<Boolean>];[template=summary<String>])

Atributs

Descripció Tipus Opcions Per defecte
status L'estat en que es troba l'item. <String> onwork|closed|all onwork
context Indica on porten els enllaços per llegir més. <String>
categoryId La categoria que es mostrarà. Zero per a totes. <Long> 0
dossierId L'identificador del dossier a mostrar. <Long> 0
count El nombre d'ítems a mostrar. <Integer> 10
restricted Cert si el que es mostra és específic per a l'usuari. <Boolean> false
template El patró del format per mostrar els items. <String> summary

workload
Mostra la càrrega de treball de l'usuari.

workload(context=<String>;[count=10<Integer>];[template=summary<String>])

Atributs

Descripció Tipus Opcions Per defecte
context Indica on porten els enllaços per llegir més. <String>
count El nombre d'ítems a mostrar. <Integer> 10
template El patró del format per mostrar els items. <String> summary

kb
Mostra el contingut de la base de coneixement.

kb(context=<String>;[count=10<Integer>];[template=summary<String>])

Atributs

Descripció Tipus Opcions Per defecte
context Indica on porten els enllaços per llegir més. <String>
count El nombre d'ítems a mostrar. <Integer> 10
template El patró del format per mostrar els items. <String> summary

contracts
Mostra els contractes.

contracts([status=active<active|closed|all>];[context=<String>];[count=10<Integer>];[intervention=true<Boolean>];[type=0<Integer>];[template=summary<String>])

Atributs

Descripció Tipus Opcions Per defecte
status L'estat en que es troba l'item. <String> active|closed|all active
context Indica on porten els enllaços per llegir més. <String>
count El nombre d'ítems a mostrar. <Integer> 10
intervention Cert si es comprova la intervenció dins el contracte. <Boolean> true
type El tipus de l'item. <Integer> 0
template El patró del format per mostrar els items. <String> summary

last-activity
Mostra la darrera activitat de tots els mòduls dirigida a l'usuari i tenint en compte els seus permisos.

last-activity([context=<String>];[count=50<Integer>];[days=7<Integer>];[path=<String>];[template=summary<String>])

Atributs

Descripció Tipus Opcions Per defecte
context Indica on porten els enllaços per llegir més. <String>
count El nombre d'ítems a mostrar. <Integer> 50
days Nombre de dies a revisar. <Integer> 7
path Trajectoria de l'entitat a revisar. Buit si totes. <String>
template El patró del format per mostrar els items. <String> summary

publications
Mostra les publicacions.

publications([context=<String>];[categoryId=0<Long>];[groupId=0<Long>];[count=10<Integer>];[template=summary<String>];[notSent=false<Boolean>];[lang=<String>];[asBlogger=false<Boolean>];[future=false<Boolean>])

Atributs

Descripció Tipus Opcions Per defecte
context Indica on porten els enllaços per llegir més. <String>
categoryId La categoria que es mostrarà. Zero per a totes. <Long> 0
groupId El grup que es mostrarà. Zero per a tots. <Long> 0
count El nombre d'ítems a mostrar. <Integer> 10
template El patró del format per mostrar els items. <String> summary
notSent Cert si es mostren les no enviades. <Boolean> false
lang L'idiome de l'item. Buit per a tots. <String>
asBlogger Els items pendents de l'usuari amb el rol de blogger. <Boolean> false
future Cert si es mostren els items amb data futura. <Boolean> false

challenges

challenges([status=active<active|closed|all>];[context=<String>];[count=10<Integer>];[restricted=false<Boolean>];[studentRelated=false<Boolean>];[challengerRelated=false<Boolean>];[responseFrom=15<Integer>];[template=summary<String>])

Atributs

Descripció Tipus Opcions Per defecte
status L'estat en que es troba l'item. <String> active|closed|all active
context Indica on porten els enllaços per llegir més. <String>
count El nombre d'ítems a mostrar. <Integer> 10
restricted Cert si el que es mostra és específic per a l'usuari. <Boolean> false
studentRelated <Boolean> false
challengerRelated <Boolean> false
responseFrom <Integer> 15
template El patró del format per mostrar els items. <String> summary

Llançadora

Per tal de cobrir tots els casos que permeten les newsletter, la tasca que llança el contingut pels subscriptors és diferent de la tasca d'enviament de publicacions.

Diferències per decidir si enviar

La llançadora de newsletter té en compte que els diferents continguts venen de diferents mòduls. Si la llançadora es defineix com a Necessita disparador, previ a l'enviament, la llançadora comprovarà que hi hagi continguts en aquelles seccions marcades com a Disparador.

Diferències en els subscriptors

Opcionalment, la llançadora pot restringir els nombre de recipients a criteris de mòdul. Un cop seleccionats els recipients, aquests passaran pel filtre de subscripció, on es diu si volen o no rebre de la categoria de la newsletter.

Exemples

Tot i que és possible crear tantes newsletter com s'enviïn, l'objectiu principal és permetre usar les newsletter com eina de maquetació i captar el contingut de l'activitat dins les bases de dades.

El que segueix són exemples dels diferents tipus de newsletter segons els atributs o la llançadora que s'utilitzi.

Variacions pel contingut

Newsletter tipus informe

Valor

Explicació

Títol

Pot ser un títol normal, tipus Informe d'estat.

Estàtica/Dinàmica

El contingut no es guarda com enviat en una data determinada. Cada vegada que es consulti o s'enviï, variarà segons les dades del moment de la consulta.

Newsletter tipus publicació via números

Valor

Explicació

Títol

El títol ha de contenir el número. Aquest pot ser del format any/mes per enviaments mensuals.

Estàtica/Dinàmica

El contingut es guarda com enviat en una data determinada. Cada vegada que es consulti o s'enviï el número, es veurà el mateix que es va enviar per primer cop.

Variacions per llançadora

Newsletter periòdiques

Llançadora

Explicació

Tasca periòdica

Una tasca periòdica genera el contingut i l'envia als subscriptors.

Newsletter d'activitat

Llançadora

Explicació

Una activitat concreta

Una activitat genera el contingut i l'envia als subscriptors.

Enviaments

Tant les publicacions com les newsletter s'envien usant diferents mètodes. El més habitual és usar una tasca programada que faci l'enviament, però també poden ser enviades en moments concrets a usuaris determinats.

Per entendre la complexitat dels enviaments, veiem quines són les peces en joc:

Peça

Explicació

Categoria de publicacions

Poden ser públiques o privades. Les públiques són gestionades per l'usuari. Les privades les gestiona l'administrador de publicacions.

Categoria de notificacions

Són categories creades pel sistema. La divisió entre públiques i privades funciona igual que les categories de publicacions.

El sistema usa les notificacions privades per enviar missatges de sistema, com per exemple, la recuperació de passwords.

Subscripcions

Per a tota categoria pública, les subscripcions són gestionades per l'usuari, podent ser restringides pel grup social.

Per categories privades, l'usuari no pot subscriure's, però si demanar no rebre.

Enviables

Els enviables són qualsevol entitat que pugui ser enviada per correu. La finalitat dels enviables és poder enviar correus de manera puntual.

Acords

Els acords són acceptats o declinats per l'usuari. Hi ha dos tipus d'acord, el que restringeix l'accés a l'aplicació i el que prohibeix l'enviament de notificacions o publicacions.

Els filtres

Algunes de les peces anteriors actuen com a filtres. La següent imatge mostra els elements a lloc.


Enviaments a usuaris

Bones pràctiques

Usar categories públiques

Les categories públiques són gestionades per l'usuari. Si no vol rebre d'una categoria, pot aturar l'enviament per configuració. Si vol subscriure's a alguna categoria, també ho pot fer per configuració.

Evitar l'ús d'enviables

Els enviables tenen com a únic filtre els acords. L'usuari és requerit a un pronunciament vers l'acord una sola vegada. Un cop accepta o declina, ja no se li recorda més. Amés, els acords són acumulables per usuari. Un acord declinat atura tot enviament. L'efecte d'això, és que l'usuari no pot aturar l'enviament per configuració i té com a única solució demanar que s'aturi tot enviament.

No fer enviaments massius fora de les tasques programades

Les tasques programades, llançadores d'enviaments de categories de publicacions o newsletter, estan optimitzades per a enviaments massius. Utilitzem tasques d'enviament per lots que eviten ser marcats com spam pel volum de correus.

Dins les tasques programades, evitar l'ús de Guardar i executar, incidint més en una programació correcte.

Idiomes

Tant publicacions com newsletters poden definir-se per a un idioma concret. El resultat és el següent:

Idioma

Qui ho veu

Buit o nul

Tots els visitants de la web veurien la publicació o newsletter.

Un idioma de la web

Tots els visitants si l'idioma de visualització de la web o la del seu navegador coincideixen.

En la majoria de webs aquest és seleccionable pel visitant.

Un idioma no configurat a la web

Només els visitants si l'idioma del seu navegador coincideix i la seva selecció d'idioma és Configuració per defecte.

Enviaments

Pels enviaments, la diferència està en l'idioma a comparar. S'utilitza sempre la configuració regional del contacte.

Idioma

S'envia?

Buit o nul

S'envia a tots els contactes seleccionats.

Un idioma concret

S'envia exclusivament als contactes seleccionats configurats amb el mateix idioma. La resta no rebran la publicació o newsletter.

La lògica darrera els idiomes

Com a regla general, s'entén posar un idioma quan:

No posaríem idioma si:

Publicació vs Newsletter

Les publicacions són bàsicament un blog. Van lligades a una data, un autor, unes lectures, una valoració i comentaris. Les publicacions utilitzen Mail queue per gestionar les subscripcions de les categories de publicació, així que poden ser enviades per correu a tot usuari registrat que ho vulgui. Les publicacions cobreixen abastament les necessitats de comunicació més habituals, via web o correu.

Si és així, doncs perquè hauríem de voler una nova eina?

Per què usar Newsletter?

Les Newsletter entomen la casuística que comporta l'enviament per correu. Maquetació, formats i continguts sota estàndards que funcionen en qualsevol client de correu.

Les Newsletter, amés, no han vingut soles. Per tal de donar contingut a les seccions externes, s'han creat els ContentProvider. Cada mòdul pot definir els seus per dotar de contingut les Newsletter.

Comparativa per funcionalitats

Funcionalitat

Publication

Newsletter

Publicació web

Sí, és l'entorn on millor es desenvolupa.

Sí, però no hi està pensat.

Enviament per correu

Sí, envia les publicacions no enviades prèviament.

Sí.

Control de subscriptors

Sí, per categories de publicació.

Sí, per categories de publicació, de mòduls i de sistema.

Funcionalitat notificació

No.

Sí, via disparadors de secció.

Contingut personalitzat

Sí, nom, correu i enllaços actius (liveref).

Sí, igual que publicacions més contingut personalitzat de mòduls.

Contingut dinàmic

No.

Sí, una sola Newsletter pot configurar-se per a ser enviada amb resums que variaran segons el seu estat en el moment de l'enviament.

Convencions

Funcionalitat per URLs esteses

Les publicacions generen una URL d'accés a la publicació sencera. Aquesta URL segueix les convencions estàndard per URLs fàcils de llegir i acceptades pels buscadors. En una primera versió, les URL són el mateix títol adaptat.

Funcionalitat afegida per imatges

Dins els templates de publicacions, s'ha afegit una convenció de directoris amb funcionalitat per a imatges.

Tant les topmost com les priorized es veuen en el llistat. Les included només quan es veu la publicació sencera.

De la mateixa manera, les topmost i les priorized s'envien dins la notificació per correu.

Funcionalitat per arxius adjunts

Dins els templates de publicacions, s'ha afegit una convenció de directoris amb funcionalitat per a documents.

Els documents dins l'arrel de attached s'envien com adjunts dins les notificacions per correu de categories marcades com Evitar la cua o usant la pestanya Enviable.

Customer Relationship

BrightSide CRM es composa dels elements que permeten fer un seguiment de les accions fetes pels comercials i tècnics, dirigides a clients i clients potencials, per assolir una venda.

Els blocs principals del CRM son:

  1. Acció de venda
  2. Prospecció de venda
  3. Campanya

Les dades que s'utilitzen per organitzar les accions de venda son:

  1. Client
  2. Venedor
  3. Fórmules de Comissions / Alertes
  4. Touchpoints
  5. Ideal Target
  6. Tipus d'acció
  7. Sectors d'activitat
  8. Tecnologies
Acció de venda

Les accions de venda son el nucli de BrightSide CRM. Son la font del calendari dels venedors, dels resultats de les prospeccions i les campanyes. També permeten crear estadística envers els tipus d'acció i la seva efectivitat. Mantenir al dia les accions de venda dona qualitat a l'informació tornada pel sistema.

Els atributs

Nom

Descripció

Data inici

Indica quan s'ha fet o es preveu fer l'acció.

Data final

Indica la finalització de l'acció.

Adreça

S'agafa de les adreces del client, incloent seus, departaments i contactes. S'escull una de la llista.

Venedor

És el venedor que ha fet o farà l'acció.

Tipus

És el tipus d'acció que s'ha fet o es farà:

  • Trucada
  • Email
  • Visita
Es poden crear tants tipus com siguin necessaris.

Participants

Son les persones que han participat o participaran en l'acció. Els participants poden assignar-se manualment a l'acció o venir donats per la prospecció de venda. Quan la prospecció és part d'una campanya, serà Ideal Target qui escollirà en primera instància.

Comentari

Resum de l'acció descrita pel venedor. En accions futures el comentari descriu què es pretén fer. En accions ja fetes, el resum descriu com s'ha resol l'acció.

Touchpoint

Punt de contacte o fita que s'ha aconseguit en l'acció. Les noves accions hereten els touchpoint d'accions anteriors, entenent que no es perd contacte, sino que es manté o es guanya.

Estat

Indica quan l'acció és per fer, cancel·lada o feta. Una acció amb estat Per fer i data passada es mostra amb un símbol d'alerta

Accions de venda dins la prospecció


Prospecció de venda

La prospecció de venda de BrightSide CRM és el conjunt de les accions de venda fetes a un client o client potencial amb un objectiu definit.

Els atributs

Atribut

Descripció

Client

Client a qui es fa la prospecció.

Descripció

Descripció del motiu pel que es contacte amb el client o client potencial. Quan la prospecció ve d'una campanya, la descripció és de la campanya.

Data inici

Inici de la prospecció.

Data final

Opcional, fi de la prospecció. Quan s'arriba a la data de finalització, la prospecció es dona per acabada negativament, en cas de no haver estat acabada amb anterioritat positivament.

Participants

Son les persones que es faran participar en la prospecció.

Venedors

Son els venedors que poden fer accions de venda en la prospecció. Cada venedor apareix en la prospecció amb una fórmula de comissió i una d'alerta.

Campanya

Les campanyes de BrightSide CRM son eines per crear prospeccions de venda seleccionant múltiples clients o clients potencials. Al afegir un client a la campanya es genera una nova prospecció de venda, escollint els targets segons es defineix amb Ideal Target.

Els atributs

Atribut

Descripció

Descripció

Descripció del motiu pel que es contacte amb els clients o clients potencials.

Data inici

Inici de la campanya.

Data final

Opcional, fi de la campanya. Quan s'arriba a la data de finalització, la campanya dona per acabades negativament totes les prospeccions generades, en cas de que no haguessin estat acabades amb anterioritat positivament.

Targets

Usant Ideal Target, selecciona els participants a les prospeccions generades.

Publicació

Descripció amb contingut ric, HTML, imatges, videos, etc. per publicar via web o email.

Venedors

Venedors assignats a la campanya. Cada venedor apareix en la campanya amb una fórmula de comissió i una d'alerta.

Quan no es defineixin venedors, les prospeccions generades agafaran els venedors assignats al client de la prospecció.

La campanya vista com la adició de clients per aconseguir prospeccions de venda


Client

El client és el contacte sobre el que es fan prospeccions de venda. Quan el contacte que representa el client té definit l'organigrama, facilita la obtenció de targets usant Ideal Target.

Els atributs

Atribut

Descripció

Nom

És el nom del client. Es selecciona d'una llista de contactes i s'ha de correspondre a un contacte vàlid.

Sectors d'activitat

Sectors en els que classifiquem el client.

Tecnologies

Tecnologies que utilitza el client.

Sectors on treballa

Sectors en els que classifiquem els clients a qui dona servei el client.

Venedors

Son els venedors a qui s'assigna el client. Cada venedor apareix amb una fórmula de comissió i una d'alerta.

Sumari de client

El sumari de client és on es mostra l'activitat del contacte en altres mòduls de BrightSide. Aquest és un dels avantatges d'una plataforma integrada. Alguns exemples son:

BrightSide Dossier
Mostra els dossiers oberts al contacte, junt amb dades rellevants.
BrightSide Financials
Mostra els contractes oberts al contacte, junt amb l'estat de la cartera.
BrightSide ERP
Mostra les ordres de treball actives del contacte, junt amb dades rellevants.
Venedor

El venedor és el contacte que fa les accions de venda i a qui se li assignen clients, prospeccions i campanyes.

Els atributs

Atribut

Descripció

Nom

És el nom del venedor. Es selecciona d'una llista de contactes i s'ha de correspondre a un contacte vàlid.

Financials

Contractes


Productes

Productes per contracte

És posible filtrar els productes que tinguin relació amb contractes de dues maneres:

  1. Des del contracte. En la pestanya Productes.
  2. Des de la cerca de productes. Filtrant la cerca per Contracte.
Documents

Generant assentaments


Entrada de productes

L'entrada de productes admet els següents casos:

  1. Introducció directe del codi. El producte que immediatament validat a la línia.
  2. Introducció de codi del contractant. Es pot fer usant el símbol # abans del codi. El producte es valida immediatament.

    Per compatibilitat amb altres versions, també es poden usar dos símbols ## o escriure'l directament. En aquest darrer cas, si el codi de contractant no és coincident amb cap codi de producte produirà el mateix resultat.
  3. Introducció d'un concepte habitual. El text passa directament al camp concepte i es tracta com a producte no codificat.

    La diferència d'aquest darrer cas respecte a introduir el concepte directament, és que l'entrada recorda al darrer preu i l'IVA i els passa als camps corresponents.

Preu proposat al document

El mecanisme aplicat als preus s'aplica també als impostos.

Codis del contractant

Quan un contracte té marcada la opció Usar codis del contractant s'usaran, visualment, els codis definits pel contractant. De tota manera, la cerca de productes funciona igual independentment de com estigui marcada aquesta opció. Quan s'ha buscat per codi i l'opció es marcada, l'entrada troba el codi de contractant correcte.

Cartera

Seleccionar quin document volem fer

Quan en el filtre es selecciona un tipus document, aquest respon sempre al document que es vol fer. Al dir Rebut Despesa, per exemple, es veurien tots els documents que poden continuar el flux cap a Rebut Despesa, per exemple Factura Rebuda i Venciment a Pagar.

Tallar el flux dels documents

A partir de la versió 1.2.9

Cadascun dels documents relacionables té com atributs Ancestre i Descendent, visibles en la pestanya Relacions del document. Un document es relaciona amb altres documents en dos sentits:

Quan un document no té ancestres, és possible desmarcar l'atribut Ancestre per evitar que continui sortint en cartera. El cas és el mateix pel que fa als descendents.

Programació

Un document pot programar-se com entitat. Es configura amb el botó .

Les accions programables son:

  1. Clonar document: Clona el document en la data indicada. Permet crear documents definitius o esborranys.
Hisenda Pública

Model 111

El model 111 llista les dades per:

Les retencions s'agrupen per:

El model 111 és només a títol informatiu. Els comptes implicats es liquiden fent servir l'opció Liquidacions.

Model 303

El model 303 mostra les dades d'IVA dels trimestres. El desglòs és:

I els totals per a cada cas. Les dades per trimestre i desglòs son:

L'import declarat es fa servir per a dues coses:

Els totals del desglòs mostren dues bases, la que es declararà i la real. Seràn diferents si existissin hi haguessin moviments exempts d'IVA.

La generació del assentament

Per a cada trimestre, la fila inferior mostra els totals d'IVA suportat i repecutit. Quan existeix assentament, el camp declarat mostra l'import declarat en l'assentament. Quan no existeix assentament, un botó proposa generar-lo.

La generació del assentament és automàtica, no queda gravat fins que s'accepta i corregeix errors en trimestres passats.

En gravar l'assentament, els comptes d'IVA queden a cero i l'import passa a Hisenda deutora o creditora, segons sigui el cas.

Liquidacions

Les liquidacions permeten pagar o ingressar, segons toqui, d'un dipòsit de tresoreria. Es genera un assentament que liquida els comptes d'Hisenda deutora o creditora contra el compte de tresoreria escollit.

És possible escollir quins comptes es volen liquidar.

Format dels comptes

Comptes associats al IVA i IRPF

El format dels comptes associats al IVA i IRPF és:

[Major][Modificador].[(IVA|IRPF)*10]

Per exemple:

Per aconseguir compatibilitat amb versions anteriors on IVA i IRPF no admetien cap decimal en les actualitzacions s'inclou un autoupdate SQL que opera sobre la base afegint un 0 al final dels comptes associats.

L'algorisme aplicat és:

Si existeix la 4720000018 o la 4770000018
  Converteix fent: (Digits del 1 al 7) + (Digits del 9 al 10) + 0
Si no
  No facis res

El resultat de la modificació és que els comptes associats perden el vuitè dígit i guanyen un darrer zero.

Comptes de liquidació

Es liquiden els comptes associats a IVA i IRPF contra els comptes acabats en 000. La liquidació de compte associada a compte de liquidació es fa al tancar trimestre. El pagament (o cobrament) es fa en la data especificada.

Informe comptables

BS Financials dóna un conjunt d'informes comptables estàndard, més la possibilitat de crear nous informes a mida per l'usuari.

Balanç exportable

El balanç és exportable en el format de sumes dels deure i haver. L'exportació permet extreure les dades del balanç de sumes i saldos. Via les opcions d'exportació, també és possible obtenir un format adequat per a taules pivot.

Opcions d'exportació

Any

L'any objectiu de l'informe.

Mes

El mes de l'any objectiu del qual es fa l'informe

Incorporar saldos inicials

Incorpora l'assentament inicial a l'informe. En cas de no trobar-lo en l'any objectiu, busca el darrer i acumula els imports.

Desglòs

Desglossa els imports per trimestres. Afegeix l'any pel cas d'incorporar saldos inicials en anys sense assentament inicial.

Exportar el Balanç de Sumes i Saldos

L'escenari correcte és un any objectiu amb l'assentament inicial fet o amb l'any anterior tancat. A diferència de l'opció de balanç del menú, l'exportació força la inclusió de l'assentament inicial quan es demana que s'incorporin, anant a buscar-lo en anys anteriors.

  1. Seleccionar l'any objectiu.
  2. Seleccionar el mes fins on es vol treure l'informe.
  3. Marcar l'opció Incorporar saldos inicials.
  4. Deixar desmarcada l'opció Desglòs.

Exportar el balanç en un format adequat per a taules pivot

Les opcions de saldos inicials i desglòs donen l'oportunitat de treure fulles amb més informació i per a diferents propòsits.

És important tenir en compte que quan es demana incorporar saldos inicials i desglòs conjuntament, els saldos inicials són acumulats en el primer trimestre de cada any. Quan aquests s'han trobat en anys anteriors (any objectiu sense assentament inicial), també s'acumularan els assentaments de tancament en el darrer trimestre. Si es vol veure l'evolució trimestral dels comptes, els saldos inicials desfiguraran l'informe. Aquesta regla no s'aplica als comptes d'explotació, excepte quan l'any objectiu no té assentament inicial.

Configurables

Els informes comptables configurables permeten crear taules amb valors reals de la base de dades Financials usant des de i fins dates.

El format de la definició de l'informe és text JSON i pot configurar-se a Eines -> Arxius -> Informes. L'extensió de l'arxiu amb la definició cal que sigui .json. Els informes seran executables des de Financials -> Comptabilitat -> Informes. Un exemple de definició seria:

{
  "name": "Nom de l'informe",
  "rows": [
    {
      "order": 1,
      "name": "Concepte de la fila 1",
      "regexp": [
        "700.*"
      ],
      "sumType": "CREDIT",
      "negate": false
    },
    {
      "order": 2,
      "name": "Concepte de la fila 2",
      "regexp": [
        "600.*"
      ],
      "sumType": "DEBIT",
      "negate": false
    },
    {
      "order": 3,
      "name": "Total",
      "sum": true
    }
  ],
  "columns": [
    {
      "order": 1,
      "name": "Concepte de la columna 1",
      "regexp": [
        ".*[0-4]"
      ]
    },
    {
      "order": 2,
      "name": "Concepte de la columna 2",
      "regexp": [
        ".*[5-9]"
      ]
    }
  ]
}
Fulles d'informe

Les fulles d'informe BS Financials són informes basats en fulles de càlcul amb configuració de comptes. El módul de fulles d'informe fa còpia de la fulla de configuració i reemplaça les cel·les amb configuració de comptes, pels valors reals de la base comptable.

Es proporcionen dues fulles estàndard que representen el Balanç de Situació en format anual i mensual. Per executar-les aneu a Financials -> Comptabilitat -> Fulles informe. El camp Data serà usat per extreure l'any o l'any i el mes, segons l'informe.

Balanç de Situació

  1. Seleccionar Financials -> Comptabilitat -> Fulles informe.
  2. En el camp Data seleccionar una data qualsevol de l'any del qual es vol el balanç.
  3. Seleccionar la Fulla ComptesAnuals.
Resource Planning

Compres

Fluxe del proces de compres

En la tasca es defineixen els usos requerits:

Inici del fluxe

Es defineix en la tasca i controla quan els usos son visibles a compres:

En tots els casos es defineix un valor de retard. Per exemple, un retard de menys un hora, més Comprar al acabar predecessor, faria que les compres veiessin els usos un hora abans de la previssió d'acabament del predecessor, o el que seria el mateix, una hora abans del moment previst de començar la tasca.

Estats

  1. Usos (Recurs humà, recurs, producte)
    1. Cap. Encara no ha arribat a compres.
    2. Pendent. Hi ha una entrada a compres.
    3. Rebut. Hi ha una recepció.
      1. Parcialment.
      2. Complet. La recepció cubreix el requeriment.
    4. Processat. La tasca s'ha acabat.
  2. Comandes
    1. Cap. Es en la cua de compres.
    2. Pendent. S'ha enviat la comanda.
    3. Rebuda.
      1. Parcialment. Hi han recepcions per quantitats inferiors a la demanada.
      2. Completa. Les recepcions donen igual o més a la quantitat demanada.
  3. Recepcions
    1. Cap. La tasca no s'ha iniciat.
    2. Usat.
      1. Parcialment. La tasca utilitza parcialment la recepció.
      2. Completa. La tasca utilitza la totalitat.
Pendent encara: colocar els remanents on es puguin consultar pels usos. Això resoldria l'ús parcial en tasques acabades. El cas en només vàlid per a productes.
Work Order


Task

Estat de la tasca

Canvis en l'estat

El pas de planificant a preparada és responsabilitat de la persona que prepara les tasques.

Una tasca preparada estarà en espera quan:

En la resta de casos, la tasca preparada estarà llesta per començar.

Una tasca iniciada pot passar a acabada quan:

Components

Components disponibles

Convocatòries

L'API de convocatòries permet crear convocatòries basades en els participants en entitats de qualsevol mòdul BrightSide.


Com funciona?

Les convocatòries es composen dels següents camps:

Descripció

Nom de la convocatòria. Surt en el calendari i com a subjecte dels correus.

Organitzador

Contacte que convoca. Si el correu es correspon al domini del BaaS, serà l'utilitzat quan s'envií la convocatòria. En cas de no correspondre, s'usaria el correu per defecte.

Data inici i data final

Les dates de l'esdeveniment.

Lloc

Lloc de l'esdeveniment.

En línia

Indica que l'esdeveniment es fa en línia.

URL

L'adreça per poder accedir a l'esdeveniment. Aquesta adreça només es fa pública a les persones convocades, via email, consultant l'àrea d'usuaris o la pàgina web de l'esdeveniment.

Entitat

Entitat BrightSide d'on s'agafen els assistents. La convocatòria pot afegir de l'entitat o fer un afegit profund, usant altres entitats relacionades. Per ex. Dossier i Categoria.

Text

Text explicatiu de l'esdeveniment.

Assistents

Contactes assistents a la convocatòria. Poden afegir-se de l'entitat o directament.

Els camps de la convocatòria estan pensats per ser compatibles amb els que formen l'especificació iCal, exceptuant el text, que admet format en HTML (el wiki es transforma en HTML estàndard). Per tal que el text s'inclogui dins iCal, es genera una versió en text pla, sense imatges ni format.

Organitzador, assistents i calendari

Les convocatòries queden registrades en els calendaris BrightSide de l'organitzador i els assistents. Aquests calendaris es poden importar a diferents plataformes de calendari i dispositius.

Apart del calendari BrightSide, les convocatòries poden enviar-se per correu. Quan es segueix aquest mètode, els correus són de organitzador a assistent, un a un i privat. Dins cada correu s'inclou l'esdeveniment en format iCal. Com el comportament varia segons les plataformes, cal tenir en compte:

Assistència

Les convocatòries poden usar-se com a control de registre i assistència per a trobades, cursos o qualsevol altre esdeveniment.

El codi QR no es genera en el cas d'esdeveniments en línia.

Control d'assistència

Els correus enviats als contactes convocats inclouen un codi QR amb un text indicant que servirà per a validar l'assistència.


Guardi aquest codi QR

Aquest codi s'utilitzarà per a validar la seva assistència.

En el registre d'assistents previ a l'acte els contactes registrats i en possessió del codi QR podran ser validats fent una lectura del codi. La lectura de codi la podrà fer un usuari registrat i pertanyent al grup social Auxiliars d'esdeveniments.

Els contactes amb l'assistència validada es veuran dins la fitxa de la convocatòria amb una marca d'assistència.

Sistema d'auto-registre a la convocatòria

Una convocatòria pot admetre que els contactes puguin registrar-se (afegir-se a la convocatòria). Quan s'habiliti el registre a la convocatòria, caldrà tenir en compte:

En cas de canvi de dates, s'hauran de tenir en compte els dies de validesa del codi QR. Si es passa a una data posterior, els codis no seran vàlids en el moment de validar l'assistència. Després d'un canvi, si s'envia un correu a tots els convocats, el nou codi QR serà bo.

Creant el context de registre

Ens posarem en mode administració web i crearem un context restringit pel rol escollit.

La restricció de rol no pot estar en cap cas buida, per evitar que visitants no registrats puguin iniciar una acció de registre fallida, sense contacte valid.

Un cop creat el context, l'editarem afegint la macro {@entity-ctrl:convocation-ctrl:/convocation/[id_convocatòria]}, sent [id_convocatòria] igual al id de la pestanya convocatòria dins el BaaS.

Visualització de la convocatòria dins el context

Un cop gravat el context, es mostrarà la convocatòria seleccionada. El format serà:

  1. Títol de la convocatòria.
  2. Etiquetes amb data inici, data final, localització i entitat relacionada.
  3. Text de la convocatòria, amb les macros de correu traduïdes al context web.
  4. Control d'assistència segons els següents casos:
Editor wiki

La intenció de l'editor wiki és facilitar l'entrada de la Wiki syntax per a pàgines, publicacions i d'altres elements editables.

Entrada manual vs. assistida

L'editor és necessari és per la pujada d'imatges i la selecció del repositori correcte. També per la pujada de documents. pel que fa a la resta de les opcions de l'editor, són més de recordatori que realment funcionals. En la majoria dels casos preferirà introduir manualment les seqüencies wiki que cercar les opcions de l'editor.

Flux d'entrada de text

La sintaxi wiki gestiona correctament l'entrada de text normal, creant paràgrafs quan es deixen espais en blanc, o salts simples de línia.

Aplicant estils o agrupant sobre text escrit

Si es selecciona text dins l'editor i s'aplica alguna de les opcions de menú sobre el text, només el text seleccionat es veu afectat. Per exemple, si volem tornar un text a negreta, seleccionant-lo i prement el botó de negreta, l'editor afegirà ** al principi i final de la selecció (negreta en sintaxi wiki).

Seleccionant un text i prement Crear grup d'estils, el grup envoltarà el text seleccionat entre [block][/block].

Botons de la barra de menú

En ordre d'esquerra a dreta:

Botó

Funcionalitat

Capçalera 1

Torna el paràgraf on es troba el cursor a l'estil capçalera 1.

Capçalera 2

Torna el paràgraf on es troba el cursor a l'estil capçalera 1.

Capçalera 3

Torna el paràgraf on es troba el cursor a l'estil capçalera 1.

Capçalera 4

Torna el paràgraf on es troba el cursor a l'estil capçalera 1.

Negreta

Torna el text seleccionat a negreta.

Cursiva

Torna el text seleccionat a cursiva.

Mono-espaiada

Torna el text seleccionat a mono-espaiada.

Alineació esquerra

Alinea el bloc d'estils a l'esquerra.

Alineació centre

Centra el contingut del bloc d'estils.

Alineació dreta

Alinea el bloc d'estils a la dreta.

Text justificat

Justifica el contingut del bloc d'estils.

Flotant esquerra

El bloc d'estils flota a l'esquerra.

Flotant dreta

El bloc d'estils flota a la dreta.

Element de llista

Torna el paràgraf on es troba el cursor en un element d'una llista.

Element de llista ordenada

Torna el paràgraf on es troba el cursor en un element d'una llista ordenada.

Color

Defineix el color de la font i/o del fons del grup d'estils on es troba el cursor.

Taula

Crea elements de taula, com columnes i files diferenciant si són de capçalera.

Agrupacions

Defineix varis elements que funcionen com a grups d'estils.

  • Crear grup d'estils. Crea un grup d'estils [block] amb la selecció.
  • Crear estils en línia. Crea un grup d'estils [span] amb la selecció.
  • Crear nota. Crea un grup d'estils [note] amb la selecció.
  • Afegir columna. Crea una nova columna. Les columnes són grups d'estils que es veuran en columna si l'espai visual ho permet, o apilats si no.
  • Acabar columnes. Si s'han creat columnes i es vol continuar amb tot l'ample visual, aquest element n'indica el tancament.
  • Crear tabulador. Crea el patró pels tabuladors.
  • Crear auto-amagar. Crea el patró per les llistes auto-amagades.
  • Wiki syntax. Inicia o acaba la sintaxi wiki.
  • Java syntax. Inicia o acaba la sintaxi Java.
  • XML syntax. Inicia o acaba la sintaxi XML.

Esborrar estils

Esborra els atributs associats al grup d'estils on es troba el cursor.

Imatge

Permet pujar una imatge al repositori adequat i seleccionar-la.

Enllaç

Permet crear un enllaç, incloent enllaços a arxius. El selector d'arxius permet també pujar-ne.

Protecció

Crea elements wiki a partir d'elements HTML, intentant respectar els atributs.

Vista prèvia

Mostra una vista prèvia de l'HTML generat.

Ajuda

Porta a l'ajuda contextual de l'editor wiki.

Enquestes

L’API d’enquestes permet crear grups de preguntes relacionades amb entitats BrightSide.

La primera versió és plenament funcional per a BS Publicacions i BS Dossiers.

Com defineix l'API una enquesta?

Una enquesta és un grup de preguntes relacionades amb una entitat BrightSide. Com atributs, l'enquesta té títol, una descripció, una data límit per respondre, la possibilitat d'adjuntar documentació usant el mòdul d'adjunts i atributs de comportament que veurem més endavant amb més detall.

Al mostrar-se, l'enquesta deixa al participant navegar entre l'entitat relacionada i la pròpia enquesta, tal i com es mostra en els següents exemples.


Enquesta a l'àrea d'usuari


Enquesta en l'entitat relacionada

Els atributs que modifiquen com es mostra l'enquesta

Attribut

Explicació

Permetre negatius

Quan es permeten negatius, els valors que es guarden per a cadascuna de les opcions de l'enquesta són -1, 0 i 1. La transcripció serà En contra, Abstenció i A favor. La opció de vot a la web es mostrarà com vermell, groc o verd, remarcant la opció escollida.

Quan no es permeten negatius, només es guarden las votacions positives. Depenent de si es mostren o no participants, la opció de vot es mostrarà com un OK blau o un Checkmark verd.

Mostrar participants

Quan es mostren participants, es crea una taula on els participants es mostren en l'eix Y i les opcions en l'eix X. Dels participants es veurà el nom i el sentit vot.

Quan no es mostren participants, l'usuari que vota només veu les opcions.

Mostrar vots

Quan es mostren vots, el nombre total de vots es veu per a cada opció. Quan també es mostren participants, la suma dels vots es veu a peu de taula.

Quan no es mostren vots, l'usuari no sap en cap moment el resultat de la votació.

Permetre insercions

Permetre insercions activa la possibilitat que els usuaris puguin afegir opcions a votar.

Aquesta opció no està implementada.

Màxim per opció

Màxim per opció controla la quantitat de vots admesos per opció. Aquest punt té sentit quan s'està fent un tipus d'enquesta on les opcions admeten un nombre de votants determinat. Quan el màxim per opció és zero, tots els participants poden votar totes les opcions.

Màxim d'opcions votades

Màxim d'opcions votades controla la quantitat de vots emesos per un participant. L'explicació seria es pot votar un màxim de 3 del total de 5, sent 3 i 5 part de l'exemple. Quan el màxim d'opcions és zero, el participant pot votar totes les opcions.

Tipus

L'atribut tipus afecta al títol de les opcions. El tipus String es el que admet més varietat i pot ser usat per defecte.

La intenció d'aquest atribut és poder controlar màxims i mínims quan s'hagi marcat la opció Permetre insercions.

Exemples de la mateixa enquesta variant els atributs


No permet negatius, no mostra participants


Permet negatius, no mostra participants


No permet negatius, mostra participants


Permet negatius, mostra participants

Enviar l'enquesta

Les enquestes poden ser enviades per correu. Els recipients seran els participants de l'entitat relacionada. Veiem un exemple usant dos entitats diferents:

Entitat relacionada dossier

Els participants de l'enquesta seran els participants al dossier i a les categories d'on penja el dossier.

Entitat relacionada publicació

Els participants de l'enquesta seran els subscriptors de la categoria de la publicació.

El correu mostra el títol de l'enquesta, l'entitat relacionada, la descripció i les opcions a votar, incloent el sentit del vot en cas d'ésser votada.

Elephant

Overview

Elephant is an application framework based on components. Web Application Developers would not start from scratch, instead will implement standard interfaces. Some of the great advantages of using Elephant are the existing set of components and site administration. Elephant users can expand the site at will, by adding childs to existing pages and selecting whether these childs my or not show in navigators.

Navigators might be a good example of what a component is. DefaultNavigator is a class that queries the page constructor, IConstructor interface, in order to create lists of contexts based on a single level, a tree of contexts or a tree-traversing navigator. Due layout strategy, navigators can be configured at top level and operate at n-level. See more on navigators at anchor

Offerings for developers

Take a look at the Elephant building structure. By creating a new component, you are reusing a lot of already working code. Your application will integrate smoothly into already existing web sites, using standard components as: Portal Mailing System, Automated Mailing Lists, Web Search System, Page Scripting, Macro Scripting, etc.


Offerings for web masters and/or final users

Web masters will enjoy using the existing set of components. It gives them full power on web site appearence while makes quite easy creating new pages and their content. Navigation issues are fully supported by Elephant configuration files, with attributes like: Show In Navigators, Tell Robots NOT_TO_INDEX / NOT_TO_FOLLOW, Supported Languages, Internationalized Names, etc.

Page's content is also greatly assisted. When no component is defined, Elephant's DefaultElement takes place. DefaultElement implements what is required to create page content. Repository for images and documents, easy syntax (no HTML, though is permited), version control, author tracking, multi-language support, etc.

Getting started

One of the magic things that make Elephant easy to use and powerful is the structure is build on. When Elephant takes control you are always in a Context . As for creating web pages, you'll need to understand what a context is and its relation with other contexts.

Context

A context is a web page. We didn't called web page because it seemed too simple for such a marvellous creature, but is nothing more than a web page. Anyway, as to continue making things complicated where they should be easy, we will call this web page a context.

Construction

Context builds up with two different kinds of elements. The actual elements and the layout elements. Despite their names, they respond to a very usual situation. You know how your site should look and don't want to repeat the design for each page. These elements are the layout elements. They are defined at top level, in site's home, and inherited for lower levels.


The image shows what the layout elements are, surrounding the actual content, which is not more than the actual element mentioned above.

By default, the actual element is HTML content, text, written with the special Elephant syntax.

Pages

Elephant sites allow creating as many contexts as you might require, remember a context is equivalent to a page. There is no other limit than the available space and your imagination. Creating pages involve thinking where you want to contruct them. To understand this you might think of your site as a tree. The trunk is the home page. First branches will be home its children and so on. Your tree can have many branches, Elephant will take care to make easy the navigation among them.

Attributes

Each context has several attributes that define its behaviour.

Attribute

Description

Order

Controls context ordering. It's an alphanumeric value, write numbers with leading zeros. ex. 001, 002 and so on.

Show in navigators

When selected the context is shown in navigators. It's useful when you have pages you don't want them accessed directly.

Show always

Even if the context is protected by a role, it will show in navigators. With this attribute set to true, a context will force visitors to login if they want to see the content.

Context role

Protects a context using user's permissions, roles or syndications. See Security .

Language

Coma separated list of languages used in this context. This value is inherited from parent context. If you set a language in root context, web site's home, will be used in the whole site, unless you override the value.

Redirection

Redirects to a different context when context is selected. If the path contains a full URL, the redirection will also inform the browser is being redirected. A path equal to http://# will be interpreted as an empty content with children.

Not to index / Not to follow

Values passed to search engines. Not to index tells not to keep the page indexed. Not to follow tells not to follow page's links.

Show print version option

When checked, shows a link to printer version.

Print version will render current page and all its descendants in reading order.

Show control version system

When checked, shows different versions of this page, including language, author and modification date.

Name

Context's name. Yoy may need to specify as many names as languages the context has. Name is what appears on menus, tabs, popup menus, etc.

Repository

When you want to show an image in a page, you need first to upload the image file. Where this file goes to it's called repository. Each context has its own repository. So, you have as many repositories as web pages. Each one with its own structure and content.

Cached values

Elephant maintains different caches to increase performance.

The Tools menu has an option that allows to reset these caches. Also forces the sitemap generation. Use with caution.

Content

Elephant provides a DefaultElement with edition capabilities. The editor uses the Wiki syntax to ensure a correct HTML result. Also, the wiki syntax, used as is with no classes and styles, is compliant with the email templates. Write once, use everywhere.

The elements at play

This graphic shows the elements that provide content for a web page or an email. By changing the templates root, the marker will generate different layouts. The wiki syntax ensures that the content fits into these templates.


See a complete reference of the available Macros

Templates' root

As noticed above, email templates are not the same than web templates. The main reason is because for web templates we have a complete framework whereas email templates have only a subset. Email clients, or readers, limit the number of CSS and JavaScript features available, making emails a complete different world.

To understand how Elephant deals with those differences, see the button template for an email and for the web.

Email button

<table border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td align="center" bgcolor="${bgcolor}" style="-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;">
      <a href="${link}" style="padding:10px 20px;display:block;text-decoration:none;border:0;font-weight:bold;font-size:15px;color:${color};background:${bgcolor};border:1px solid ${bgcolor};-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;line-height:17px;" class="button_link">
        ${text}
      </a>
    </td>
  </tr>
</table>

Web button

<a href="${link}" class="ui primary button">
  ${text}
</a>
Layouts

Elephant renders its contexts using layouts.

Template layout

Template layout is the new default layout for new Elephant versions. In order to make template layout compliant with current table layout versions, template layout makes use of different CSS files.

Table layout

Template layout

default-site.css

default-template-site.css

default-navigator.css

default-template-navigator.css

default-navigator-site.css

default-template-navigator-site.css

To activate templates for the whole site, use the template element under layout on the root context. For local templates, those applying to the context where are defined, use the local-template element.

Typical configuration is:

context.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<elephant-context lang="_en">
  <i18n>
    <name>
      <_en>Home</_en>
    </name>
  </i18n>
  <layout>
    <local-template name="landing"/>
    <template name="web"/>
  </layout>
</elephant-context>

webTemplate.html

<#include "header.html"/>

<div class="webBody" style="width:100%;background:#fff;">
  <div style="width:1000px;margin:auto;">
    <table style="width:100%">
      <tr style="vertical-align:top;">
        <#if nav.hasOptions(2,1,true)>
          <td style="width:25%;padding-top:15px;padding-right:15px;">
            ${nav.drawOptions(false,2,1,true)}
          </td>
        
        <td style="padding-top:15px;">
          <#if traversal>${nav.drawTraversal(true)}
          ${body.startConstruction()}
          <#if traversal>${nav.drawTraversal(false)}
          <#if printVersion??>${printVersion}
          <#if fileVersion??>${fileVersion.render()}
        </td>
      </tr>
    </table>
  </div>
</div>

<#include "footer.html"/>

header.html

<div class="header">
  <div style="width:1000px;margin:auto;">
    <table cellpadding="0" cellspacing="0" style="width:100%;height:40px;">
      <tr style="vertical-align:bottom;">
        <td>
          <a href="${constructor.rootWebPath}">
            <img src="${constructor.rootWebPath}/_internal/repository/logo.png"/>
          </a>
        </td>
        <td>
          ${nav.drawTabulator(1)}
        </td>
      </tr>
    </table>
  </div>
</div>
<div style="width:100%;margin-top:43px;">
  <div style="width:1000px;margin:auto;">
    ${nav.drawLocation()}
  </div>
</div>

footer.html

<div class="footer">
  <div style="width:1000px;margin:auto;">
    <table cellpadding="5">
      <tr style="vertical-align:top;">
        <td>${webmap.draw(3)}</td>
        <td width="20%"><#include "credentials.html"/></td>
      </tr>
    </table>
  </div>  
</div>

landingTemplate.html

<#include "header.html"/>

${body.startConstruction()}

<#include "footer.html"/>
Table layout

Table layout was the out-of-the-box configured layout from the beginning. Table layout creates an HTML table as the main container. Uses context/_internal/context.xml files to read the configuration. Tipical web root configuration is:

<?xml version="1.0" encoding="ISO-8859-1"?>

<elephant-context lang="_en">
  <i18n>
    <name>
      <_en>Home</_en>
    </name>
  </i18n>
  <layout>
    <element id="20060126192226678" align="top" type="default-container" container="true">
      <attrib name="type" value="header"/>
      <element id="20060126192226654" align="top" type="default-element">
      </element>
      <element id="20060126192226679" align="left" type="default-navigator">
        <attrib name="type" value="tabulator"/>
        <attrib name="level" value="1"/>
      </element>
    </element>
    <element id="20060126192226680" align="top" type="default-container" container="true">
      <attrib name="type" value="locator"/>
      <element id="20060126192226681" align="left" type="default-navigator">
        <attrib name="type" value="location"/>
      </element>
    </element>
    <element id="20060126192226682" align="left" type="default-container" container="true">
      <attrib name="type" value="container"/>
      <attrib name="width" value="180px"/>
      <element id="20060126192226683" align="top" type="default-navigator">
        <attrib name="type" value="options"/>
        <attrib name="level" value="2"/>
        <attrib name="children" value="2"/>
        <attrib name="show-current" value="true"/>
      </element>
    </element>
    <element id="20060126192226685" align="bottom" type="default-container" container="true">
      <attrib name="type" value="footer"/>
      <element id="20060126192226684" align="top" type="default-element">
        <attrib name="type" value="footer-inside"/>
      </element>
    </element>
  </layout>
</elephant-context>
Templates

Elephant uses ElephantMarker as the template parser. It's based on FreeMarker and adds the necessary configuration to operate with the Elephant IConstructor.

ElephantMarker uses a template root to locate templates. The template root is configured in the site.xml file.

Specialized frameworks

By default, ElephantMarker uses Semantic UI as a HTML & CSS framework. The template defaults to templates-semantic.

Templates are used at different levels to generate the final HTML, CSS and JavaScript.

Level

Usage

Root

Generate the HTML frame, including html, head and body tags. The template child is elephant.

Layout

Generate the page layout within body tag. This includes de web page header and its menus, the sidebar, responsive controls and contextual menus. The template child is layout.

Entities

Generate the layout for single entities. Usually entities templates are called by content iterators and entities made available to the template using variables. The template child use to have the entity name (ex. contact, dossier, document...).

Naming templates

The conventional way ElephantMarker uses to locate a template is by searching [templates_root]/[context]/[name]Template.html. The context variable is the child explained is the above table and helps to differentiate templates usage. Name is the actual template name and the marker appends Template.html.

This convention allows the overriding system Overriding templates .

Overriding templates

To understand the override mechanism used by the Elephant library you need to understand how templates are found. By default, ElephantMarker searches templates in /WEB-INF/elephant/[templates_root]/[context]/[name]Template.html, being context and name variables. templates_root is defined in /elephant/conf/site.xml configuration file.

Provided the templates_root is templates-semantic, a context and a name, Elephant will first search /WEB-INF/elephant/templates-semantic/site/[context]/[name]Template.html and, if no file existed, in /WEB-INF/elephant/templates-semantic/[context]/[name]Template.html.

Conventional templates

This is a list of commonly used content templates. Does not reflect the actual number of templates available for layouts, entities and email senders.

Currently available templates
Banners

The banner templates use a JSON source as banner data. Its form is:

The most common way to use it would be the marker-jason macro {@marker-json:tmpl-root:template:repository-file}, where tmpl-root is files, template can be bannerImage or bannerCard, and repository-file would be the location of the JSON file.

In the example will be using the banners.json file, located at this context's repository.

With {@marker-json:files:bannerImage:*/banners.json} you get:

Some header
Sub header

Lorem Ipsum is simply dummy text of the printing and typesetting industry...

Some other header
Some header support

Lorem Ipsum is simply dummy text of the printing and typesetting industry...

With {@marker-json:files:bannerCard:*/banners.json} you get:

Some header
Sub header
Lorem Ipsum is simply dummy text of the printing and typesetting industry...
Some other header
Some header support
Lorem Ipsum is simply dummy text of the printing and typesetting industry...

JSON file

{
  "name" : "slider",
  "minHeight" : "400px",
  "banners" : [
    {
      "imageLink" : "banners/_internal/repository/elementals.jpg",
      "background" : "#00000066",
      "color" : "#fff",
      "header" : "Some header",
      "meta" : "Sub header",
      "description" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry...",
      "action" : "Visit...",
      "link" : "#",
      "subaction" : "Or visit...",
      "sublink" : "#"
    },
    {
      "imageLink" : "banners/_internal/repository/emotion-ocean.jpg",
      "background" : "#ffffff66",
      "color" : "#000",
      "header" : "Some other header",
      "meta" : "Some header support",
      "description" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry...",
      "action" : "Visit...",
      "link" : "#"
    }
  ]
} 
Users

Elephant Users is based on the BrightSide Contacts module. A user is always a contact.

Contacts becoming users

Any contact can be transformed into a user, by giving a connector called Email. Users with this connector can authenticate into the User area and manage their own profile.

If enabled, the User area can also admit new sign-ups. The sign-up process validates the user email. Registered users get the Social Group Guest, with no permissions attached. Administrators receive an email and push notification with the new user name and email.

User's permissions are controlled by the Elephant Security System, explained in Security .

Complex names

ComplexName property gives the choice of treating users with a chain of formality. The API also offers a guessing option, using the European way of treatment, excluding titles and gender.

The non-said rule of We Are All Equal

Turró.Org applications enforce the rule of We Are All Equal, and avoids saving data as titles, gender, race and religion. Users are measured only by the type of involvement and the degree of engagement.

Complex name properties

Property

Description

Required

Can be guessed

Full

Is the full name. For entities, this should be the unique given value. Things like the Trade Name, are managed in the entity profile or by connectors like TradeName.

Friendly

Should be the friendly way to address the user. It's guessed to be the first name.

Formal

Should be the more formal way to address the user. It's guessed to be the first encountered surname.

Complex name return

ComplexName will always return a value, despite the property being empty.

Property

Returns

Name

The full name.

Friendly

The Friendly value. Fallback to the Formal value.

Formal

The Formal value. Fallback to the Name value.

Profile management

In Elephant nomenclature, a user is a contact with an email and able to sign in. Users can also sign up, if the website allows it (has a sign up context)

Automated relations

Elephant gives the user the opportunity to enrich his profile, while getting more permissions. Any user can send a request for a new relation, and acquire permissions once validated. There are some limitations, though, to make sure a single user has not contradictory roles (ex. student and docent)

Profile completion

When configured, the profile completion gives the user some tips about completing the profile. Tips may vary, depending on the relation type and what has already been completed.

Using user's profile, any user can add relations to existing companies or learning centers. Relations created by users are moderated, administrators must validate all proposed relations.

When a user has no relations, it is offered several options, depending on the existence of companies or learning centers. If none of them are in your contacts database, nothing will be offered.

The differences among these relations, are:

Type Description
Professional Has a current relation with a company.
Student Has a current non-responsible relation (staff) with a learning center.
Docent Has a current responsible relation (not staff) with a learning center.

After a relation request has been sent, the profile will update the status.

Notifications

Recipient Description
User Receives a notification when the relation is accepted.
Admins Depending on the relation status, the subject can be:
  • Modified : Relation when validated and modified.
  • Not validated : Relation when not validated and created/modified.
  • Not validated : Docent relation when not validated and created/modified.
Not validated : Docent relation
This notification requires a different procedure. The reason are the special permissions a docent acquires. Usually, the flow is:
  • Contact the user, to validate that is a docent.
  • If true, validate the request and edit the contact, to change the relation type (other than staff)
Components
Activity catchers

Activity catchers are mainly related to user activity or participation. Their purpose is to isolate modules from contacts, without losing the ability to react on changes.

Catchers are lists of activities. Activities can be entity participations. Each activity use to contain a user participation. For instance, a user will participate in an issue if has a role within the issue, but not if just commented or participates in issue's dossier.

Assistants

Assistants are users that do not actually participate in an entity, but have entity permissions to assist. An example of assistants is the add by entity combobox. Deep assistants are those who do not assist directly in the related entity, but do indirectly in a parent oriented hierarchy.

Last activity centered

The Elephant system also provides last activity catchers. The activity source might be known or at first unknown. Known sources are data collected from actual entities. The unknown source is basically the log system, in which user activities are registered.


Collected activity

Agreements

The Agreements API help web administrators to deal with legal issues regarding data protection, terms and conditions.

Why an agreement API?

You may need to warn the user about things like:

The Agreements API provides a lightweight method to store when a user accepts what the agreement proposes. In order to achieve this, there are some restrictions you should be aware of:

How does it work?

First of all, you create an agreement. The main fields are:

Field

Usage

Title

Title of the agreement. Is what it shows in listings and the subject in notifications.

Text

Body of the agreement. Accepts del {site} macro, replaced by web site name.

Required to notify

Describes this agreement as required when sending email notifications to users.

Required to access

Describes this agreement as required to operate for authenticated users.

Peremptory

Will force sending a Pending signature notification each time encounters a failed intent, up to ten notifications.

Action

Defines de agreement as related to a user action. Those actions are reported by the modules (see module-actions). When unknown, let it blank.

Social groups

Defines de agreement for specific social groups. The input requires comma separated social group id's (as in Grups socials ). When unknown, let it blank.

What final users will see?

When the required signature forbids sending notifications, a Pending signature notification will be sent. The user will be able to Accept or Decline the agreement from the notification email.

When the required signature forbids operating, the user will be redirected to the agreement, expecting to Accept or Decline the agreement.

The agreement flow


Notifications

Modules chose whether to treat users as Observers or Participants.

Agreement

Not set

Accepted

Declined

Wants
Participant

Send

Send

Don't send

May want
Observer

Don't send

Send

Don't send

Module

Recipients

Sendables

Since sendables are configured by administrators, recipients are manually selected. Those who explicitly declined to receive notifications, despite being selected, will not receive any email.

Publications

Only those who explicitly accepted to receive notifications and are category subscribers, will receive the email.

Dossiers

Only those who explicitly declined to receive notifications, will not receive the email.

Newsletter

Each Newsletter decide how to treat the subscribers.

The generic rule to follow explains itself better in terms of participation. When a user participates in a module, the participation will prevail to the not signed status.

Publication category subscriptors are not considered participants, but observers. In this case, not signed prevails.

Module actions

API provided by modules

Key for the action

Marketplace new entry

marketplace-new

New project idea

project-new

New challenge

challenge-new

New response to challenge

challenge-response-new

Calendars

Elephant Calendars are a full set of events, generated from application entities. Unlike Activity, calendars also contain future events and a relevant subset of the activity.

Calendars intention is to gather, in a temporal element, information about entities, display a summary and a link to the entity.

Calendar content

Calendars can be configured to show different content, and related-content. To understand what to expect from a Calendar, depending on the context where it's shown, see the tables below:

Type Description
Non-related Displays application-wide events, as configured (See Calendar entities)
Entity-related Displays entity-related events. For instance, if it's a category calendar, it will only show events related to that category.
Type Description
Public Displays public events. Includes Non-related and Entity-related calendars.
With target Displays public events, plus those specific to the target user, usually the one currently authenticated. Includes Non-related and Entity-related calendars.

Calendar entities

Each Non-related Calendar can be configured to display certain entities. The entities that can be configured are:

Entity Description
Publications Exposes publications as events using publication date.
Issues Exposes issues as events using modification date.
Convocations Exposes convocations as events using call date.
Services Exposes services as events using start date.

Calendar popups

Calendar popups are user conscious, showing only what is allowed to see by the target user. If allowed, users can see full detail in the user area, or the corresponding context if configured. For admins, when appropriate, also a link to the application.

Standard calendars provided

Some calendars are provided out-of-the-box, as part of the application functionality.

Calendar Description
User calendar Available at the user area, on Networking -> Calendar. This calendar is Non-related and With-target.
  • Provides all the entities in a single place.
  • Includes a link to integrate the calendar events into another calendar software.
Category calendar Part of projects, Entity-related to the selected category or all.
Noticeboard Part of the Noticeboard, Entity-related to services.
Public calendar Non-related and usually part of the landing page.

Calendar for admins

Admins have full access to calendar events using BaaS -> Session -> Calendar.

Colors

Elephant Colors API provides some useful methods for manipulating colors. The main goal, though, is finding the adequate font color, based on a solid background. The API can be accessed within templates using the helper object helper.color([name|hexvalue|rgb[a]()]). This function returns a Color object with these methods:

Method

Description

css()

The color in a CSS format #RRGGBB

font()

A Color object representing the adequate font color.

bw()

A gray-scale Color object representing the color.

Default palette

This palette is provided as color choosing helper. Any other color can be used with the Elephant Colors API. The palette uses the API to choose the adequate font color using the Color object:

// assign color using color = helper.color('name or hexvalue or rgb[a]()')

<div style="background-color:${color.css()};color:${color.font().css()}">
  ${color_name} (${color.css()})
</div>
Black (#000000)
Oil (#3B3131)
DarkCoffee (#3B2F2F)
LightBlack (#454545)
BlackCow (#4C4646)
GrayDolphin (#5C5858)
CarbonGray (#625D5D)
RedBlood (#660000)
DimGray (#696969)
SonicSilver (#757575)
PlatinumGray (#797979)
Gray (#808080)
Maroon (#800000)
DarkRed (#8B0000)
RoseDust (#997070)
CrimsonRed (#990000)
Brown (#A52A2A)
DarkGray (#A9A9A9)
FireBrick (#B22222)
RosyBrown (#BC8F8F)
Silver (#C0C0C0)
IndianRed (#CD5C5C)
PlatinumSilver (#CECECE)
LightGray (#D3D3D3)
Gainsboro (#DCDCDC)
LightCoral (#F08080)
WhiteSmoke (#F5F5F5)
White (#FFFFFF)
Snow (#FFFAFA)
Red (#FF0000)
LoveRed (#E41B17)
LightRed (#FFCCCB)
ValentineRed (#E55451)
ChilliPepper (#C11B17)
PinkCoral (#E77471)
BeanRed (#F75D59)
PeachPink (#F98B88)
DeepRose (#FBBBB9)
KhakiRose (#C5908E)
CherryRed (#C24641)
SilverPink (#C4AEAD)
LightRose (#FBCFCD)
Rose (#E8ADAA)
RubyRed (#F62217)
Puce (#7F5A58)
LavaRed (#E42217)
PinkBubbleGum (#FFDFDD)
RosyPink (#B38481)
FireEngineRed (#F62817)
OldBurgundy (#43302E)
TomatoSauceRed (#B21807)
NeonRed (#FD1C03)
MistyRose (#FFE4E1)
Salmon (#FA8072)
RoseGold (#ECC5C0)
GrayBrown (#3D3635)
SalmonPink (#FF8674)
Grapefruit (#DC381F)
GoldPink (#E6C7C2)
Scarlet (#FF2400)
Tomato (#FF6347)
Chestnut (#954535)
BlackBean (#3D0C02)
ShockingOrange (#E55B3C)
ChestnutRed (#C34A2C)
Midnight (#2B1B17)
WesternCharcoal (#49413F)
CloudyGray (#6D6968)
SmokeyGray (#726E6D)
AlienGray (#736F6E)
BloodNight (#551606)
CopperRed (#CB6D51)
SunriseOrange (#E67451)
AshGray (#666362)
DarkSalmon (#E9967A)
Rust (#C36241)
BasketBallOrange (#F88158)
Coral (#FF7F50)
OrangeRed (#FF4500)
Granite (#837E7C)
LightSalmon (#FFA07A)
BrightOrange (#FF5F1F)
BloodRed (#7E3517)
LightSalmonRose (#F9966B)
OrangeSalmon (#C47451)
LightCopper (#DA8A67)
Tangerine (#E78A61)
Sepia (#7F462C)
Sangria (#7E3817)
Sienna (#A0522D)
Mahogany (#C04000)
MangoOrange (#FF8040)
ConstructionConeOrange (#F87431)
PastelBrown (#B1907F)
RedGold (#EB5406)
HalloweenOrange (#E66C2C)
PaleSilver (#C9C0BB)
UnbleachedSilk (#FFDDCA)
DarkSienna (#8A4117)
RedFox (#C35817)
IndianSaffron (#FF7722)
PapayaOrange (#E56717)
PetraGold (#B76734)
NeonOrange (#FF6700)
PumpkinOrange (#F87217)
BakersBrown (#5C3317)
Coffee (#6F4E37)
SeaShell (#FFF5EE)
PastelOrange (#F8B88B)
SaddleBrown (#8B4513)
Chocolate (#D2691E)
DesertSand (#EDC9AF)
DeepPeach (#FFCBA4)
DarkGold (#AA6C39)
DarkAlmond (#AB784E)
Taupe (#483C32)
BrownBear (#835C3B)
SandyBrown (#F4A460)
CarrotOrange (#F88017)
PeachPuff (#FFDAB9)
LightBrown (#B5651D)
TigerOrange (#C88141)
BrownSand (#EE9A4D)
Copper (#B87333)
BrownSugar (#E2A76F)
Peru (#CD853F)
Bronze (#CD7F32)
DarkBrown (#654321)
SepiaBrown (#704214)
Sedona (#CC6600)
DarkWhite (#E1D9D1)
Linen (#FAF0E6)
LightOrange (#FED8B1)
DarkBeige (#9F8C76)
Bisque (#FFE4C4)
Rice (#FAF5EF)
CamelBrown (#C19A6B)
DarkBisque (#B86500)
DarkOrange (#FF8C00)
Sandstone (#786D5F)
BurlyWood (#DEB887)
RedDirt (#7F5217)
Tan (#D2B48C)
AntiqueWhite (#FAEBD7)
YellowOrange (#FFAE42)
Cantaloupe (#FFA62F)
DarkBronze (#804A00)
MilkChocolate (#513B1C)
NavajoWhite (#FFDEAD)
BlanchedAlmond (#FFEBCD)
Wood (#966F33)
DeerBrown (#E6BF83)
MacaroniandCheese (#F2BB66)
Champagne (#F7E7CE)
OffWhite (#F8F0E3)
PapayaWhip (#FFEFD5)
LightFrenchBeige (#C8AD7F)
Moccasin (#FFE4B5)
Orange (#FFA500)
Wheat (#F5DEB3)
OldLace (#FDF5E6)
Peach (#FFE5B4)
Cinnamon (#C58917)
SoftIvory (#FAF0DD)
Mocha (#493D26)
Iridium (#3D3C3A)
GrayGoose (#D1D0CE)
Platinum (#E5E4E2)
GoldenSilk (#F3E3C3)
FloralWhite (#FFFAF0)
SchoolBusYellow (#E8A317)
Beer (#FBB117)
Caramel (#C68E17)
WhiteChocolate (#EDE6D6)
BeeYellow (#E9AB17)
DarkGoldenRod (#B8860B)
Saffron (#FBB917)
GoldenRod (#DAA520)
OrangeGold (#D4A017)
BoneWhite (#F9F6EE)
ChromeGold (#FFCE44)
OakBrown (#806517)
NeonGold (#FDBD01)
BulletShell (#AF9B60)
BronzeGold (#C9AE5D)
PearlWhite (#F8F6F0)
Sand (#C2B280)
DarkBlonde (#F0E2B6)
AshWhite (#E9E4D4)
MetallicGold (#D4AF37)
DeepYellow (#F6BE00)
GoldenBlonde (#FBE7A1)
MustardYellow (#FFDB58)
EggShell (#FFF9E3)
ArmyBrown (#827B60)
CookieBrown (#C7A317)
Hazel (#8E7618)
Cornsilk (#FFF8DC)
BrightGold (#FDD017)
GoldenBrown (#EAC117)
Vanilla (#F3E5AB)
FallLeafBrown (#C8B560)
SunYellow (#FFE87C)
LightGold (#F1E5AC)
CardboardBrown (#EDDA74)
Gold (#FFD700)
RubberDuckyYellow (#FFD801)
Blonde (#FBF6D9)
BoldYellow (#F9DB24)
DarkMoccasin (#827839)
Brass (#B5A642)
TanBrown (#ECE5B6)
DirtyWhite (#E8E4C9)
GoldenYellow (#FFDF00)
AntiqueBronze (#665D1E)
GingerBrown (#C9BE62)
Khaki (#F0E68C)
LemonChiffon (#FFFACD)
CornYellow (#FFF380)
HarvestGold (#EDE275)
KhakiGreen (#8A865D)
PaleGoldenRod (#EEE8AA)
MilleniumJade (#93917C)
BananaYellow (#F5E216)
Sage (#BCB88A)
DarkYellow (#8B8000)
DarkKhaki (#BDB76B)
CanaryYellow (#FFEF00)
CreamWhite (#FFFDD0)
OliveGreen (#BAB86C)
PastelYellow (#FAF884)
Olive (#808000)
BattleshipGray (#848482)
GrayCloud (#B6B6B4)
Beige (#F5F5DC)
LightGoldenRodYellow (#FAFAD2)
Cotton (#FBFBF9)
LightWhite (#FFFFF7)
WhiteGold (#FFFFF4)
Ivory (#FFFFF0)
LightYellow (#FFFFE0)
Cream (#FFFFCC)
Parchment (#FFFFC2)
NeonYellow (#FFFF33)
Yellow (#FFFF00)
NeonYellowGreen (#DAEE01)
YellowGreenGrosbeak (#E2F516)
AcidGreen (#B0BF1A)
AvocadoGreen (#B2C248)
ArmyGreen (#4B5320)
VenomGreen (#728C00)
PistachioGreen (#9DC209)
ChameleonGreen (#BDF516)
FernGreen (#667C26)
OrganicBrown (#E3F9A6)
SaladGreen (#A1C935)
TeaGreen (#CCFB5D)
SlimeGreen (#BCE954)
MilitaryGreen (#4E5B31)
ChromeWhite (#E8F1D4)
IguanaGreen (#9CB071)
DullGreenYellow (#B1FB17)
OliveDrab (#6B8E23)
YellowGreen (#9ACD32)
DarkOliveGreen (#556B2F)
SageGreen (#848B79)
GreenYellow (#ADFF2F)
AloeVeraGreen (#98F516)
GreenOnion (#6AA121)
YellowLawnGreen (#87F717)
HummingbirdGreen (#7FE817)
Chartreuse (#7FFF00)
LawnGreen (#7CFC00)
AlienGreen (#6CC417)
CamouflageGreen (#78866B)
GreenPeas (#89C35C)
SeaweedGreen (#437C17)
BrightGreen (#66FF00)
GreenSnake (#6CBB3C)
DollarBillGreen (#85BB65)
DarkForestGreen (#254117)
PeaGreen (#52D017)
NebulaGreen (#59E817)
EmeraldGreen (#5FFB17)
GreenApple (#4CC417)
DarkLimeGreen (#41A317)
ShamrockGreen (#347C17)
GreenPepper (#4AA02C)
HazelGreen (#617C58)
FrogGreen (#99C68E)
GreenThumb (#B5EAAA)
LightJade (#C3FDB8)
DinosaurGreen (#73A16C)
JungleGreen (#347C2C)
DarkGreen (#006400)
Green (#008000)
ForestGreen (#228B22)
GunmetalGray (#8D918D)
DarkSeaGreen (#8FBC8F)
LimeGreen (#32CD32)
PastelGreen (#77DD77)
LightGreen (#90EE90)
LightRoseGreen (#DBF9DB)
PaleGreen (#98FB98)
HoneyDew (#F0FFF0)
MintGreen (#98FF98)
Lime (#00FF00)
MediumForestGreen (#347235)
DeepEmeraldGreen (#046307)
KellyGreen (#4CC552)
NeonGreen (#16F529)
StoplightGoGreen (#57E964)
JadeGreen (#5EFB6E)
HunterGreen (#355E3B)
FallForestGreen (#4E9258)
ParrotGreen (#12AD2B)
PineGreen (#387C44)
CloverGreen (#3EA055)
AlgaeGreen (#64E986)
ZombieGreen (#54C571)
DragonGreen (#6AFB92)
Emerald (#50C878)
LimeMintGreen (#36F57F)
SeaGreen (#2E8B57)
MediumSeaGreen (#3CB371)
SpringGreen (#00FF7F)
MintCream (#F5FFFA)
EarthGreen (#34A56F)
MetallicGreen (#7C9D8E)
MagicMint (#AAF0D1)
MediumSpringGreen (#00FA9A)
Mint (#3EB489)
DarkMint (#31906E)
Deep-SeaGreen (#306754)
MediumAquaMarine (#66CDAA)
Dull-SeaGreen (#4E8975)
Jade (#00A36C)
Aquamarine (#7FFFD4)
BlueGreen (#7BCCB5)
LightAquamarine (#93FFE8)
SeaTurtleGreen (#438D80)
Turquoise (#40E0D0)
SeafoamGreen (#3EA99F)
TiffanyBlue (#81D8D0)
AquamarineStone (#348781)
LightSeaGreen (#20B2AA)
MediumTurquoise (#48D1CC)
TealGreen (#00827F)
DeepTeal (#033E3E)
MediumTeal (#045F5F)
Teal (#008080)
DarkCyan (#008B8B)
Deep-Sea (#3B9C9C)
CyanOpaque (#92C7C7)
NorthernLightsBlue (#78C7C7)
Jellyfish (#46C7C7)
PaleBlueLily (#CFECEC)
PaleTurquoise (#AFEEEE)
Azure (#F0FFFF)
LightCyan (#E0FFFF)
LightSlate (#CCFFFF)
BrightCyan (#0AFFFF)
Aqua (#00FFFF)
BlueZircon (#57FEFF)
Celeste (#50EBEC)
DeepTurquoise (#48CCCD)
TronBlue (#7DFDFE)
ElectricBlue (#9AFEFF)
BlueLagoon (#8EEBEC)
GreenishBlue (#307D7E)
DarkTurquoise (#00CED1)
CadetBlue (#5F9EA0)
GrayishTurquoise (#5E7D7E)
MacawBlueGreen (#43BFC7)
BlueDiamond (#4EE2EC)
BrightTurquoise (#16E2F5)
BlueHosta (#77BFC7)
PowderBlue (#B0E0E6)
BeetleGreen (#4C787E)
BlueTurquoise (#43C6DB)
BlueMossGreen (#3C565B)
DarkSlateGray (#25383C)
LightBlue (#ADD8E6)
DeepSkyBlue (#00BFFF)
CoralBlue (#AFDCEC)
RobinEggBlue (#BDEDFF)
BabyBlue (#95B9C7)
SkyBlue (#87CEEB)
Gunmetal (#2C3539)
LightSteelBlue (#B0CFDE)
ButterflyBlue (#38ACEC)
MiddayBlue (#3BB9FF)
IronGray (#52595D)
BlueIvy (#3090C7)
GulfBlue (#C9DFEC)
ColumbiaBlue (#87AFC7)
MetallicSilver (#BCC6CC)
JeansBlue (#A0CFEC)
LightSkyBlue (#87CEFA)
GlacialBlueIce (#368BC1)
LightDayBlue (#ADDFFF)
CharcoalBlue (#36454F)
Water (#EBF4FA)
BlueKoi (#659EC7)
DarkBlueGrey (#29465B)
DaySkyBlue (#82CAFF)
MarbleBlue (#566D7E)
DenimBlue (#79BAEC)
SteelBlue (#4682B4)
AliceBlue (#F0F8FF)
CrystalBlue (#5CB3FF)
Iceberg (#56A5EC)
SilkBlue (#488AC7)
DodgerBlue (#1E90FF)
Deep-SeaBlue (#123456)
NardoGray (#686A6C)
SlateGray (#708090)
LightSlateGray (#778899)
WindowsBlue (#357EC7)
NeonBlue (#1589FF)
BlueJay (#2B547E)
BrightNavyBlue (#1974D2)
BlueGray (#98AFC7)
BlueDress (#157DEC)
PastelBlue (#B4CFEC)
SeaBlue (#C2DFFF)
BlueEyes (#1569C7)
SlateGraniteGray (#657383)
WhiteBlue (#DBE9FA)
RatGray (#6D7B8D)
BlueAngel (#B7CEEC)
HeavenlyBlue (#C6DEFF)
JetGray (#616D7E)
CornflowerBlue (#6495ED)
MistBlue (#646D7E)
BlueberryBlue (#0041C2)
SilverWhite (#DADBDD)
SkyBlueDress (#6698FF)
RomanSilver (#838996)
LightPurpleBlue (#728FCE)
AzureBlue (#4863A0)
DarkSlate (#2B3856)
OceanBlue (#2B65EC)
BlueRibbon (#306EFF)
BalloonBlue (#2B60DE)
SapphireBlue (#2554C7)
LapisBlue (#15317E)
RoyalBlue (#4169E1)
SlateBlueGrey (#737CA1)
BlueOrchid (#1F45FC)
CobaltBlue (#0020C2)
NightBlue (#151B54)
PurpleNavy (#4E5180)
DenimDarkBlue (#151B8D)
PastelLightBlue (#D5D6EA)
LavenderBlue (#E3E4FA)
VeryPeri (#6667AB)
MidnightBlue (#191970)
Navy (#000080)
DarkBlue (#00008B)
NewMidnightBlue (#0000A0)
EarthBlue (#0000A5)
MediumBlue (#0000CD)
PeriwinklePurple (#7575CF)
Lavender (#E6E6FA)
GhostWhite (#F8F8FF)
Periwinkle (#CCCCFF)
BrightBlue (#0909FF)
Blue (#0000FF)
DeepPeriwinkle (#5453A6)
LightSlateBlue (#736AFF)
BlueLotus (#6960EC)
CanaryBlue (#2916F5)
BlueWhale (#342D7E)
Grape (#5E5A80)
SlateBlue (#6A5ACD)
DarkSlateBlue (#483D8B)
MediumSlateBlue (#7B68EE)
CrocusPurple (#9172EC)
PaleLilac (#DCD0FF)
LightPurple (#8467D7)
PurpleMimosa (#9E7BFF)
PurpleSageBush (#7A5DC7)
PurpleHaze (#4E387E)
MediumPurple (#9370DB)
LovelyPurple (#7F38EC)
AztechPurple (#893BFF)
PurpleAmethyst (#6C2DC7)
PurpleMonster (#461B7E)
LavenderPurple (#967BB6)
PurplePlum (#8E35EF)
RebeccaPurple (#663399)
BlueViolet (#8A2BE2)
BrightGrape (#6F2DA8)
ClematisViolet (#842DCE)
Indigo (#4B0082)
BrightPurple (#6A0DAD)
JasminePurple (#A23BEC)
PurpleDaffodil (#B041FF)
PurpleViolet (#8D38C9)
PurpleIris (#571B7E)
Mauve (#E0B0FF)
NeonPurple (#9D00FF)
MilkWhite (#FEFCFF)
DarkOrchid (#9932CC)
DarkViolet (#9400D3)
TyrianPurple (#C45AEC)
HeliotropePurple (#D462FF)
RichLilac (#B666D2)
PurpleFlower (#A74AC7)
PurpleWhite (#DFD3E3)
BrightLilac (#D891EF)
PurpleJam (#6A287E)
MediumOrchid (#BA55D3)
FrenchLilac (#86608E)
DeepPurple (#36013F)
PeriwinklePink (#E9CFEC)
CottonCandy (#FCDFFF)
BlushPink (#E6A9EC)
BlossomPink (#F9B7FF)
PurpleDragon (#C38EC7)
DarkPurple (#4B0150)
CrimsonPurple (#E238EC)
BrightNeonPink (#F433FF)
OrchidPurple (#B048B5)
WisteriaPurple (#C6AEC7)
PurpleThistle (#D2B9D3)
PlumPurple (#583759)
ViolaPurple (#7E587E)
Purple (#800080)
DarkMagenta (#8B008B)
Lilac (#C8A2C8)
Thistle (#D8BFD8)
Plum (#DDA0DD)
Violet (#EE82EE)
FuchsiaPink (#FF77FF)
Fuchsia (#FF00FF)
Orchid (#DA70D6)
DeepMauve (#DF73D4)
PastelPurple (#F2A2E8)
PinkPlum (#B93B8F)
PastelViolet (#D291BC)
PlumVelvet (#7D0552)
MediumVioletRed (#C71585)
DarkCarnationPink (#C12283)
NeonPink (#F535AA)
DimorphothecaMagenta (#E3319D)
RoyalPink (#E759AC)
MagentaPink (#CC338B)
PurpleLily (#550A35)
DeepPink (#FF1493)
NeonHotPink (#FD349C)
Eggplant (#614051)
DarkRaspberry (#872657)
PlumPie (#7D0541)
DarkHotPink (#F660AB)
HotPink (#FF69B4)
BrightPink (#FF007F)
PurpleMaroon (#810541)
PinkCupcake (#E45E9D)
HotDeepPink (#F52887)
PinkLemonade (#E4287C)
VioletRed (#F6358A)
BashfulPink (#C25283)
PinkViolet (#CA226B)
BurntPink (#C12267)
RoguePink (#C12869)
CadillacPink (#E38AAE)
Pearl (#FDEEF4)
Raspberry (#E30B5D)
RaspberryPurple (#B3446C)
LavenderPinocchio (#EBDDE2)
PigPink (#FDD7E4)
RoseRed (#C21E56)
Night (#0C090A)
Charcoal (#34282C)
LavenderBlush (#FFF0F5)
VelvetMaroon (#7E354D)
PaleVioletRed (#DB7093)
TulipPink (#C25A7C)
CarnationPink (#F778A1)
BlushRed (#E56E94)
PurplePink (#D16587)
DarkPink (#E75480)
MauveTaupe (#915F6D)
DarkScarlet (#560319)
DullPurple (#7F525D)
BrightMaroon (#C32148)
ChocolateBrown (#3F000F)
RosePink (#E7A1B0)
RedPink (#FA2A55)
Crimson (#DC143C)
DonutPink (#FAAFBE)
LipstickPink (#C48793)
CarbonRed (#A70D2A)
Burgundy (#8C001A)
RedWhite (#F3E8EA)
Pink (#FFC0CB)
WatermelonPink (#FC6C85)
GrayWolf (#504A4B)
VampireGray (#565051)
LightPink (#FFB6C1)
BabyPink (#FAAFBA)
DeepRed (#800517)
DustyPink (#D58A94)
PinkDaisy (#E799A3)
BlackEel (#463E3F)
PinkBrown (#C48189)
RedWine (#990012)
BlackCat (#413839)
FlamingoPink (#F9A7B0)
PastelRed (#F67280)
Cranberry (#9F000F)
Rosy-Finch (#7F4E52)
Blush (#FFE6E8)
PastelPink (#FEA3AA)
FerrariRed (#F70D1A)
Vermilion (#7E191B)
SaffronRed (#931314)

Cookies

Elephant provides a cookie tracking mechanism to allow / decline types of cookies. The Cookie Management's goal is the ability to work in Elephant templates.

API calls in templates

helper.cookies.anyUnset()

Returns true if any configured cookie is unset.

helper.cookies.unset(type)

Returns true if the tracking cookie is unset.

helper.cookies.allow(type)

Returns true if the tracking cookie was accepted.

helper.cookies.decline(type)

Returns true if the tracking cookie was declined.

helper.cookies.createPost(type, accept)

Creates an asynchronous call for type to accept or decline depending on the boolean value of accept.

helper.cookies.createFormAction()

Creates the URL to use on form action attribute.

Simple management for analytics cookies

This example will show how to use the cookie tracking mechanism to allow or decline Google Analytics.

First, check if "track" type of cookies is unset and provide a user selection:

<#if helper.cookies.unset("track")>
  Would you allow Google Analytics?
  <a onclick='${helper.cookies.createPost("track", true)}'>Allow analytics</a>
  <a onclick='${helper.cookies.createPost("track", false)}'>Forbid analytics</a>
< /#if>
Now, if "track" type of cookies are allowed include Analytics:
<#if helper.cookies.allow("track")>
  #your Analytics code here
< /#if>

Using the default Elephant management for cookies

Elephant also provides a cookie management easy to activate. By default remains inactive due no configured cookies. To use the Elephant management create the file cookie-context.properties in /WEB-INF/elephant/conf folder. Edit in BaaS -> Tools -> Files -> Configuration -> Properties editor and write this:

track=lTrackCookie

This line will activate de track cookie, explained in the labels key lTrackCookie. Now, just put the tracking code like this:

<#if helper.cookies.allow("track")>
  // the tracking code, ex. Google Analytics
< /#if>

To control more kind of cookies, simply add more lines to the cookie-context.properties, being the key the cookies' type. For single language sites, is possible to explain the type directly in this file. Otherwise, use a label key and add the corresponding values to the labels-site[_lang] files (see BaaS -> Tools -> Files -> Configuration -> Resources)

Authenticated users will be able to modify their cookie preferences in the Session menu.

EWiki syntax
EWiki status
EWiki mantains its beta status, but now is widely available for all components.
Most old Wiki syntax can be used, see more info here Wiki syntax

Agnostic tags

You can use any HTML tag with EWiki, by simply enclosing the tag in brackets []. Also, you can convert any HTML tag to a Text container by adding -text to tag's name.

EWiki / Wiki syntax detection
The Wiki compiler detects if you are using EWiki features, and enables EWiki syntax. This may have side effects if you compile with EWiki activated, but content does not have any EWiki feature. These side effects may be visible the next time you edit this specific content.

Containers and Text containers

EWiki defines a Container as the content wrapped between [tag] and [/tag]. Containers are similar to normal HTML containers, with no especial treatment for new lines and empty lines.

A Text container, on the other hand, is the content wrapped between [tag-text] and [/tag-text]. Text containers treat new lines as line feeds, and empty lines as the beginning of a new paragraph.

Type Activation Usage Example
Container [tag]...[/tag] Banners, compositions, images... [div]...[/div]
Text container [tag-text]...[/tag-text] Normal text, messages, mixed content... [div-text]...[/div-text]
Text treatment
EWiki container type is -text at the start.

Mixed content

The directives related to changing the interpreter mode are no longer required. HTML can be embedded within wiki causing no extra formatting, except for text containers. Java code and XML can be included as blocks or inline using enclosing java and xml tags.

The HTML output
Despite allowing normal HTML, the compiler returns a well-formed result. Unclosed tags will be closed to ensure consistency.

Easy escaping characters

Any character can be escaped using the backslash. The exception are macro parameters, where compiler especial characters should be transformed to HTML entities.

Tags

To the EWiki compiler, tags are simple names that will be transformed into the HTML format. A [div] will be a <div>, without paying any further attention at the name div.

Parameters

Parameters differ from HTML. They are enclosed within parenthesis, separated by commas, using a colon to divide the attribute from its value. In the simple form, [div(font-weight:bold)] will be as HTML <div style="font-weight:bold">. At this point, doesn't seem to help much, but let's consider this: [div(font-weight:bold,margin:10px,class=supersized)], where the HTML will be <div style="font-weight:bold;margin:10px" class="supersized")>. First thing you may notice is that the compiler detected class as a separated attribute. Also, it's not necessary to create a style, nor include quotes.

CSS attributes
EWiki passes all attributes as CSS attributes, except for recognized names like class, href, etc. The later are expanded as HTML attributes.

Containers

As in HTML, EWiki tags are containers. You can add content within the container opening tag, and the closing tag.

EWiki introduces a major difference here, allowing any container to easily write text. By adding the suffix -text, EWiki containers create paragraphs by using simple line feeds. By default, the root container is a text container.

EWiki HTML Description
[div]
Hello

world
[/div]
Hello world
Behaves as normal HTML, where line feeds are white spaces.
[div-text]

Hello

world
[/div-text]

Hello

world

Creates HTML paragraphs for new lines.
Non-intrusive paragraphs
When in text containers, EWiki does not force a paragraph for the first block of text. This ensures not to create paragraphs inside macro containers, that may interfere with the expected result. To change this behavior for the first block of text, add an empty line at the beginning.
Macros

EWiki macros are resolved at compile time, when wiki is transformed to HTML. An expanded macro will not change, despite there are changes in the macro, until you save/compile the wiki content.

EWiki macros are self-contained in a single file, and the compiler finds and expands them.

An EWiki macro can have nested content, including more macros, or single line.

Macro parameters

Macro parameters are enclosed in parentheses, must be named as name=value and comma separated. Values with special characters, like a comma, can be enclosed in double or single quotes.

Learn by example
See the macro examples in the next section.

EWiki provided macros

Actions

@w{button}

Creates a button. Text can be enclosed or in text parameter.

button parameters Description Values
category Actions
class Adds extra classes to ui button See Fomantic-UI definition for button.
style Adds CSS styles See CSS documentation.
icon Adds an icon See FontAwesome icons.
link Link action
new True if the link opens a new page
text Text inside the button

Cards

@w{card}

Creates a card.

card parameters Description Values
category Cards
class Adds extra classes to ui card See Fomantic-UI definition for card.
style Adds CSS styles See CSS documentation.
image Adds an image

@w{cards}

Creates a container for cards.

cards parameters Description Values
category Cards
class Adds extra classes to ui cards See Fomantic-UI definition for cards.
style Adds CSS styles See CSS documentation.

@w{content}

Creates content for cards, items and lists.

content parameters Description Values
category Cards,Items,Lists
class Adds extra classes to content
style Adds CSS styles See CSS documentation.
header Adds a content header

@w{extra}

Creates extra content for cards, items. For items, should be nested into a content.

extra parameters Description Values
category Cards,Items
class Adds extra classes to extra content
style Adds CSS styles See CSS documentation.

Containers

@w{rotated}

Creates a rotated content with the given degrees.

rotated parameters Description Values
category Containers
class Adds class attribute
style Adds CSS styles See CSS documentation.
degrees Rotation By default -2. Positive number rotates clockwise, negative number rotates counter clockwise.

@w{segment}

Creates a segment.

segment parameters Description Values
category Containers
class Adds extra classes to ui segment See Fomantic-UI definition for segment.
style Adds CSS styles See CSS documentation.

@w{solid}

Creates a segment with the provided background color. Font color is automatically selected to make the content visible.

solid parameters Description Values
category Containers
class Adds extra classes to ui segment See Fomantic-UI definition for segment.
style Adds CSS styles See CSS documentation.
color Background color See CSS standard for accepted colors.
image Background image To ensure readability, the color should be image predominant.

Grids

@w{column}

Creates a grid column.

column parameters Description Values
category Grids
class Adds extra classes to column See Fomantic-UI definition for grid.
style Adds CSS styles See CSS documentation.

@w{grid}

Creates a grid. Can nest row and column.

grid parameters Description Values
category Grids
class Adds extra classes to ui grid See Fomantic-UI definition for grid.
style Adds CSS styles See CSS documentation.

@w{row}

Creates a grid row. Can nest column.

row parameters Description Values
category Grids
class Adds extra classes to row See Fomantic-UI definition for grid.
style Adds CSS styles See CSS documentation.

Images

@w{centeredImage}

Creates a container for centered images.

centeredImage parameters Description Values
category Images
class Adds classes
style Adds CSS styles See CSS documentation.

Items

@w{content}

Creates content for cards, items and lists.

content parameters Description Values
category Cards,Items,Lists
class Adds extra classes to content
style Adds CSS styles See CSS documentation.
header Adds a content header

@w{extra}

Creates extra content for cards, items. For items, should be nested into a content.

extra parameters Description Values
category Cards,Items
class Adds extra classes to extra content
style Adds CSS styles See CSS documentation.

@w{item}

Creates a item.

item parameters Description Values
category Items
class Adds extra classes to ui item See Fomantic-UI definition for item.
style Adds CSS styles See CSS documentation.
imgclass Adds extra classes to ui image See Fomantic-UI definition for image.
image Adds an image

@w{items}

Creates a container for items.

items parameters Description Values
category Items
class Adds extra classes to ui items See Fomantic-UI definition for items.
style Adds CSS styles See CSS documentation.

Labels

@w{label}

Creates a label.

label parameters Description Values
category Labels
class Adds extra classes to ui label See Fomantic-UI definition for label.
style Adds CSS styles See CSS documentation.
image Adds an image
text Text inside the label
detail Detail inside the label

@w{labels}

Creates a container for labels.

labels parameters Description Values
category Labels
class Adds extra classes to ui labels See Fomantic-UI definition for labels.
style Adds CSS styles See CSS documentation.

Lists

@w{content}

Creates content for cards, items and lists.

content parameters Description Values
category Cards,Items,Lists
class Adds extra classes to content
style Adds CSS styles See CSS documentation.
header Adds a content header

@w{li}

Creates a list item. Text can be enclosed or in text parameter.

li parameters Description Values
category Lists
class Adds extra classes to item See Fomantic-UI definition for list.
style Adds CSS styles See CSS documentation.
icon Adds an icon See FontAwesome icons.
text Text inside the list item

@w{lih}

Creates a list item with header. Text can be enclosed or in text parameter.

lih parameters Description Values
category Lists
class Adds extra classes to item See Fomantic-UI definition for list.
style Adds CSS styles See CSS documentation.
icon Adds an icon See FontAwesome icons.
header Header inside the list item
text Text inside the list item

@w{ol}

Creates an ordered list.

ol parameters Description Values
category Lists
class Adds extra classes to ui list See Fomantic-UI definition for list.
style Adds CSS styles See CSS documentation.

@w{ul}

Creates an unordered list.

ul parameters Description Values
category Lists
class Adds extra classes to ui list See Fomantic-UI definition for list.
style Adds CSS styles See CSS documentation.

Messages

@w{message}

Creates a friendly formatted message. The message content goes between open and closing macro.

message parameters Description Values
category Messages
class Adds extra classes to ui message warning, error, positive, negative... See Fomantic-UI definition for message.
style Adds CSS styles See CSS documentation.
icon Adds an icon See FontAwesome icons.
header Adds a message header

Stripes

@w{stripe}

Creates a horizontal stripe with the provided background color. Font color is automatically selected to make the content visible.

stripe parameters Description Values
category Stripes
class Adds extra classes to ui fluid padded container segment See Fomantic-UI definition for segment and container.
style Adds CSS styles See CSS documentation.
color Background color See CSS standard for accepted colors.
image Background image To ensure readability, the color should be image predominant. Also accepts 'radial' and 'linear'.

@w{text}

Creates a text friendly segment.

text parameters Description Values
category Stripes
class Adds extra classes to ui basic text container segment See Fomantic-UI definition for segment and container.
style Adds CSS styles See CSS documentation.

@w{textstripe}

Creates a text friendly horizontal stripe with the provided background color. Font color is automatically selected to make the content visible.

textstripe parameters Description Values
category Stripes
class Adds extra classes to ui fluid padded text container segment See Fomantic-UI definition for segment and container.
style Adds CSS styles See CSS documentation.
color Background color See CSS standard for accepted colors.
image Background image To ensure readability, the color should be image predominant. Also accepts 'radial' and 'linear'.

Support

@w{iframe}

Creates an iframe.

iframe parameters Description Values
category Support
src Iframe URL
width Iframe width
height Iframe height
allow Iframe allow

@w{script}

Creates a script. If src has a value, the script is correctly closed.

script parameters Description Values
category Support
src Script URL

@w{stylesheet}

If href has a value, loads a stylesheet. If not, creates a style block.

stylesheet parameters Description Values
category Support
href Stylesheet URL

Tables

@w{table}

Creates a table. Can nest theader, trow, tcol and tfooter.

table parameters Description Values
category Tables
class Adds extra classes to ui table See Fomantic-UI definition for table.
style Adds CSS styles See CSS documentation.

@w{tcol}

Adds a table column. If not value is set, content must be nested.

tcol parameters Description Values
category Tables
class Adds classes to td See Fomantic-UI definition for table, and CSS documentation.
style Adds CSS styles See CSS documentation.
value Value of the column

@w{tfooter}

Adds a table footer.

tfooter parameters Description Values
category Tables
class Adds classes to tfoot See Fomantic-UI definition for table, and CSS documentation.
style Adds CSS styles See CSS documentation.
values Values of footers, separated by | If the footer starts with >, will be right aligned.

@w{thead}

Adds a table header column. If not value is set, content must be nested.

thead parameters Description Values
category Tables
class Adds classes to th See Fomantic-UI definition for table, and CSS documentation.
style Adds CSS styles See CSS documentation.
value Value of the column

@w{theader}

Adds a table header.

theader parameters Description Values
category Tables
class Adds classes to thead See Fomantic-UI definition for table, and CSS documentation.
style Adds CSS styles See CSS documentation.
values Values of headers, separated by | If the header starts with >, will be right aligned.

@w{trow}

Adds a table row. If no values are set, the columns must be nested.

trow parameters Description Values
category Tables
class Adds classes to tr See Fomantic-UI definition for table, and CSS documentation.
style Adds CSS styles See CSS documentation.
values Values of columns, separated by | If the value starts with >, will be right aligned.

Text

@w{divider}

Creates a divider.

divider parameters Description Values
category Text
class Adds extra classes to ui divider See Fomantic-UI definition of divider.
text Adds text for horizontal and vertical dividers

@w{header}

Creates a header.

header parameters Description Values
category Text
class Adds extra classes to ui header See Fomantic-UI definition of header.
style Adds CSS styles See CSS documentation.
icon Adds an icon See FontAwesome icons.

@w{inline}

Creates an inline text.

inline parameters Description Values
category Text
class Adds extra classes to ui text See Fomantic-UI definition for text.
style Adds CSS styles See CSS documentation.
text The text

@w{striped}

Creates a striped text with the provided stripe color. Font color is automatically selected to make the content visible.

striped parameters Description Values
category Text
class Adds class attribute
style Adds CSS styles See CSS documentation.
color Background color See CSS standard for accepted colors.
image Background image To ensure readability, the color should be image predominant. Also accepts 'radial' and 'linear'.
separation Separation between lines By default is 1.

@w{subheader}

Creates a subheader.

subheader parameters Description Values
category Text
class Adds extra classes to sub header See Fomantic-UI definition of header.
style Adds CSS styles See CSS documentation.

Users

@w{signature}

Creates current user's signature.

signature parameters Description Values
category Users
Macro examples

EWiki provided macros may help you to create rich content, like striped landing pages, documentation, encapsulation, ...

Headers

The macro header creates an HTML header with an optional icon and a sub header.

@w{header(icon=cog)}
This is a header
@w{subheader}...with a sub header.@w{/subheader}
@w{/header}
This is a header
...with a sub header.

Headers can also change size.

@w{header(class=big,icon=cog)}
This is a header
@w{subheader}...with a sub header.@w{/subheader}
@w{/header}
This is a header
...with a sub header.

Stripes

The macros stripe and textstripe create a container that will reach the left and right borders, and a nested container with the normal width. This ensures a full stripe of the desired color, occupying the container limits. For landing pages, horizontal limits are the browser width.

@w{stripe(color=RedGold)}
@w{header(icon=cog)}
This is a header
@w{subheader}...with a sub header.@w{/subheader}
@w{/header}
@w{/stripe}
This is a header
...with a sub header.
@w{textstripe(color=RedGold)}
@w{header(icon=cog)}
This is a header
@w{subheader}...with a sub header.@w{/subheader}
@w{/header}
@w{/textstripe}
This is a header
...with a sub header.

Messages

The message macro is a way to draw attention to specific content.

@w{message(class=info,icon=info,header=Informative message)}
This content can be any EWiki content.
@w{/message}
Informative message
This content can be any EWiki content.
@w{message(class=warning,icon=warning,header=Warning message)}
This content can be any EWiki content.
@w{/message}
Warning message
This content can be any EWiki content.

Cards

The cards and card macros create an encapsulated content, with an optional image.

@w{card(image=repository(/topcard.jpg))}
@w{content(header=Card header)}
This content can be any EWiki content.
@w{/content}
@w{/card}
Card header
This content can be any EWiki content.

Wrapping cards within the cards macro can control how cards will show in rows, the type of card, color and more. Check the cards macro definition.

Items

The items and item macros create an encapsulated content, with an optional image.

@w{items}
@w{item(imgclass=tiny,image=repository(/topcard.jpg))}
@w{content(header=Card header)}
This content can be any EWiki content.
@w{/content}
@w{/item}
@w{/items}
Card header
This content can be any EWiki content.

Wrapping items within the items macro can control the type of item, color and more. Check the items macro definition.

Files based

Files based are components using the private part of Files from BrightSide Attachments. Each uses a specific root and makes the content available to specific roles or users, depending on functionality.

Current components are [ Deliverables, Documentation ] .

Deliverables

The Deliverables component aims to facilitate publishing entity deliverables. The roles allowing uploads and downloads can be controlled using Concept permissions . The show permissions grant users to download. The action permissions grant users to upload.

The administration form is quite forward and responds to user roles.


Deliverables configuration is included out-of-the-box in projects.
Documentation

The goal of this component is to allow specific roles to require documentation to specific users.

Documentation definition

Before requiring documentation, a definition about this documentation must be made. The definition fields are:

Field

Description

Required

Name

The name of the documentation. This name must be user-friendly and unmistakable.

Type

Indicates the type of files to be uploaded. Can be:

  • ANY
  • TEXT (pdf, txt, odt, fodt, doc, docx)
  • SHEET (ods, fods, xls, xlsx)
  • IMAGE (png, jpg)

Description

Supporting text describing what the documentation is about.

Allowed root

Filters whether this documentation will be shown. The root refers to the entity root.

Multiple contacts

Allows adding more contacts to a single documentation petition.

Upload control

Allows overriding files only when the uploaded version is newer than the already existing. When the failing condition is met, shows a message requesting the user to use the last file version.

min, max

Controls the numbers of files that should be uploaded. The min value must be reached before the documentation is evaluated.

References

Files used as a reference to documentation. In some cases, references can be the forms to fulfill.


Especial cases

The flow

Documentation fulfillment is a conversation between a requester and a requested, both registered users. The status of pending actions will appear in both users areas, with an easy-to-follow link.

Empty documentation form. The request action must be initiated by users with specific roles, depending on the associated entity.


The user with the right roles starts a request and the status changes to pending to upload. Only the requested user will be able to see the form and upload documents.


The documentation is uploaded and pending validation. Only the requester or administrators can validate or deny the documentation.


Denied documentation with a reason message.


Validated documentation.


Help context

The Elephant library has the ability to create a help context for each page, also called a context in Elephant nomenclature.

Help contexts are normal contexts that follow some rules. First, they have a single root, called help context root, second, they pair the path of the context that needs a help context and third, they have content.

The help context root is defined in /WEB-INF/elephant/conf/help-context.properties file, using root=[help context path] as an absolute path starting with / as the web root.

Learn by example

Suppose root=/docs/platform in the configuration file.

Help context

Exists?

Has content?

Web context

Has help?

/docs/platform/service/baas

Yes

Yes

/service/baas

Yes

/docs/platform/service/support

No

No

/service/support

No

/docs/platform/service

Yes

No

/service

No

How does show a help context

As seen before, in case the help context exists and has content, an will appear at bottom left of the screen. By clicking this icon the web visitor will get the help content as a modal popup.

This page has a sample help context, thus you may see the icon at screen bottom left.

Best practices

When creating the root for help contexts, is a good idea to protect it for casual visitors. Since some contexts will have no content, has to avoid the help icon to appear, the help root is not visitor friendly. The usual restricting role should be sysinfo:list, since points to web content administrators.

I18n

Elephant internationalization project aims to create an easy to maintain translation base.

The API

i.text

Results in text in the appropriate language.

i['text']

Results in text in the appropriate language.

i_.get('text')

Results in text in the appropriate language.

i_.get('text', count)

Results in text in the appropriate language, using the plural and empty variations depending on count.

i_.format('text', argument[, argument][, ...])

Formats text in the appropriate language, using arguments.

i[k[key]]

Results in the text associated to the given key, in the appropriate language.

i_.byKey('key')

Results in the text associated to the given key, in the appropriate language.

Hard-coded variations

Elephant i18n accepts adding variations to a single key. Those variations are singular and empty when the key contains a number formatting symbol like %d and %f, and their own variations.

They are applied when the i_.get('text', count) is called, count will replace the formatting symbol and a variation will be selected depending on count value. For > 1 the basic key, for =1 the singular key and for =0 the empty key.

Handling gender

Handling gender with i18n tools has always been a hard topic and is a matter of which language you take as reference when writing keys. Let's suppose you are the developer, and you are using English as the main language (Elephant i18n default). Now, you write this in your application:

i_.get("%d selected", images.size())

Some languages apply gender to adjectives, which means that selected will be different depending on what is selected. For example, in Catalan images would be seleccionades and files seleccionats. Gender might be different in other languages, and the API makes no hard-coded assumptions.

Elephant i18n approach to solve this problem using key discriminators. Key discriminators generate a different key, but do not show when rendering the translation. A discriminator is a sequence of lowercase letters, up to three, prefixed with the exclamation character. For example !f.

Elephant translations use English as the main key generator and Catalan as the gender reference. An example to solve the previous example would be:

i_.get("%d selected!f", images.size())
i_.get("%d selected!m", files.size())

In this example, English will show the same message (n selected) and will generate two different keys, allowing translators to apply gender to their translations. Elephant convention uses !f for female and !m for male.

Another approach would be using the discriminator to describe the noun, for example !img for images and !fil for files. This solution involves a more developed set of keys and arises the question about why not using the noun in the message (%d selected images).

Notice that the Translator API showing other language translations, tends to facilitate recognizing the pattern. Anyway, a full knowledge of how many languages and languages themselves, would be necessary to fully understand, and maybe solve, the problem. Discriminators are just a none hard-coded help. And there is always the try/error approach.

Translators

Elephant I18n recognizes translators as a specific actor. A translator can be assigned to a single language, to a partial set of languages, or to the whole site set.


Elephant I18n also provides an editable translation for the whole site set of languages, when adding entries.

Migration

The new API features a compatibility wrapper to allow a slower adoption. The compatibility wrapper does not solve all cases, particularly those scarcely in use.

The main difference between both APIs, compatibility and I18n, is the key treatment. I18n use keys only internally. In code you will only see readable text.

Compatibility table

Old API

Compatibility API

Elephant I18n

Covered by compatibility

labels.key

labels.key

i.text

labels['key']

labels['key']

i['text']

el_label.key

el_label.key

i.text

el_label['key']

el_label['key']

i['text']

labelAPI.getStringPars(key, ...)

i_.c.format(key, ...)

i_.format(text, ...)

Requires changing the call, but accepts using key.

el_cons.currentLocale

i_.used().language

i_.used().language

Requires changing the call.

el_cons.usedLocale

i_.used()

i_.used()

Requires changing the call.

By key

Even though this API aims to create a more readable code, still exists some hardcoded keys that need translation. Example of those are languages codes and Java enums. If everything were to be converted to natural language, the relation with codes will be broken. The ByKey extension allows to keep one to one relation between coded keys and natural language. Also, enforces Elephant I18N by creating the natural language related to the key used by this API.

I18n lanes


Importer

Elephant Importer API provides a way of loading data into modules implementing ImporterProvider.

Importers can add to the existing data or fully replace it. The importer front-end shows this option as Full import.


Provider sources

By default, data sources are CSV files uploaded into a provider. The API deals with the usual CSV formats, including differences among operating systems.

Currently accepted data sources are:

Name

Description

File extension

CSV

Comma Separated Values

cvs

TDF

Tab-Delimited Format

tdf

Sources must include a first row with headers. The importer will use those headers to map columns to actual fields.

Providers

Alliance Contact Provider

Imports data into Alliance Contacts. The accepted fields are:

Field

Description

Required

contactId

Contact ID as in the internal member system.

name

Contact name.

email

Contact email, used for notifications and authentication.

Since emails are used for authentication, the value MUST BE UNIQUE for users to authenticate.

pass

Contact password bytes retrieved with UTF-8 encoding, digested using SHA3-256 and converted to an hexadecimal string.

As for now, a password conversion is not provided, ensuring the password do not exist in its unencrypted form in any moment of the process.

deactivated

True if the contact is deactivated. Prevents this contact from authenticating and asking for participating in projects. Default is false.

face

URL to the contact profile image.

company

Contact's company name.

position

Contact's position in company.

companyFace

URL to the company logo image.

Alliance Project Provider

Imports data into Alliance Projects. The accepted fields are:

Field

Description

Required

projectId

Project ID as in the internal member system.

creation

Project creation date using yyyy-mm-dd format.

phaseIndex

Phase index as in the alliance set of phases.

projectCode

Project code.

name

Project name.

summary

Project summary, usually a brief description of project's goal.

categoryId

Category ID as in the alliance collection of categories.

source

URL to the original project.

Alliance Participation Provider

Imports data into Alliance Participations. The accepted fields are:

Field

Description

Required

projectId

Project ID as in the internal member system.

contactId

Contact ID as in the internal member system.

creation

Project creation date using yyyy-mm-dd format.

admin

True if contact is this project administrator.

beneficiary

True if contact is beneficiary of this project.

consortium

True if contact is part of a consortium within this project.

coordinator

True if contact is coordinator of this project.

driver

True if contact is driver of this project.

funding

True if contact does funding on this project.

offerer

True if contact is offerer of this project.

research

True if contact is part of this project research.

support

True if contact is part of this project support

company

Contact's company name. This company may differ from current contact company and should be related to creation date.

companyFace

URL to the company logo image.

Alliance Tag Provider

Imports data into wide-application Tags API. The accepted fields are:

Field

Description

Required

tag

Tag name.

entityId

Project ID as in the internal member system.

Indicators

Elephant provides the Indicator API as a way to generate statistics from entities. The main goal of the API is to facilitate the generation among modules, on separated DBs.

Indicators are usually stored using a separated convenience API. Examples of using indicators are the Ranking and Matching APIs. Both take indicators values and store them where needed, independently of the source of the stored data.

Main goals

Indicator composition

Since indicators are stored using separated APIs, the indicator may vary in its composition. For example, the Ranking API relates to sets of single entities, while the Matching API does with two entities. Provided that storage depends on others and Indicator API needs read access, the API imposes some requirements.

The reading mechanism

Since indicators solely generate and provide data, seems that being able to read this data on a separate process is far off its possibilities.

The reading mechanism comes in help and is able to provide indicator values for statistic purposes. To achieve this goal, indicators find storage classes and provide an specific syntax for reading its values at single, multiple or formulated basis.

Reading syntax

The form taken by readIndicator parameter is:

JPAEntityClass:IndicatorClass:entityPath[:relatedPath]:indicator

JPAEntityClass

These classes are usually named after their functionality. You can see an example in Ranking , where the class DossierRanking has the indicators for dossier's ranking.

IndicatorClass

Class that owns the JPA Dao and has the ability to read values.

entityPath

Refers to the entity to be read. Notice that readIndicator method will always return a SUM of the results. An identifier will return the results of a single entity, while * will return all.

relatedPath

Same as for entityPath but for the related entity. This field has meaning only when reading a matching indicator.

indicator

Refers to which indicator will be returned. For indicator the final word has special meaning. Refers to the resulting formula for the specified JPAEntityClass. Indicators can make use of wildcards to get fine grained statistics. For instance, status* will result with the sum of all indicators starting with status.

Wildcards

*

Represents one or more characters.

?

Represents a single character.

Discovering indicators

To understand how reading syntax helps locating values, this image shows the process of getting values.


Optimizations

Indicators are created from within modules and using JPA contexts. The results are stored at module convenience in order to be accessible for database queries. The Ranking API and the Matching API assist saving results in specialized tables. This would be the standard, and preferred, method.

Before diving into possible process optimizations, let's see some numbers.

Quantifying results

A ranking set of indicators will create (indicators + final_ranking) * entities tuples. For instance, if you have 500 entities and need 10 indicators to calculate the ranking value, this will create (10 + 1) * 500, 5,500 tuples. Not so bad.

A matching set of indicators will create (indicators + final_matching) * entities * related_entities tuples. Things have slightly changed since there is another factor: the related or entities to match with. The matched entities are usually contacts. Let's do the same example as above, saying that we have 1,000 contacts to match with. Applying the factor to the previous result give us the amount of 5,500,000 tuples. Quite impressive, isn't?

Three optimization approaches

Spare zeros is a first approach to optimize the results. The API does not save zero or near to zero values. The impact of this optimization highly depends on the related selection of the second approach, but is at least significant for non relevant indicators.

Fine selection approach affects both entities and related entities. It's difficult to implement since implies some kind of guessing which pairs are prone to match. The impact of this optimization is high because supposedly eliminates zeros and, more important, reduces the number of database reads.

Bulk data might be the more effective approach. Makes an initial selection and does de insertions as a pre-process. When doing so, the indicator does not have to load entities separately, knows the result from the read data.

Formulas

Formulas are mainly composed by variables, constants, operators and functions. See Variables for a full list of available ranking and matching variables.

Elephant Indicator API also adds some functions to facilitate the formula edition.

Using weighted values

Since variables return absolute values, being or not related to a second entity, the result treatment gets complicated. To palliate this, the weighted functions provide a more easy input.

weighted(value, meaning, weight)

Returns a weighted value based on:

reverseWeighted(value, meaning, weight)

Returns a weighted complementary value based on the same parameters that weighted.

Math functions

You can also use math functions to create your own calculations. Math functions are prefixed with Math, for example Math.floor(2.3) will return the parameter floor.

Variables

Variables are used inside formulas to create the final ranking or matching. Descriptions refer to current entity as the entity that's being processed and to self as the related entity for matching, usually a contact, therefore creating the self point of view.

Variables are used in Formulas .

attach
Indicator

Variable Descripció

attachments
attach:attachments
BOTH_VARIABLE

Ranking
Counts the number of attachments in current entity.
Matching
Counts the number of self uploaded attachments in current entity.

commons
Indicator

Variable Descripció

following
commons:following
BOTH_VARIABLE

Ranking
Matching

followed
commons:followed
BOTH_VARIABLE

Ranking
Matching

seen
commons:seen
BOTH_VARIABLE

Ranking
Counts the number of times has been seen.
Matching
Tells whether a user has seen current entity, 1=seen.

like
commons:like
BOTH_VARIABLE

Ranking
Matching

apply
commons:apply
BOTH_VARIABLE

Ranking
Matching

contact
Indicator

Variable Descripció

available
contact:available
RANKING_VARIABLE

Ranking

profile
contact:profile
RANKING_VARIABLE

Ranking

distance
contact:distance
MATCHING_VARIABLE

Matching

dossier
Indicator

Variable Descripció

participation
dossier:participation
BOTH_VARIABLE

Ranking
Counts the number of participations in current entity.
Matching
Counts the number of self participations in current entity.

categoryParticipation
dossier:categoryParticipation
BOTH_VARIABLE

Ranking
Counts the number of participations in current category's entity.
Matching
Counts the number of self participations in current category's entity.

daysCreation
dossier:daysCreation
RANKING_VARIABLE

Ranking
Returns the days passed since current entity's creation.

daysActivity
dossier:daysActivity
RANKING_VARIABLE

Ranking
Returns the days passed since current entity's last activity.

words
dossier:words
RANKING_VARIABLE

Ranking
Counts the number of words used to describe current entity.

issues
dossier:issues
BOTH_VARIABLE

Ranking
Counts the number of issues in current entity.
Matching
Counts the number of self participating issues in current entity.

issueActivity
dossier:issueActivity
BOTH_VARIABLE

Ranking
Counts the number of reported issue activity in current entity.
Matching
Counts the number of self reported issue activity in current entity.

issueResponsible
dossier:issueResponsible
RANKING_VARIABLE

Ranking

issueReporter
dossier:issueReporter
RANKING_VARIABLE

Ranking

issueQA
dossier:issueQA
RANKING_VARIABLE

Ranking

issueAssistant
dossier:issueAssistant
RANKING_VARIABLE

Ranking

siblings
dossier:siblings
MATCHING_VARIABLE

Matching
Counts the number of self siblings' participations in current entity.

siblingsCategory
dossier:siblingsCategory
MATCHING_VARIABLE

Matching
Counts the number of self siblings' participations in current category's entity.

forum
Indicator

Variable Descripció

topics
forum:topics
BOTH_VARIABLE

Ranking
Counts the number of topics in current entity.
Matching
Counts the number of self created topics in current entity.

posts
forum:posts
BOTH_VARIABLE

Ranking
Counts the number of posts in current entity.
Matching
Counts the number of self created posts in current entity.

generic
Indicator

Variable Descripció

stars
generic:stars
BOTH_VARIABLE

Ranking
Averages the number of stars for current entity.
Matching
Averages the number of self given stars for current entity.

comments
generic:comments
BOTH_VARIABLE

Ranking
Counts the number of comments in current entity.
Matching
Counts the number of self comments in current entity.

service
Indicator

Variable Descripció

participation
service:participation
MATCHING_VARIABLE

Matching
Counts the number of self participations in current entity.

daysCreation
service:daysCreation
RANKING_VARIABLE

Ranking
Returns the days passed since current entity's creation.

daysStart
service:daysStart
RANKING_VARIABLE

Ranking

daysEnd
service:daysEnd
RANKING_VARIABLE

Ranking

words
service:words
RANKING_VARIABLE

Ranking
Counts the number of words used to describe current entity.

student
Indicator

Variable Descripció

challenges
student:challenges
RANKING_VARIABLE

Ranking
Counts the number of challenges in current entity.

responses
student:responses
RANKING_VARIABLE

Ranking
Counts the number of responses to challenges in current entity.

responsesLike
student:responsesLike
RANKING_VARIABLE

Ranking

daysCreation
student:daysCreation
RANKING_VARIABLE

Ranking
Returns the days passed since current entity's creation.

distance
student:distance
MATCHING_VARIABLE

Matching

Macros

Elephant renders macros each time a page is requested. Macros start with {@ special characters and expand into text or HTML code. Macros can even include content from a file, HTML page or JSP page. In order to understand what macros are for see what current macros do:

Macros can be nested, but take in mind that macros are written inline, in order to allow content inclusions. Thus, only macros that resolve to a string could be nested. Ex.

{@equals:{@user:id}:admin:Administering:Browsing}

To escape the : character prepend a slash, like /:.

Next generation

The next generation of macros provide a great number of features, aiming to easy-of-use customization. The main goals are:

Next generation macros are expressed as @{macro_name}.

Backward compatibility

For compatibility reasons, next generation macros will be included at the end of each macro definition. Both macro types can be used in the same content, even combined.

Core
Core content

Core content macros help creating pages that are rendered using dynamic content.

With readers

Macros with readers help formatting data on properties, XML and JSON files.

Core
Macro parser

Expands into web application's context.

{@ webroot }

Expends into site name.

{@ site }

Shows current rendering context.

{@ rendering }

Elephant language.

{@ lang }

Calls modules' user summaries and show the results.

{@ user-summary [ : mode ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. init

{@ user-contents }

Reads and renders file content.

{@ include : content-file }
Atributs Descripció Opcions Per defecte
content-file System file to show.

Writes parameter with name value or default when null.

{@ param : name [ : default ] }
Atributs Descripció Opcions Per defecte
name Attribute name.
default Default value.

Renders context content. If stopper is set to true, stops when finding a line starting with .

{@ render : context [ : stopper ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
stopper Whether rendering should stop.

Writes current date, time or both using diferent localized formats.

{@ date [ : mode [ : format ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. date, all, time date
format Format used to show the value. short, medium, long, full short

Renders the feed at url.

{@ feed : url }
Atributs Descripció Opcions Per defecte
url Uniform Resource Locator.

Creates an Elephant marker within context with name. Elephant markers are initialized with correct locale and constructor as variable.

{@ marker : tmpl-root : template : value-map }
Atributs Descripció Opcions Per defecte
tmpl-root Templates root.
template Template used to show the items.
value-map Values using the form variable=value separated by ;

Creates an Elephant marker within context with name. The repository-file is stored in props.

{@ marker-props : tmpl-root : template : repository-file }
Atributs Descripció Opcions Per defecte
tmpl-root Templates root.
template Template used to show the items.
repository-file Name of the repository file.

Creates an Elephant marker within context with name. The repository-file is stored in doc.

{@ marker-xml : tmpl-root : template : repository-file }
Atributs Descripció Opcions Per defecte
tmpl-root Templates root.
template Template used to show the items.
repository-file Name of the repository file.

Creates an Elephant marker within context with name. The repository-file is stored in json.

{@ marker-json : tmpl-root : template : repository-file }
Atributs Descripció Opcions Per defecte
tmpl-root Templates root.
template Template used to show the items.
repository-file Name of the repository file.

Writes a json array of files matching path and pattern. The array can be as is, sorted or shuffled.

{@ files : folder : pattern : mode }
Atributs Descripció Opcions Per defecte
folder Folder location.
pattern The pattern items must match.
mode Mode to use. normal, sort, shuffle

Creates a frame with url content. If url starts with '/' application context is automatically inserted.

{@ frame : url : width : height }
Atributs Descripció Opcions Per defecte
url Uniform Resource Locator.
width CSS style width.
height CSS style height.

Gets resource value and renders as mode. Mode is an integer optional parameter.

{@ res : resource-key [ : string-mode ] }
Atributs Descripció Opcions Per defecte
resource-key Key used to locate de resource.
string-mode Possible values are: 0 No transform, 1 Capitalized, 2 To upper case, 3 To lower case. 0

{@ i18n : resource [ : string-mode ] }
Atributs Descripció Opcions Per defecte
resource
string-mode Possible values are: 0 No transform, 1 Capitalized, 2 To upper case, 3 To lower case. 0

Writes a random number starting at zero and up to limit minus one.

{@ random : random-limit }
Atributs Descripció Opcions Per defecte
random-limit Random values ceil.

Elephant context for links.

{@ context : level }
Atributs Descripció Opcions Per defecte
level Number of the item level.

Writes currently logged user's name, identifier or email.

{@ user [ : mode ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. name, id, email name

Writes true or false expressions depending on whether role:attribute pair are satisfied.

{@ if : role : attribute : true-expression : false-expression }
Atributs Descripció Opcions Per defecte
role Entity role part.
attribute Permission part.
true-expression When comparison is true.
false-expression When comparison is false.

Writes true or false expressions depending on whether cookie value equals value.

{@ ifcookie : cookie : value : true-expression : false-expression }
Atributs Descripció Opcions Per defecte
cookie Cookie name.
value Value to search for.
true-expression When comparison is true.
false-expression When comparison is false.

Writes true or false expressions depending on whether class could be instantiated.

{@ class : class-name : true-expression : false-expression }
Atributs Descripció Opcions Per defecte
class-name Java class name.
true-expression When comparison is true.
false-expression When comparison is false.

Writes true or false expressions depending on whether value1 equals value2.

{@ equals : value : value : true-expression : false-expression }
Atributs Descripció Opcions Per defecte
value Value to search for.
value Value to search for.
true-expression When comparison is true.
false-expression When comparison is false.

Renders object's attribute as string. object can also be an entityPath.

{@ object : ref-object : attribute }
Atributs Descripció Opcions Per defecte
ref-object Attribute name holding the object or an entityPath.
attribute Renders attribute's value as string.

Renders attribute's value as string.

{@ attribute : attribute [ : format ] }
Atributs Descripció Opcions Per defecte
attribute Renders attribute's value as string.
format Format used to show the value.

Renders entity using name and description.

{@ entity : entityPath : fmt-name-desc }
Atributs Descripció Opcions Per defecte
entityPath Path to a entity.
fmt-name-desc Format, as in String.format(), with entity name and description as parameters.

Renders the entity represented by path calling plugin and using template if specified.

{@ entity-ctrl : plugin : entityPath [ : template ] }
Atributs Descripció Opcions Per defecte
plugin Plugin name.
entityPath Path to a entity.
template Template used to show the items.

Writes cookie value. If optional value is defined, then sets cookie value.

{@ cookie : name [ : value ] }
Atributs Descripció Opcions Per defecte
name Attribute name.
value Value to be set when defined.

Indicator name.

{@ indicator : storeClass : indicatorClass : entityPath : indicator [ : relatedPath ] }
Atributs Descripció Opcions Per defecte
storeClass
indicatorClass
entityPath Path to a entity.
indicator Indicator name.
relatedPath

{@ entry-point : identifier [ : values ] }
Atributs Descripció Opcions Per defecte
identifier
values

Macros with readers, how does it work?

The easiest way to read a file is store it in context's repository and access it with */file. The * will expand into rendering context repository. For example:

{@marker-xml:xml:doc:*/doc.xml}

Reads doc.xml in current repository and passes its data to [Template_root]/xml/docTemplate.html to be formatted.

Reading properties

Properties are stored in props list in the same order they are stored on disc. You can iterate props with #list.

<#list props?keys as key>
   <#assign value=props[key]/>
   // do something with key and value
   ...
< /#list>

Reading XML

XML documents are stored in doc model. You can iterate the elements using dot syntax and iterate collections as you would usually do for any other data. The XML model is the FreeMarker NodeModel.

Reading JSON

JSON files are stored in json model. To access a root, use json.read("$.root"). If the root is a list, use json.list("$.root"). Once retrieved the root, you can iterate the elements using dot syntax and iterate collections as you would usually do for any other data. The JSON model is a subset of the JsonPath DocumentContext, optimized for templates usage.

The JSON books example

The data:

{
  "book": [
    {
      "title": "...",
      "author": "...",
      "excerpt": "...",
      "availability": "...",
      "link": "...",
      "filelink": "...",
      "imagelink": "...",
      "pages": 0
    },
    {
      ...
    },
    ...
  ]
}

The template (Semantic-UI):

<div class="ui divided items">
  <#list json.list("$.book") as book>
    <div class="item">
      <a class="ui tiny image" href="${book.link}">
        <img src="${book.imagelink}"/>
      </a>
      <div class="content">
        <a class="header" href="${book.link}">${book.title}</a>
        <div class="meta">
          ${book.author}
        </div>
        <div class="description">
          ${book.excerpt}
        </div>
        <div class="extra">
          ${book.availability}
          <#if book.filelink?has_content>
            <a target="_new" href="${book.filelink}">${book.pages}</a>
          < /#if>
        </div>
      </div>
    </div>
  < /#list>
</div>
Navigational
Do I have to use navigational macros in my site?

Not necessarily. By default Elephant already includes all navigation elements in its templates. Navigational macros are intended for special formatting purposes. Navigational macros do not include CSS especial notations, thus you use your own.

Listing macros or hard written links?

Both choices may have the result. Main difference is that listing macros will update their content based on current configuration.

Navigation
Macro parser

Renders a bread crumbs navigator as an HTML unordered list.

{@ navigator : location }
Atributs Descripció Opcions Per defecte
location Navigator mode.

Renders a traversal navigator as an HTML table with three columns.

{@ navigator : traversal [ : show-title ] }
Atributs Descripció Opcions Per defecte
traversal Navigator mode.
show-title When true, renders context name as well. false

Renders a menu as HTML unordered list. level tells starting at which level options are shown. preloaded indicates how many children are to be shown.

{@ navigator : options : decorators : level : preloaded [ : show-current ] }
Atributs Descripció Opcions Per defecte
options Navigator mode.
decorators When true, aditional DIVs are added at top and bottom.
level Number of the item level.
preloaded Number of preloaded children.
show-current When true, children passing preloaded value will show along with ancestors and siblings, as opposed to not showing any child with level over level + preloaded. true

Renders a tabulator as HTML unordered list. level tells at which level tabs are shown.

{@ navigator : tabulator : level }
Atributs Descripció Opcions Per defecte
tabulator Navigator mode.
level Number of the item level.

Renders a web map.

{@ webmap [ : level ] }
Atributs Descripció Opcions Per defecte
level Tells until which level contexts are shown. 1

Renders a list of selectable contexts.

{@ list : behavioural_keywords [,behavioural_keywords...] : navigational_keywords [,navigational_keywords...] : selection_keywords [,selection_keywords...] }
Atributs Descripció Opcions Per defecte
behavioural_keywords Keywords controlling how information displays. popup, external, hidden, verbose
navigational_keywords Keywords to navigate Elephant contexts. parent, locate, level, root, match
selection_keywords Keywords actually returning contexts. all, siblings, search, children, self, leaf, ancestors

Renders a line of selectable contexts.

{@ anchor : behavioural_keywords [,behavioural_keywords...] : navigational_keywords [,navigational_keywords...] : selection_keywords [,selection_keywords...] }
Atributs Descripció Opcions Per defecte
behavioural_keywords Keywords controlling how information displays. popup, external, hidden, verbose
navigational_keywords Keywords to navigate Elephant contexts. parent, locate, level, root, match
selection_keywords Keywords actually returning contexts. all, siblings, search, children, self, leaf, ancestors

Understanding what behavioural keywords are

Behavioural keywords stand for keywords controlling how information displays. The way behaviours will extend in future versions might be controlled in this section.

Behavioural keyword

Description

verbose

Writes the whole path to context, starting from current context.

popup

Popup effect on resulting links is to open a popup instead of opening a new context.

hidden

Hidden contexts will show, even if protected.

external

Links will open on a new tab or window.

Understanding what navigational keywords and selection keywords mean


Navigational keywords end up as a list, colon separated, of keywords pointing to existing contexts. As starting point, path_to_contexts initializes to current context, that is, the web page where macro displays.

Here comes a brief description of what each keyword does and after some clear examples:

Navigation keywords move current selection from context to context.

Navigation keyword

Description

parent

Moves to current selection's parent

root

Moves to root context

level

Moves to ancestor[level]

locate

Moves next token path, expands * to current path

match

Moves to matching context from current selection using regular expressions

Selection keywords actually return contexts, one or several. A zero results it's considered an error an macro will displays with m_error class, which defaults to red color and a warning image. Otherwise, macro expands into m_list class.

Render keyword

Description

self

Returns current selection

children

Returns current selection's children

all

Returns all descendant contexts

leaf

Returns all descendant contexts having no children

ancestors

Returns current selection's ancestors

siblings

Returns current selection's siblings, including itself

search

Returns matching contexts from current selection

Learning by example

Macro

Description

{@list:self}


{@anchor:self}
Navigational
{@anchor:popup:self}
Navigational

self returned current selection which defaults to current context, popup shows this page as a popup window

{@list:parent:children}


{@anchor:parent:children}
[ Core, Navigational, Modules, Documentation, Macro summary ]

parent took us into current context its parent, while children returned a list of its children

Modules

Current list of modules exposing macros.


Attachments
What are attachments' site terms?

Some macros user site terms as something well known within Elephant site components. This is not exactly true and the concept builds in template conventions. To make life easier, templates locate attachments' site terms under the terms folder in content/rot.txt. This file can be create or edited using the BaaS Tools -> Files option menu.

Attachments
Macro parser

Shows the attachments from a specific entity.

{@ attachment : entityPath [ : template ] }
Atributs Descripció Opcions Per defecte
entityPath Path to a entity.
template Template used to show the items. editableTree tree

Shows the attachments from a specific entity in readonly mode.

{@ attachment-ro : entityPath [ : template ] }
Atributs Descripció Opcions Per defecte
entityPath Path to a entity.
template Template used to show the items. tree-ro

Shows the attachments from a specific entity in readonly mode, after accepting site terms.

{@ attachment-rot : entityPath [ : template ] }
Atributs Descripció Opcions Per defecte
entityPath Path to a entity.
template Template used to show the items. tree-rot

Shows the attachments from current user.

{@ self-attachments [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. tree

Shows the attachments from current user in readonly mode.

{@ self-attachments-ro [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. tree-ro

Shows the attachments from current user in readonly mode, after accepting site terms.

{@ self-attachments-rot [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. tree-rot

Calendar
What can I do with the calendar URL?

The calendar URL generates an on line calendar for the requesting user. Includes those parts of modules the user is interested or participates in.

With this in mind, you can use this URL to import the calendar events into your favorite calendar application. See specific instructions on how to import calendars in your calendar application.

Calendar
Macro parser

Renders calendar URL for current user.

{@ calendar : type }
Atributs Descripció Opcions Per defecte
type Only items with type. url

Contacts
Groups

Groups is an application wide organizational utility. For instance, products may use categories of groups when exposed to the web store.

Directory

Directory is a group of contacts that share some of their data with other Directory members. There is a full directory listing, but also has other applications. For instance, only members of the Directory can see which members are registered and assisted to Convocations.

Contacts
Macro parser

Lists groups in a tree format.

{@ groups : context : group-category }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
group-category Category identifier of the groups.

Lists contacts with page navigation.

{@ contacts [ : count [ : syndicationId [ : summaryTemplate [ : context [ : fullTemplate ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
syndicationId Sindication code. See Social Groups in Contacts.
summaryTemplate Template used to show the items in summary mode. summary
context Elephant context for links.
fullTemplate Template used to show one items in full mode. full

{@ contacts-summary [ : count [ : syndicationId [ : summaryTemplate [ : context [ : fullTemplate ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
syndicationId Sindication code. See Social Groups in Contacts.
summaryTemplate Template used to show the items in summary mode. summary
context Elephant context for links.
fullTemplate Template used to show one items in full mode. full

Lists contacts in grouping with page navigation.

{@ contacts-by-group [ : count [ : groupings [ : summaryTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
groupings Items groupings.
summaryTemplate Template used to show the items in summary mode. summary

Lists contacts in grouping without navigation.

{@ contacts-by-group-summary [ : count [ : groupings [ : summaryTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
groupings Items groupings.
summaryTemplate Template used to show the items in summary mode. summary

Shows contact count.

{@ contactcount [ : syndicationId ] }
Atributs Descripció Opcions Per defecte
syndicationId Sindication code. See Social Groups in Contacts.

Lists contacts with specific connector value with page navigation.

{@ contacts-connector : count : connector [ : value [,value...] [ : summaryTemplate [ : context [ : fullTemplate ] ] ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
connector Connector name.
value Value to search for.
summaryTemplate Template used to show the items in summary mode. summary
context Elephant context for links.
fullTemplate Template used to show one items in full mode. full

Lists contacts with specific connector value without navigation.

{@ contacts-connector-summary : count : connector [ : value [,value...] [ : summaryTemplate [ : context [ : fullTemplate ] ] ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
connector Connector name.
value Value to search for.
summaryTemplate Template used to show the items in summary mode. summary
context Elephant context for links.
fullTemplate Template used to show one items in full mode. full

Shows a text depending on whether user's my-data is valid or not.

{@ my-data : valid : not-valid }
Atributs Descripció Opcions Per defecte
valid
not-valid

Creates an editable form for web descriptors.

{@ describe-it : entityPath [ : id ] }
Atributs Descripció Opcions Per defecte
entityPath Path to a entity.
id Identifier. Default

Convocation check interface for attendance control.

{@ convocation-check [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. check

Shows convocations with page navigation.

{@ convocations : mode [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, closed, open
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows convocations without navigation.

{@ convocation-summary : mode [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, closed, open
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows public and user's convocations with page navigation.

{@ myconvocations : mode [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, closed, open
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows public and user's convocations without navigation.

{@ myconvocation-summary : mode [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, closed, open
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows public convocations with page navigation.

{@ public-convocations : mode [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, closed, open
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows public convocations without navigation.

{@ public-convocation-summary : mode [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, closed, open
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ old-directory [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

Renders the directory context.

{@ directory [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ directory-summary [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ directory-ranking [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ directory-summary-ranking [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ directory-restricted [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ directory-summary-ranking-restricted [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ directory-ranking-restricted [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications-summary [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications-ranking [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications-summary-ranking [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications-restricted [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications-summary-ranking-restricted [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications-ranking-restricted [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

Shows services with page navigation.

{@ services : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows services without navigation.

{@ service-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows user's company services with page navigation.

{@ myservices : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows user's company services without navigation.

{@ myservice-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows last services with page navigation.

{@ lastservices : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows last services without navigation.

{@ lastservice-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows user's company last services with page navigation.

{@ mylastservices : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows user's company last services without navigation.

{@ mylastservice-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ register [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. signup

{@ profile : contactIds [ : template ] }
Atributs Descripció Opcions Per defecte
contactIds
template Template used to show the items. summary

{@ myprofile [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. profile

DAO
Search capabilities

Dao search are preferably created using the elephant/conf context notation, which is not context dependent on its editable property. The dao-search macro should be mainly used in conjunction with an iterable macro.

DAO
Macro parser

Creates an instance of a search form. Iterators use these instances to provide search capabilities.

{@ dao-search : context }
Atributs Descripció Opcions Per defecte
context Elephant context for links.

Dossier
Using editable forms

By default, the Dossiers module provides all necessary forms to edit data. It's recommended not to use editable forms macros, but there might be exceptional use cases. Provide you need a single entry point to add information to a fixed issue, then an editable form will solve the case.

Dossier
Macro parser

Shows issues with page navigation.

{@ issues : status [ : context [ : categoryId [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, onwork
context Elephant context for links.
categoryId Category identifier. 0
dossierId Dossier identifier. 0
count Number of items to show. 10
template Template used to show the items. kbSummary, questions, motions, mySummary, proposals summary

Shows issues without navigation.

{@ issue-summary : status [ : context [ : categoryId [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, onwork
context Elephant context for links.
categoryId Category identifier. 0
dossierId Dossier identifier. 0
count Number of items to show. 10
template Template used to show the items. kbSummary, questions, motions, mySummary, proposals summary

Shows issues restricted to current user with page navigation.

{@ myissues : status [ : context [ : categoryId [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, onwork
context Elephant context for links.
categoryId Category identifier. 0
dossierId Dossier identifier. 0
count Number of items to show. 10
template Template used to show the items. kbSummary, questions, motions, mySummary, proposals summary

Shows issues restricted to current user without navigation.

{@ myissues-summary : status [ : context [ : categoryId [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, onwork
context Elephant context for links.
categoryId Category identifier. 0
dossierId Dossier identifier. 0
count Number of items to show. 10
template Template used to show the items. kbSummary, questions, motions, mySummary, proposals summary

Shows issues where current user participates as assistant, with page navigation.

{@ assisted-issues : status [ : context [ : categoryId [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, onwork
context Elephant context for links.
categoryId Category identifier. 0
dossierId Dossier identifier. 0
count Number of items to show. 10
template Template used to show the items. kbSummary, questions, motions, mySummary, proposals summary

Shows issues where current user participates as assistant, without navigation.

{@ assisted-issue-summary : status [ : context [ : categoryId [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, onwork
context Elephant context for links.
categoryId Category identifier. 0
dossierId Dossier identifier. 0
count Number of items to show. 10
template Template used to show the items. kbSummary, questions, motions, mySummary, proposals summary

Shows dossiers with page navigation.

{@ dossiers : status [ : context [ : categoryIds [,categoryIds...] [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
dossierId Dossier identifier.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers without navigation.

{@ dossier-summary : status [ : context [ : categoryIds [,categoryIds...] [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
dossierId Dossier identifier.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current user pparticipates, with page navigation.

{@ mydossiers : status [ : context [ : categoryIds [,categoryIds...] [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
dossierId Dossier identifier.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current user pparticipates, without navigation.

{@ mydossier-summary : status [ : context [ : categoryIds [,categoryIds...] [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
dossierId Dossier identifier.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current user directly participates, with page navigation.

{@ direct-dossiers : status [ : context [ : categoryIds [,categoryIds...] [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current user directly participates, without navigation.

{@ direct-dossier-summary : status [ : context [ : categoryIds [,categoryIds...] [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current's co-workers directly participate, with page navigation.

{@ related-dossiers : status [ : context [ : categoryIds [,categoryIds...] [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
dossierId Dossier identifier.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current's co-workers directly participate, without navigation.

{@ related-dossier-summary : status [ : context [ : categoryIds [,categoryIds...] [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
dossierId Dossier identifier.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current user has pending votes on worths.

{@ pending-vote : context : phase : worths [,worths...] [ : categoryIds [,categoryIds...] [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
phase Only items in phase type.
worths Identifiers of the worths to show.
categoryIds Category identifiers.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Lists categories in a tree format.

{@ categories : status [ : context [ : categoryIds [,categoryIds...] [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
template Template used to show the items. full

Writes web path from dossier or issue entities.

{@ web-path : path }
Atributs Descripció Opcions Per defecte
path

Creates an editable form with dossier data.

{@ edit-dossier : id [ : template ] }
Atributs Descripció Opcions Per defecte
id Identifier.
template Template used to show the items. editDossier

Creates an editable form for a new issue.

{@ create-issue : redirect [ : dossierId [ : template ] ] }
Atributs Descripció Opcions Per defecte
redirect Context where to redirect after the operation, usually saving.
dossierId Dossier identifier.
template Template used to show the items. create

Creates an editable form for question specific type of issue.

{@ edit-question : id : redirect [ : type [ : template ] ] }
Atributs Descripció Opcions Per defecte
id Identifier.
redirect Context where to redirect after the operation, usually saving.
type Only items with type. TYPE_QUESTION
template Template used to show the items. editQuestion

Creates an editable form with basic actions for adding information to an existing issue.

{@ issue-add-info : id [ : template [ : redirect ] ] }
Atributs Descripció Opcions Per defecte
id Identifier.
template Template used to show the items. addinfo
redirect Context where to redirect after the operation, usually saving.

Elephant
Polls are by default restricted

Due the fact that polls are related to other entities, polls are always restricted to user participation or observation of those entities. The public attribute refers to the attachments.

Elephant
Macro parser

Shows polls for current user with page navigation.

{@ polls [ : count [ : public ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
public Show only public content. true

Shows polls for current user without navigation.

{@ poll-list [ : count [ : public ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
public Show only public content. true

Renders the timer tracker control. When an entity path is given, returns the link to the control.

{@ time-tracker [ : entityPath ] }
Atributs Descripció Opcions Per defecte
entityPath Path to a entity.

{@ anonymous }

{@ last-activity [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ last-activity-summary [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Financials
User shopping

The site cart can be fully implement using cart related macros. See Adding a shopping cart context to an Elephant site.

Financials
Macro parser

Shows contracts with page navigation.

{@ contracts [ : context [ : count [ : intervention ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links. /user/contracts
count Number of items to show. 10
intervention Only contracts where current user has intervention. true

Shows contracts without navigation.

{@ contract-list [ : context [ : count [ : intervention ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links. /user/contracts
count Number of items to show. 10
intervention Only contracts where current user has intervention. true

Shows contracts of specific type with page navigation.

{@ contract-type [ : context [ : count [ : intervention [ : type [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links. /user/contracts
count Number of items to show. 10
intervention Only contracts where current user has intervention. true
type Only items with type. 0
template Template used to show the items. summary

Shows contracts of specific type without navigation.

{@ contract-type-list [ : context [ : count [ : intervention [ : type [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links. /user/contracts
count Number of items to show. 10
intervention Only contracts where current user has intervention. true
type Only items with type. 0
template Template used to show the items. summary

Cart's checkout form.

{@ checkout }

Clean cart content. Allows to create a context with after-clean actions.

{@ clean-cart }

Lists products with page navigation.

{@ products : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

Lists products without navigation.

{@ product-list : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

Lists promoted products with page navigation.

{@ promoted : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

Lists promoted products without navigation.

{@ promoted-list : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

Creates an unordered linkable list of product names.

{@ product-name : context : ids [,ids...] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
ids Identifiers.

Creates a comma separated linkable list of product names.

{@ product-name-list : context : ids [,ids...] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
ids Identifiers.

Shows product or sum of products' price.

{@ product-price : format : ids [,ids...] }
Atributs Descripció Opcions Per defecte
format Format used to show the value.
ids Identifiers.

Cart form.

{@ cart : shopping [ : template ] }
Atributs Descripció Opcions Per defecte
shopping Shopping mode.
template Template used to show the items. cart

Publications
How images are selected in image templates?

Publication macros provide several image templates. Because a publication macro lists a number of publications, images can't be selected individually. By default, the shown images are those in the root publishable folder. For other conventions see anchor.

The exception, the grid template

The grid template depends on a single image and uses the priorized folder. More information about publishable folders in anchor.

Publications
Macro parser

Lists publications with page navigation.

{@ publication : context [ : groupId [ : categoryId [ : count [ : template [ : lang ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
groupId Group identifier. 0
categoryId Category identifier. 0
count Number of items to show. 10
template Template used to show the items. entryTitleImage, entry, eventTitle, eventTitleImage, grid, event, entryTitle summary
lang Elephant language.

Lists publications without navigation.

{@ publication-summary : context [ : groupId [ : categoryId [ : count [ : template [ : lang ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
groupId Group identifier. 0
categoryId Category identifier. 0
count Number of items to show. 10
template Template used to show the items. entryTitleImage, entry, eventTitle, eventTitleImage, grid, event, entryTitle summary
lang Elephant language.

Shows a full publication.

{@ single-publication : id [ : template ] }
Atributs Descripció Opcions Per defecte
id Identifier.
template Template used to show the items. full

Students
Why do I want non restricted challenges?

Due the fact that challenges are intended to generate a response, should be not so important to make them visible to registered users. Responses to those challenges are strongly restricted to specific users.

Students
Macro parser

{@ challenges : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

{@ challenges-summary : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

{@ mychallenges : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

{@ mychallenges-summary : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

{@ jobboard : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ jobboard-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ myjobboard : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ myjobboard-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ lastjobboard : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ lastjobboard-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ mylastjobboard : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ mylastjobboard-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Documentation

Documentation macros are internal specific macros used to document elephant macros themselves and other BrightSide related macros.

This page is an example of using documentation macros. The following tables are generated by elephant-macros macro. Used as {@elephant-macros:Documentation}.

Documentation
Macro parser

Shows content providers. Mainly used in newsletters' external sections (External macros).

{@ provider-macros [ : doc-properties [ : tmpl-root [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
doc-properties Properties file for documentation. */documentation
tmpl-root Templates root. documentation
template Template used to show the items. providerMacros

Contacts social groups (Social Groups).

{@ social-groups [ : doc-properties [ : tmpl-root [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
doc-properties Properties file for documentation. */documentation
tmpl-root Templates root. documentation
template Template used to show the items. socialGroups

Shows Elephant macros.

{@ elephant-macros : parser [ : headers [ : doc-properties [ : tmpl-root [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
parser Parser name. all
headers true
doc-properties Properties file for documentation. */documentation
tmpl-root Templates root. documentation
template Template used to show the items. elephantMacros

{@ elephant-emojis [ : tmpl-root [ : template ] ] }
Atributs Descripció Opcions Per defecte
tmpl-root Templates root. documentation
template Template used to show the items. providerEmojis

{@ elephant-icons [ : tmpl-root [ : template ] ] }
Atributs Descripció Opcions Per defecte
tmpl-root Templates root. documentation
template Template used to show the items. providerIcons

Shows Elephant indicators.

{@ elephant-indicators : indicator [ : headers [ : doc-properties [ : tmpl-root [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
indicator Indicator name. all
headers true
doc-properties Properties file for documentation. */documentation
tmpl-root Templates root. documentation
template Template used to show the items. elephantIndicators

Macro summary

Current summary reflects only those macros related to modules. Next step will be move the whole set of macros to the self-explained API. Current page is rendered with elephant-macros, used as {@elephant-macros:all}.

Attachments
Macro parser

Shows the attachments from a specific entity.

{@ attachment : entityPath [ : template ] }
Atributs Descripció Opcions Per defecte
entityPath Path to a entity.
template Template used to show the items. editableTree tree

Shows the attachments from a specific entity in readonly mode.

{@ attachment-ro : entityPath [ : template ] }
Atributs Descripció Opcions Per defecte
entityPath Path to a entity.
template Template used to show the items. tree-ro

Shows the attachments from a specific entity in readonly mode, after accepting site terms.

{@ attachment-rot : entityPath [ : template ] }
Atributs Descripció Opcions Per defecte
entityPath Path to a entity.
template Template used to show the items. tree-rot

Shows the attachments from current user.

{@ self-attachments [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. tree

Shows the attachments from current user in readonly mode.

{@ self-attachments-ro [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. tree-ro

Shows the attachments from current user in readonly mode, after accepting site terms.

{@ self-attachments-rot [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. tree-rot

Calendar
Macro parser

Renders calendar URL for current user.

{@ calendar : type }
Atributs Descripció Opcions Per defecte
type Only items with type. url

Contacts
Macro parser

Lists groups in a tree format.

{@ groups : context : group-category }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
group-category Category identifier of the groups.

Lists contacts with page navigation.

{@ contacts [ : count [ : syndicationId [ : summaryTemplate [ : context [ : fullTemplate ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
syndicationId Sindication code. See Social Groups in Contacts.
summaryTemplate Template used to show the items in summary mode. summary
context Elephant context for links.
fullTemplate Template used to show one items in full mode. full

{@ contacts-summary [ : count [ : syndicationId [ : summaryTemplate [ : context [ : fullTemplate ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
syndicationId Sindication code. See Social Groups in Contacts.
summaryTemplate Template used to show the items in summary mode. summary
context Elephant context for links.
fullTemplate Template used to show one items in full mode. full

Lists contacts in grouping with page navigation.

{@ contacts-by-group [ : count [ : groupings [ : summaryTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
groupings Items groupings.
summaryTemplate Template used to show the items in summary mode. summary

Lists contacts in grouping without navigation.

{@ contacts-by-group-summary [ : count [ : groupings [ : summaryTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
groupings Items groupings.
summaryTemplate Template used to show the items in summary mode. summary

Shows contact count.

{@ contactcount [ : syndicationId ] }
Atributs Descripció Opcions Per defecte
syndicationId Sindication code. See Social Groups in Contacts.

Lists contacts with specific connector value with page navigation.

{@ contacts-connector : count : connector [ : value [,value...] [ : summaryTemplate [ : context [ : fullTemplate ] ] ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
connector Connector name.
value Value to search for.
summaryTemplate Template used to show the items in summary mode. summary
context Elephant context for links.
fullTemplate Template used to show one items in full mode. full

Lists contacts with specific connector value without navigation.

{@ contacts-connector-summary : count : connector [ : value [,value...] [ : summaryTemplate [ : context [ : fullTemplate ] ] ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
connector Connector name.
value Value to search for.
summaryTemplate Template used to show the items in summary mode. summary
context Elephant context for links.
fullTemplate Template used to show one items in full mode. full

Shows a text depending on whether user's my-data is valid or not.

{@ my-data : valid : not-valid }
Atributs Descripció Opcions Per defecte
valid
not-valid

Creates an editable form for web descriptors.

{@ describe-it : entityPath [ : id ] }
Atributs Descripció Opcions Per defecte
entityPath Path to a entity.
id Identifier. Default

Convocation check interface for attendance control.

{@ convocation-check [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. check

Shows convocations with page navigation.

{@ convocations : mode [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, closed, open
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows convocations without navigation.

{@ convocation-summary : mode [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, closed, open
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows public and user's convocations with page navigation.

{@ myconvocations : mode [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, closed, open
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows public and user's convocations without navigation.

{@ myconvocation-summary : mode [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, closed, open
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows public convocations with page navigation.

{@ public-convocations : mode [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, closed, open
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows public convocations without navigation.

{@ public-convocation-summary : mode [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, closed, open
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ old-directory [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

Renders the directory context.

{@ directory [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ directory-summary [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ directory-ranking [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ directory-summary-ranking [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ directory-restricted [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ directory-summary-ranking-restricted [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ directory-ranking-restricted [ : type [,type...] [ : context [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications-summary [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications-ranking [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications-summary-ranking [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications-restricted [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications-summary-ranking-restricted [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

{@ syndications-ranking-restricted [ : type [,type...] [ : syndicationId [ : context [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
type Only items with type. all, typed, companies, professionals, centers, students, educators, singletons all
syndicationId Sindication code. See Social Groups in Contacts.
context Elephant context for links.
count Number of items to show. 12
template Template used to show the items. summary

Shows services with page navigation.

{@ services : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows services without navigation.

{@ service-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows user's company services with page navigation.

{@ myservices : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows user's company services without navigation.

{@ myservice-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows last services with page navigation.

{@ lastservices : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows last services without navigation.

{@ lastservice-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows user's company last services with page navigation.

{@ mylastservices : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Shows user's company last services without navigation.

{@ mylastservice-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ register [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. signup

{@ profile : contactIds [ : template ] }
Atributs Descripció Opcions Per defecte
contactIds
template Template used to show the items. summary

{@ myprofile [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. profile

Core
Macro parser

Expands into web application's context.

{@ webroot }

Expends into site name.

{@ site }

Shows current rendering context.

{@ rendering }

Elephant language.

{@ lang }

Calls modules' user summaries and show the results.

{@ user-summary [ : mode ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. init

{@ user-contents }

Reads and renders file content.

{@ include : content-file }
Atributs Descripció Opcions Per defecte
content-file System file to show.

Writes parameter with name value or default when null.

{@ param : name [ : default ] }
Atributs Descripció Opcions Per defecte
name Attribute name.
default Default value.

Renders context content. If stopper is set to true, stops when finding a line starting with .

{@ render : context [ : stopper ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
stopper Whether rendering should stop.

Writes current date, time or both using diferent localized formats.

{@ date [ : mode [ : format ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. date, all, time date
format Format used to show the value. short, medium, long, full short

Renders the feed at url.

{@ feed : url }
Atributs Descripció Opcions Per defecte
url Uniform Resource Locator.

Creates an Elephant marker within context with name. Elephant markers are initialized with correct locale and constructor as variable.

{@ marker : tmpl-root : template : value-map }
Atributs Descripció Opcions Per defecte
tmpl-root Templates root.
template Template used to show the items.
value-map Values using the form variable=value separated by ;

Creates an Elephant marker within context with name. The repository-file is stored in props.

{@ marker-props : tmpl-root : template : repository-file }
Atributs Descripció Opcions Per defecte
tmpl-root Templates root.
template Template used to show the items.
repository-file Name of the repository file.

Creates an Elephant marker within context with name. The repository-file is stored in doc.

{@ marker-xml : tmpl-root : template : repository-file }
Atributs Descripció Opcions Per defecte
tmpl-root Templates root.
template Template used to show the items.
repository-file Name of the repository file.

Creates an Elephant marker within context with name. The repository-file is stored in json.

{@ marker-json : tmpl-root : template : repository-file }
Atributs Descripció Opcions Per defecte
tmpl-root Templates root.
template Template used to show the items.
repository-file Name of the repository file.

Writes a json array of files matching path and pattern. The array can be as is, sorted or shuffled.

{@ files : folder : pattern : mode }
Atributs Descripció Opcions Per defecte
folder Folder location.
pattern The pattern items must match.
mode Mode to use. normal, sort, shuffle

Creates a frame with url content. If url starts with '/' application context is automatically inserted.

{@ frame : url : width : height }
Atributs Descripció Opcions Per defecte
url Uniform Resource Locator.
width CSS style width.
height CSS style height.

Gets resource value and renders as mode. Mode is an integer optional parameter.

{@ res : resource-key [ : string-mode ] }
Atributs Descripció Opcions Per defecte
resource-key Key used to locate de resource.
string-mode Possible values are: 0 No transform, 1 Capitalized, 2 To upper case, 3 To lower case. 0

{@ i18n : resource [ : string-mode ] }
Atributs Descripció Opcions Per defecte
resource
string-mode Possible values are: 0 No transform, 1 Capitalized, 2 To upper case, 3 To lower case. 0

Writes a random number starting at zero and up to limit minus one.

{@ random : random-limit }
Atributs Descripció Opcions Per defecte
random-limit Random values ceil.

Elephant context for links.

{@ context : level }
Atributs Descripció Opcions Per defecte
level Number of the item level.

Writes currently logged user's name, identifier or email.

{@ user [ : mode ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. name, id, email name

Writes true or false expressions depending on whether role:attribute pair are satisfied.

{@ if : role : attribute : true-expression : false-expression }
Atributs Descripció Opcions Per defecte
role Entity role part.
attribute Permission part.
true-expression When comparison is true.
false-expression When comparison is false.

Writes true or false expressions depending on whether cookie value equals value.

{@ ifcookie : cookie : value : true-expression : false-expression }
Atributs Descripció Opcions Per defecte
cookie Cookie name.
value Value to search for.
true-expression When comparison is true.
false-expression When comparison is false.

Writes true or false expressions depending on whether class could be instantiated.

{@ class : class-name : true-expression : false-expression }
Atributs Descripció Opcions Per defecte
class-name Java class name.
true-expression When comparison is true.
false-expression When comparison is false.

Writes true or false expressions depending on whether value1 equals value2.

{@ equals : value : value : true-expression : false-expression }
Atributs Descripció Opcions Per defecte
value Value to search for.
value Value to search for.
true-expression When comparison is true.
false-expression When comparison is false.

Renders object's attribute as string. object can also be an entityPath.

{@ object : ref-object : attribute }
Atributs Descripció Opcions Per defecte
ref-object Attribute name holding the object or an entityPath.
attribute Renders attribute's value as string.

Renders attribute's value as string.

{@ attribute : attribute [ : format ] }
Atributs Descripció Opcions Per defecte
attribute Renders attribute's value as string.
format Format used to show the value.

Renders entity using name and description.

{@ entity : entityPath : fmt-name-desc }
Atributs Descripció Opcions Per defecte
entityPath Path to a entity.
fmt-name-desc Format, as in String.format(), with entity name and description as parameters.

Renders the entity represented by path calling plugin and using template if specified.

{@ entity-ctrl : plugin : entityPath [ : template ] }
Atributs Descripció Opcions Per defecte
plugin Plugin name.
entityPath Path to a entity.
template Template used to show the items.

Writes cookie value. If optional value is defined, then sets cookie value.

{@ cookie : name [ : value ] }
Atributs Descripció Opcions Per defecte
name Attribute name.
value Value to be set when defined.

Indicator name.

{@ indicator : storeClass : indicatorClass : entityPath : indicator [ : relatedPath ] }
Atributs Descripció Opcions Per defecte
storeClass
indicatorClass
entityPath Path to a entity.
indicator Indicator name.
relatedPath

{@ entry-point : identifier [ : values ] }
Atributs Descripció Opcions Per defecte
identifier
values

DAO
Macro parser

Creates an instance of a search form. Iterators use these instances to provide search capabilities.

{@ dao-search : context }
Atributs Descripció Opcions Per defecte
context Elephant context for links.

Documentation
Macro parser

Shows content providers. Mainly used in newsletters' external sections (External macros).

{@ provider-macros [ : doc-properties [ : tmpl-root [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
doc-properties Properties file for documentation. */documentation
tmpl-root Templates root. documentation
template Template used to show the items. providerMacros

Contacts social groups (Social Groups).

{@ social-groups [ : doc-properties [ : tmpl-root [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
doc-properties Properties file for documentation. */documentation
tmpl-root Templates root. documentation
template Template used to show the items. socialGroups

Shows Elephant macros.

{@ elephant-macros : parser [ : headers [ : doc-properties [ : tmpl-root [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
parser Parser name. all
headers true
doc-properties Properties file for documentation. */documentation
tmpl-root Templates root. documentation
template Template used to show the items. elephantMacros

{@ elephant-emojis [ : tmpl-root [ : template ] ] }
Atributs Descripció Opcions Per defecte
tmpl-root Templates root. documentation
template Template used to show the items. providerEmojis

{@ elephant-icons [ : tmpl-root [ : template ] ] }
Atributs Descripció Opcions Per defecte
tmpl-root Templates root. documentation
template Template used to show the items. providerIcons

Shows Elephant indicators.

{@ elephant-indicators : indicator [ : headers [ : doc-properties [ : tmpl-root [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
indicator Indicator name. all
headers true
doc-properties Properties file for documentation. */documentation
tmpl-root Templates root. documentation
template Template used to show the items. elephantIndicators

Dossier
Macro parser

Shows issues with page navigation.

{@ issues : status [ : context [ : categoryId [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, onwork
context Elephant context for links.
categoryId Category identifier. 0
dossierId Dossier identifier. 0
count Number of items to show. 10
template Template used to show the items. kbSummary, questions, motions, mySummary, proposals summary

Shows issues without navigation.

{@ issue-summary : status [ : context [ : categoryId [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, onwork
context Elephant context for links.
categoryId Category identifier. 0
dossierId Dossier identifier. 0
count Number of items to show. 10
template Template used to show the items. kbSummary, questions, motions, mySummary, proposals summary

Shows issues restricted to current user with page navigation.

{@ myissues : status [ : context [ : categoryId [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, onwork
context Elephant context for links.
categoryId Category identifier. 0
dossierId Dossier identifier. 0
count Number of items to show. 10
template Template used to show the items. kbSummary, questions, motions, mySummary, proposals summary

Shows issues restricted to current user without navigation.

{@ myissues-summary : status [ : context [ : categoryId [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, onwork
context Elephant context for links.
categoryId Category identifier. 0
dossierId Dossier identifier. 0
count Number of items to show. 10
template Template used to show the items. kbSummary, questions, motions, mySummary, proposals summary

Shows issues where current user participates as assistant, with page navigation.

{@ assisted-issues : status [ : context [ : categoryId [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, onwork
context Elephant context for links.
categoryId Category identifier. 0
dossierId Dossier identifier. 0
count Number of items to show. 10
template Template used to show the items. kbSummary, questions, motions, mySummary, proposals summary

Shows issues where current user participates as assistant, without navigation.

{@ assisted-issue-summary : status [ : context [ : categoryId [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, onwork
context Elephant context for links.
categoryId Category identifier. 0
dossierId Dossier identifier. 0
count Number of items to show. 10
template Template used to show the items. kbSummary, questions, motions, mySummary, proposals summary

Shows dossiers with page navigation.

{@ dossiers : status [ : context [ : categoryIds [,categoryIds...] [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
dossierId Dossier identifier.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers without navigation.

{@ dossier-summary : status [ : context [ : categoryIds [,categoryIds...] [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
dossierId Dossier identifier.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current user pparticipates, with page navigation.

{@ mydossiers : status [ : context [ : categoryIds [,categoryIds...] [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
dossierId Dossier identifier.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current user pparticipates, without navigation.

{@ mydossier-summary : status [ : context [ : categoryIds [,categoryIds...] [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
dossierId Dossier identifier.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current user directly participates, with page navigation.

{@ direct-dossiers : status [ : context [ : categoryIds [,categoryIds...] [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current user directly participates, without navigation.

{@ direct-dossier-summary : status [ : context [ : categoryIds [,categoryIds...] [ : count [ : template ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current's co-workers directly participate, with page navigation.

{@ related-dossiers : status [ : context [ : categoryIds [,categoryIds...] [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
dossierId Dossier identifier.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current's co-workers directly participate, without navigation.

{@ related-dossier-summary : status [ : context [ : categoryIds [,categoryIds...] [ : dossierId [ : count [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
dossierId Dossier identifier.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Shows dossiers where current user has pending votes on worths.

{@ pending-vote : context : phase : worths [,worths...] [ : categoryIds [,categoryIds...] [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
phase Only items in phase type.
worths Identifiers of the worths to show.
categoryIds Category identifiers.
count Number of items to show. 10
template Template used to show the items. projects, dossiers summary

Lists categories in a tree format.

{@ categories : status [ : context [ : categoryIds [,categoryIds...] [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
status Only items with status. all, closed, frozen, not-frozen, onwork
context Elephant context for links.
categoryIds Category identifiers.
template Template used to show the items. full

Writes web path from dossier or issue entities.

{@ web-path : path }
Atributs Descripció Opcions Per defecte
path

Creates an editable form with dossier data.

{@ edit-dossier : id [ : template ] }
Atributs Descripció Opcions Per defecte
id Identifier.
template Template used to show the items. editDossier

Creates an editable form for a new issue.

{@ create-issue : redirect [ : dossierId [ : template ] ] }
Atributs Descripció Opcions Per defecte
redirect Context where to redirect after the operation, usually saving.
dossierId Dossier identifier.
template Template used to show the items. create

Creates an editable form for question specific type of issue.

{@ edit-question : id : redirect [ : type [ : template ] ] }
Atributs Descripció Opcions Per defecte
id Identifier.
redirect Context where to redirect after the operation, usually saving.
type Only items with type. TYPE_QUESTION
template Template used to show the items. editQuestion

Creates an editable form with basic actions for adding information to an existing issue.

{@ issue-add-info : id [ : template [ : redirect ] ] }
Atributs Descripció Opcions Per defecte
id Identifier.
template Template used to show the items. addinfo
redirect Context where to redirect after the operation, usually saving.

Elephant
Macro parser

Shows polls for current user with page navigation.

{@ polls [ : count [ : public ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
public Show only public content. true

Shows polls for current user without navigation.

{@ poll-list [ : count [ : public ] ] }
Atributs Descripció Opcions Per defecte
count Number of items to show. 10
public Show only public content. true

Renders the timer tracker control. When an entity path is given, returns the link to the control.

{@ time-tracker [ : entityPath ] }
Atributs Descripció Opcions Per defecte
entityPath Path to a entity.

{@ anonymous }

{@ last-activity [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ last-activity-summary [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Financials
Macro parser

Shows contracts with page navigation.

{@ contracts [ : context [ : count [ : intervention ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links. /user/contracts
count Number of items to show. 10
intervention Only contracts where current user has intervention. true

Shows contracts without navigation.

{@ contract-list [ : context [ : count [ : intervention ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links. /user/contracts
count Number of items to show. 10
intervention Only contracts where current user has intervention. true

Shows contracts of specific type with page navigation.

{@ contract-type [ : context [ : count [ : intervention [ : type [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links. /user/contracts
count Number of items to show. 10
intervention Only contracts where current user has intervention. true
type Only items with type. 0
template Template used to show the items. summary

Shows contracts of specific type without navigation.

{@ contract-type-list [ : context [ : count [ : intervention [ : type [ : template ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links. /user/contracts
count Number of items to show. 10
intervention Only contracts where current user has intervention. true
type Only items with type. 0
template Template used to show the items. summary

Cart's checkout form.

{@ checkout }

Clean cart content. Allows to create a context with after-clean actions.

{@ clean-cart }

Lists products with page navigation.

{@ products : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

Lists products without navigation.

{@ product-list : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

Lists promoted products with page navigation.

{@ promoted : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

Lists promoted products without navigation.

{@ promoted-list : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

Creates an unordered linkable list of product names.

{@ product-name : context : ids [,ids...] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
ids Identifiers.

Creates a comma separated linkable list of product names.

{@ product-name-list : context : ids [,ids...] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
ids Identifiers.

Shows product or sum of products' price.

{@ product-price : format : ids [,ids...] }
Atributs Descripció Opcions Per defecte
format Format used to show the value.
ids Identifiers.

Cart form.

{@ cart : shopping [ : template ] }
Atributs Descripció Opcions Per defecte
shopping Shopping mode.
template Template used to show the items. cart

Navigation
Macro parser

Renders a bread crumbs navigator as an HTML unordered list.

{@ navigator : location }
Atributs Descripció Opcions Per defecte
location Navigator mode.

Renders a traversal navigator as an HTML table with three columns.

{@ navigator : traversal [ : show-title ] }
Atributs Descripció Opcions Per defecte
traversal Navigator mode.
show-title When true, renders context name as well. false

Renders a menu as HTML unordered list. level tells starting at which level options are shown. preloaded indicates how many children are to be shown.

{@ navigator : options : decorators : level : preloaded [ : show-current ] }
Atributs Descripció Opcions Per defecte
options Navigator mode.
decorators When true, aditional DIVs are added at top and bottom.
level Number of the item level.
preloaded Number of preloaded children.
show-current When true, children passing preloaded value will show along with ancestors and siblings, as opposed to not showing any child with level over level + preloaded. true

Renders a tabulator as HTML unordered list. level tells at which level tabs are shown.

{@ navigator : tabulator : level }
Atributs Descripció Opcions Per defecte
tabulator Navigator mode.
level Number of the item level.

Renders a web map.

{@ webmap [ : level ] }
Atributs Descripció Opcions Per defecte
level Tells until which level contexts are shown. 1

Renders a list of selectable contexts.

{@ list : behavioural_keywords [,behavioural_keywords...] : navigational_keywords [,navigational_keywords...] : selection_keywords [,selection_keywords...] }
Atributs Descripció Opcions Per defecte
behavioural_keywords Keywords controlling how information displays. popup, external, hidden, verbose
navigational_keywords Keywords to navigate Elephant contexts. parent, locate, level, root, match
selection_keywords Keywords actually returning contexts. all, siblings, search, children, self, leaf, ancestors

Renders a line of selectable contexts.

{@ anchor : behavioural_keywords [,behavioural_keywords...] : navigational_keywords [,navigational_keywords...] : selection_keywords [,selection_keywords...] }
Atributs Descripció Opcions Per defecte
behavioural_keywords Keywords controlling how information displays. popup, external, hidden, verbose
navigational_keywords Keywords to navigate Elephant contexts. parent, locate, level, root, match
selection_keywords Keywords actually returning contexts. all, siblings, search, children, self, leaf, ancestors

Publications
Macro parser

Lists publications with page navigation.

{@ publication : context [ : groupId [ : categoryId [ : count [ : template [ : lang ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
groupId Group identifier. 0
categoryId Category identifier. 0
count Number of items to show. 10
template Template used to show the items. entryTitleImage, entry, eventTitle, eventTitleImage, grid, event, entryTitle summary
lang Elephant language.

Lists publications without navigation.

{@ publication-summary : context [ : groupId [ : categoryId [ : count [ : template [ : lang ] ] ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
groupId Group identifier. 0
categoryId Category identifier. 0
count Number of items to show. 10
template Template used to show the items. entryTitleImage, entry, eventTitle, eventTitleImage, grid, event, entryTitle summary
lang Elephant language.

Shows a full publication.

{@ single-publication : id [ : template ] }
Atributs Descripció Opcions Per defecte
id Identifier.
template Template used to show the items. full

Students
Macro parser

{@ challenges : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

{@ challenges-summary : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

{@ mychallenges : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

{@ mychallenges-summary : context [ : count [ : summaryTemplate [ : fullTemplate ] ] ] }
Atributs Descripció Opcions Per defecte
context Elephant context for links.
count Number of items to show. 10
summaryTemplate Template used to show the items in summary mode. summary
fullTemplate Template used to show one items in full mode. full

{@ jobboard : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ jobboard-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ myjobboard : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ myjobboard-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ lastjobboard : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ lastjobboard-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ mylastjobboard : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

{@ mylastjobboard-summary : role : type [ : context [ : count [ : template ] ] ] }
Atributs Descripció Opcions Per defecte
role Entity role part. SERVICE_SUPPLY, SERVICE_DEMAND
type Only items with type.
context Elephant context for links.
count Number of items to show. 10
template Template used to show the items. summary

Elephant Web
Macro parser

{@ wtargets : mode [ : selection [ : template ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, current all
selection true, false true
template Template used to show the items. summary, vlist, hlist summary

{@ wsolutions : mode [ : selection [ : template ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, current all
selection true, false true
template Template used to show the items. summary, vlist, hlist summary

{@ wservices : mode [ : selection [ : template ] ] }
Atributs Descripció Opcions Per defecte
mode Mode to use. all, current all
selection true, false true
template Template used to show the items. summary, vlist, hlist summary

{@ wnexts [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. summary, vlist, hlist summary

{@ wsiblings [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. summary, vlist, hlist summary

{@ wgoals [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. gsummary

{@ wcurrent [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. full

{@ witem : wtag [ : template ] }
Atributs Descripció Opcions Per defecte
wtag
template Template used to show the items. full

{@ wgoal : waction [ : template ] }
Atributs Descripció Opcions Per defecte
waction
template Template used to show the items. gfull

{@ wexternals [ : template ] }
Atributs Descripció Opcions Per defecte
template Template used to show the items. webLinks

Mail pool

Email pools are called from modules to deliver email messages. The mail pool interface is named after the calling module and stored in a file following the same rule. Using de BS Dossiers module as example:

The xml element for MailMessagePool

The xml element for MailMessagePools is a <impl interface java-class/> using org.turro.mail.impl.MailMessagePool. The attributes are:

Attribute

Description

mailhost

The mail server domain.

user

User account.

password

User password, as is. See cryptpass for a more secured method to store passwords.

cryptpass

Password encrypted. Use Tools -> Password generator to generate the encrypted string.

port

Port to connect to.

ssl

Whether use SSL protocol on connect. Server defined.

tls

Whether to encrypt content on connect. Server defined.

from

Email FROM part. Can take two valid forms:

  • Email
  • Email|Name

Example of an email pool for Gmail

<impl interface="IMailMessagePool_Dossier" java-class="org.turro.mail.impl.MailMessagePool">
  <attrib name="mailhost" value="smtp.gmail.com"/>
  <attrib name="user" value="user@gmail.com"/>
  <attrib name="cryptpass" value="xxxxxxx"/>
  <attrib name="port" value="465"/>
  <attrib name="ssl" value="true"/>
  <attrib name="tls" value="true"/>
  <attrib name="from" value="user@gmail.com|Site Comunications"/>
</impl>
Mail queue

Elephant uses a mail queue system to allow modules to send notifications, status information and publications. Each user can configure whether to receive messages from specific categories and, when available, in which period.

Module senders and user configurations


Elephant mail API

Periods

The API treats the don't want to receive these emails as a especial period, in order to remind when a user explicitly set this option. Also, categories define which periods are allowed and the default period to use when not specified. The periods are:

DONT_SEND

Do not send mails from this category.

AS_GENERATED

Send mails as they are generated by modules.

DAILY,
WEEKLY,
FORTNIGHTLY,
MONTHLY,
QUARTERLY,
EVERY_SIX_MONTHS,
YEARLY

Send a resume for this category in the specified period, in a single email.

For instance, de project activity notifications allow periods from DONT_SEND to MONTHLY, and the default period is DAILY, whilst publications allow the DONT_SEND and AS_GENERATED periods, since publications have their own scheduled senders.

User wants vs. user may want

The notifiers behavior may vary when the user hasn't specifically set a period option. User will be treated as a Participant (may want) or as an Observer (wants), depending on how module qualifies it. The following table shows how operates:

Subscription

Not set

Period set

Don't send

Wants
Participant

Don't send

Send

Don't send

May want
Observer

Send

Send

Don't send

Similar behavior applies to user's agreements. See Agreements .

To better understand the differences, lets take two examples: issue tracking and publications.

Issue tracking

Issues depend on users participation, a role sharing type of share. We know a user may want to know when an issue changes state, if he participates in this issue. The default notifier action will be try to send the notification. If the user hasn't specifically set a period option, the default category option will be used.

Publications

Publications are sent to subscribers. The notifier will send the publication to those users whom specifically have set a period option.

In all cases, when user selected DONT_SEND option for a category, no notification of this category will be sent.

Mail queue tasks

The Elephant Mail Queue API requires a task to be created for each existent period. These tasks are configured by default. The idea behind is to permit platform administrators to change things like the hour in which daily summaries are sent, the day for monthly summaries, and so forth.

Mail macros

{livelink:text-to-show:live-link}

Expands to text-to-show linked to live-link with the user auto-authenticated. Valid for a period of seven days.

{liveref:live-link}

Expands to live-link with the user auto-authenticated. Valid for a period of seven days.

{name}

Expands to the user name.

{email}

Expends to the user email. The one set as Email in contact connectors.

{friendly}

Expands to the friendly user name (using complex name).

{formal}

Expands to the formal user name (using complex name).

Images

Images aren't included in emails. Instead, images are links to the site. This means that the email client is responsible of reading them in order to be shown. Some god practices when uploading images are:

By default, files stored in publishable contexts will be transformed on uploads. The exact process do change white-spaces for hyphens and do remove any character not in the standard range. It will also try to transform punctuated vowels before removing.

Links

The recommendation for images with live links (auto-authenticated links) is:

[link({liveref:live-link})]
[img image-to-show]
[/link]

System notification queue

System queue is used to send admin notifications to site administradors, password reminders to users and more of the kind. The system queue is private, users can't change sending period. The logic used when sending is the User may want approach, which means that users will receive notifications except when explicitly set to DONT_SEND. Although administradors can set periods for this queue, it's not recommended. System notifications are better sent AS_GENERATED.

Direct emails

Elephant allows sending direct emails through the Mail API. This method is used, for instance, when sending activity emails from BrightSide Dossiers module.

Intercepting responses to direct emails

The Elephant Mail API defines a way for intercepting responses to direct emails. The method requires to declare a MailReader. The usual form to declare a MailReader is in the elephant_[module].xml file.

Processed messages will be flagged as configured in MailReader. The rest will be left as they were.

The xml element for MailReader

The xml element for MailReaders is a <impl interface java-class/> using org.turro.mail.reader.MailReader. The attributes are:

Attribute

Description

mailhost

The mail server domain.

type

The server type. Usually imap, imaps, pop3 or pop3s.

count

Number of messages to retrieve. Defaults to 50.

folder

Folder to read from. Defaults to INBOX.

user

User account.

password

User password, as is. See cryptpass for a more secured method to store passwords.

cryptpass

Password encrypted. Use Tools -> Password generator to generate the encrypted string.

port

Port to connect to.

ssl

Whether use SSL protocol on connect. Server defined.

tls

Whether to encrypt content on connect. Server defined.

flag

Flag to set if the message is processed. Defaults to SEEN.

Example for IMAP protocol on Gmail

<impl interface="IMailReader_Dossier" java-class="org.turro.mail.reader.MailReader">
  <attrib name="mailhost" value="imap.gmail.com"/>
  <attrib name="type" value="imaps"/>
  <attrib name="count" value="10"/>
  <attrib name="user" value="user@gmail.com"/>
  <attrib name="cryptpass" value="xxxxxxx"/>
  <attrib name="port" value="993"/>
  <attrib name="ssl" value="true"/>
  <attrib name="tls" value="false"/>
</impl>

Example for POP3 protocol on Gmail

<impl interface="IMailReader_Dossier" java-class="org.turro.mail.reader.MailReader">
  <attrib name="mailhost" value="pop.gmail.com"/>
  <attrib name="type" value="pop3s"/>
  <attrib name="count" value="10"/>
  <attrib name="user" value="user@gmail.com"/>
  <attrib name="cryptpass" value="xxxxxxx"/>
  <attrib name="port" value="995"/>
  <attrib name="ssl" value="true"/>
  <attrib name="tls" value="false"/>
</impl>
Matching

Elephant provides a generic API for generating matchings. Since matchings will be generated within different modules and using different Dao instances, the API provides a basic entity skeleton which is extended on the required JPA context.

Matching is closely related to Ranking . It might be regarded as a set of rankings for collections of entities. Usually, those collections are sets of contacts.

Main goals

Understanding the complexities of a multi-module approach

Using different JPA context or Dao instances with highly populated databases forces to have matching tables in the same context where are supposed to be used. The fact that indicators are kept after calculate the final ranking value, adds, if not enough, more complexity.

Matching produces values for each basis entity n times the size of the related entity set.

Keeping indicators is not a random decision. Once calculated, they can be used for other purposes. For example, statistics, entity honoring symbols and so on.

In order to achieve the expected results with the minimum effort, the Matching API provides base classes and interfaces to concentrate module and entity specifics.

How does it work?

The Matching API has the starting point using Matchings.process() static method. This is a bulk processing and starts deleting the matching table. When executing for a single entity of a specific module, uses instead Matchings.processFor(entity).

The API takes, one by one, all the module specific indicators and generate their values against the whole set of related entities. After that, generates a final entry with the calculated entity matching for each related entity. The formula is written as plain text and uses indicator's name as variables. Formulas are usually expressed as a sum of weighted indicators.

(indicator1 * weight) + (indicator2 * weight) + ...
Well explained indicators

Since indicators are script variables, it's important to have no ambiguous indicator names.

Finally, the API has some convenience methods for adding join with the related entity and ordering statements to database queries.

Matching and the entities

Matching is a both sides value. Once stressed the relation between n-A and n-B, the results can be used to show the matching from a single A to n-B, same as from a single B to n-A.


Sorting entities by matching

Matching results can be used to sort entities for their matching value to a related entity. The Matching API provides non intrusive methods for JPA queries, allowing the natural entity sort order in case there is no related entity or matching generated.

The image shows the elements at play when the related entity is an authenticated user. MatchingEntity represents the generated set of tuples containing the matching indicators and the final formula value. The matching value is sorted in descendant order as to show higher values first. In case of no matching, the fallback goes to the ranking and, finally, to entity sort order.


Microservices

Elephant Microservices is a ready-to-use component that allows machine to machine conversations among Elephant and non-Elephant implementations. The common used request language is JSON and results can be delivered in many formats.

Secured connections

Elephant Microservices can be built over a security system that will not accept requests from unknown sources. Two convenient classes are provided to ensure secured calls, SecuredClientService and SecuredServerService.

Publishing

Elephant provides system wide components to allow common access to entities. One of the advantages of this system is the ability to publish the activity using Visual elements to control whether a user has permissions to see specific data.

Publishing by condition

Elephant takes the publishing concept as a web context using an iterator with conditions. Let's say we want to publish a specific branch of dossier's categories tree. And from this branch, only those with particular conditions. Now, taking context, entity's type and conditions, we have the information necessary to feed the Publishing API:

Field

Description

Context

Web context path where the entities get published.

Entity root

The entity root as expressed in the Entities API.

Constraints

Array of conditions specific to the entity root.

Factory methods

Method

Description

getConstraint()

Returns constraint values.

getContext()

Returns web context for a given entity.

Who's benefiting from the Publishing API?

Push notifications

Modern browsers allow users to get push notifications on a large variety of devices. Despite being controlled by browsers, push notifications do not require an open browser.

Having a single specification, push notifications behavior is expected to be similar among different browser brands.

Mozilla has an updated page showing browser brands adoption https://developer.mozilla.org/en-US/docs/Web/API/Push_API

Elephant Push notifications

Elephant provides a convenience method to enable and subscribe to push notifications. A single check button will perform both actions:


Elephant push notifications control

This check button has three possible status:

Status

Description

Transition

Disabled

Browser doesn't support push notifications or user has blocked them.

To change push notifications status, see the following section.

Unchecked

No push notifications will be sent to this browser.

The user can check the button and immediately will receive a request from the browser asking whether to allow or block push notifications.

Checked

This device will be getting push notifications.

To disable push notifications, see the following section.

Browser options

In the navigation bar you will see one of these icons:

Firefox

Chrome

By clicking them, a dialog with site options will pop up. Notice that this options refer to the current site.

Firefox

Chrome

Ranking

Elephant provides a generic API for generating rankings. Since rankings will be generated within different modules and using different Dao instances, the API provides a basic entity skeleton which is extended on the required JPA context.

Main goals

Understanding the complexities of a multi-module approach

Using different JPA context or Dao instances with highly populated databases forces to have ranking tables in the same context where are supposed to be used. The fact that indicators are kept after calculate the final ranking value, adds, if not enough, more complexity.

Keeping indicators is not a random decision. Once calculated, they can be used for other purposes. For example, statistics, entity honoring symbols and so on.

In order to achieve the expected results with the minimum effort, the Ranking API provides base classes and interfaces to concentrate module and entity specifics.

How does it work?

The Ranking API has the starting point using Rankings.process() static method. This is a bulk processing and starts deleting the ranking table. When executing for a single entity of a specific module, uses instead Rankings.processFor(entity).

The API takes, one by one, all the module specific indicators and generate their values. After that, generates a final entry with the calculated entity ranking. The formula is written as plain text and uses indicator's name as variables. Formulas are usually expressed as a sum of weighted indicators.

(indicator1 * weight) + (indicator2 * weight) + ...
Well explained indicators

Since indicators are script variables, it's important to have no ambiguous indicator names.

Finally, the API has some convenience methods for adding join and ordering statements to database queries.

Dossier ranking example

Dossier ranking takes information from different modules and uses the extended syntax for indicators. The image shows class inheritance and data providing. The final result is kept in dossier module's JPA.


DossierIndicator excerpt

Indicators self-provided or from external modules.

@ElephantIndicator
public class DossierIndicator extends AbstractIndicator {

  public DossierIndicator() {
    root = "dossier";
    indicators = Arrays.asList(
            "participation", "fullParticipation", "issues", 
            "generic:stars", "generic:comments",
            "attach:attachments", "forum:topics");
  }
  
  @Override
  protected Dao createDao() {
    return new DossierPU();
  }

 ...

}

Sorting entities by ranking

Ranking results can be used to sort entities. The Ranking API provides non intrusive methods for JPA queries, allowing the natural entity sort order in case there is no ranking generated.

The image shows the elements at play. RankingEntity represents the generated set of tuples containing the ranking indicators and the final formula value. The ranking value is sorted in descendant order as to show higher values first.


Security

Elephant Security System is used to isolate contents based on user granted permissions. The content is generated at server side based on this security system.

Basic security points

Passwords

Elephant uses a symmetric cipher with a unique key pair, to produce the ciphertext to be stored.

Before stored, the application measures the password strength and shows the result as a percentage. The rules for measuring the strength are:

isInRole method

Elephant provides isInRole convenience method to check user assigned points. The method takes as string parameter with a permission checking syntax.

The scripts also provide a facade map named rolemap. The checking syntax will be rolemap['root:permission'].

See [ Social groups, Permissions, Scripting, Actors, Concept permissions, Superuser ]

Social groups

Social groups propagate into static, application-wide permissions. Users syndicated to socials groups will also be granted with the related permissions.

Elephant comes with a ready-to-use set of social groups, associated to roles with fine-grained permissions. The following table is auto-generated with the current version. The identifier is the internal form of the social group. Syndicate shows nested social groups. Roles are the set of permissions granted with the social group. Each role has a popup showing the fine-grained permissions, where no-popup would mean no-permissions. Tags is no longer used, since contacts module already provides a tag-kind-of navigating among social groups.

Inheritance

Socials groups marked with are subject to inheritance. Inheritance ensures that staff from a company or center will inherit the social group and its permissions. Inheritance is dynamic and takes into account current companies or centers.

Grups socials Identificador Sindicar Rols Etiquetes
Auxiliar comptable account_auxiliar IssueParticipant, Acceptance, DossierParticipant, FinancialsAccountingAuxiliar account_auxiliar
Auxiliar administració admin_auxiliar IssueParticipant, Acceptance, DossierParticipant, Contacts, FinancialsAdministrationAuxiliar admin_auxiliar
Administració administration FileAttachSelf, Administration, Acceptance, MyDocuments, AttachDelete, AttachSelf, PublicationModerator, FileAttachDelete, Contacts, ConvocationAdmin, Dossier, Financials, DossierRegistry, Crm administration
Alliance administration alliance_admin AllianceAdmin alliance
Alliance member alliance_member AllianceMember alliance
Administració d'adjunts attach_admin AttachAdmin, FileAttachAdmin admin
Administració de BrightSide brightside_admin attach_admin, financials_admin, dossier_admin, contacts_admin SchedulerAdmin, FinancialsAdmin, ContactAdmin, CrmAdmin, FileAttachAdmin, StudentAdmin, BrightSideAdmin, FinancialsModel, BusinessAdmin, DirectoryMember, DossierAdmin, ErpAdmin, PublicationAdmin, ConvocationAdmin, AttachAdmin, AcceptanceAdmin brightside
Clusters cluster IssueParticipant, FileAttachSelf, DossierParticipant, Cluster, AttachSelf cluster
Entitat col·laboradora collaborating_entity IssueParticipant, FileAttachSelf, DossierParticipant, MarketplaceMember, ContactsViewer, AttachSelf, CollaboratingEntity collaborating
Col·laboradors collaborator IssueParticipant, FileAttachSelf, Collaborator, AttachSelf collaborator
Col·laboradors privilegiats collaborator_privileged collaborator IssueParticipant, PrivilegedCollaborator, FileAttachSelf, AttachSelfValidate, DossierParticipant, Collaborator, Publication privileged, collaborator
Comercials comercial IssueParticipant, MyDocuments, DossierParticipant, Convocation, Publication, Comercial, CrmVendor comercial
Assistents a direcció comercial comercial_dir_assistant IssueParticipant, MyDocuments, DossierParticipant, Contacts, ComercialDirAssistant, Publication, Crm assistant
Direcció comercial comercial_direction IssueParticipant, MyDocuments, DossierParticipant, ComercialDirection, Contacts, Convocation, CrmAdmin, Publication comercial, direction
Cap d'informàtica computer_manager Administration, MyDocuments, Contacts, PublicationAdmin, ErpAdmin, Attach, Dossier, Financials, CrmAdmin, AcceptanceAdmin, FileAttach, ComputerManager computer
Consultors consultant Consultant consultant
Administració de contactes contacts_admin ConvocationAdmin, ContactAdmin admin
Administració de continguts content_admin BlogAdmin, PublicationAdmin, ContentManager content
Consellers counselor IssueParticipant, FileAttachSelf, DossierParticipant, Collaborator, Counselor, Publication, AttachSelf counselor
Clients customer IssueParticipant, FileAttachSelf, Customer, AttachSelf customer
Clients privilegiats customer_privileged customer IssueParticipant, FileAttachSelf, AttachSelfValidate, DossierParticipant, Customer, Publication, PrivilegedCustomer privileged, customer
Direcció direction FileAttachSelf, Erp, MyDocuments, Attach, AttachSelf, Direction, Contacts, Dossier, Financials, AcceptanceAdmin, FileAttach, Crm, Business direction
Assistents a direcció direction_assistant FileAttachSelf, Acceptance, MyDocuments, Contacts, Attach, Dossier, Financials, DirectionAssistant, DossierRegistry, AttachSelf, FileAttach, Crm assistant
Directori directory DirectoryMember directory
Administració de dossiers dossier_admin DossierAdmin, ConvocationAdmin admin
Personal employee IssueParticipant, Acceptance, MyDocuments, DossierParticipant, Employee, Contacts employee
Auxiliars d'esdeveniments event_assistant ConvocationValidate, EventAssistant event_assistant
Administració de financials financials_admin BusinessAdmin, ConvocationAdmin, FinancialsAdmin, FinancialsModel admin
Empresa del grup groupcompany IssueParticipant, GroupCompany, FileAttachSelf, DossierParticipant, AttachSelf groupcompany
Convidats guest Guest guest
Hub hub Hub hub
Suport hub hub-support HubSupport hub-support
Inversors investor Investor investor
Caps de personal manager employee Acceptance, MyDocuments, Employee, Contacts, ErpAdmin, Dossier, Manager manager, employee
Marketing marketing ContactsMarketing marketing
Marketplace marketplace MarketplaceMember marketplace
Operaris operator employee IssueParticipant, Operator, Acceptance, DossierParticipant, ErpOperator employee, operator
Socis partner IssueParticipant, FileAttachSelf, DossierParticipant, MarketplaceMember, ContactsViewer, AttachSelf, Partner partner
Patrons patron IssueParticipant, FileAttachSelf, DossierParticipant, Collaborator, Publication, AttachSelf, Patron patron
Suport a projectes projectsupport IssueParticipant, DossierParticipant projectsupport
Proveïdors provider IssueParticipant, FileAttachSelf, AttachSelf, Provider provider
Proveïdors privilegiats provider_privileged provider IssueParticipant, FileAttachSelf, AttachSelfValidate, DossierParticipant, Publication, PrivilegedProvider, Provider privileged, provider
Investigadors researcher Researcher reasearcher
Administrador d'estudiants student_admin StudentAdmin admin
Comissió de talent talent_committee IssueParticipant, FileAttachSelf, DossierParticipant, MarketplaceMember, ContactsViewer, AttachSelf, TalentCommittee talent
Socis tecnològics techpartner TechnologyPartner techpartner
Testimonis testimonial Testimonial testimonial
Administració de la web web_admin WebAdministrator web

Permissions

Permissions' definition is explained in Social groups . Simplifying, definition is set of permissions related to a root, for example dossier:list,new,edit,delete, whereas checking a permission would take the form dossier:new. In the definition we say the permissions related to dossier, when checking we ask whether it has one of those permissions.

Permissions can be ORed using |, for example dossier:list|@customer:on.

Permission root types

Fuzzy roles

Fuzzy roles are those discovered by the application and highly dependent on interactions. Represented as @fuzzy_role:is.

Fuzzy role Description
su Super user
admin The user has admin capabilities
natural The user has a current relation with a company or center.
worker The user has a current relation with a company.
professional The user has a responsible relation with a company.
student The user has a non-responsible relation with a center.
docent The user has a docent relation with a center.
responsible The user has a responsible relation with a company or center.
hhrr The user is in Human Resources.
companyhhrr The user is in company's Human Resources department.
centerhhrr The user is in center's Human Resources department.
translator The user is a language translator.
listed The user is listed in the networking directory.
networking The user is in the networking.
premium The user is in the premium networking.
singleton The user is a freelancer or a non recognized company or center.
user Comodity role for autheticated users.
outsider The user comes from an Alliance member. Could only be true in Alliance servers.

Commodity roles

Elephant includes some commodity roles, not directly related to user's role:

Comodity role Description
user:in True for authenticated users. Equal to @user:is
lang:_lang True if lang equals to active language

Some examples

Check type Syntax Example
Permissions entity-root:permission dossier:list
Roles #role:on #DossierParticipant:on
Social groups @socialGroupID:on @customer:on
Fuzzy roles @fuzzyrole:is @worker:is
Actors @actor:actor_name @actor:PartnerNetwork

Suppose a sample user assigned to Privileged Customers social group. This social group grants the DossierParticipant role, which carries dossier=list,show permissions. Therefore, dossier:show will be granted.

Scriptable permissions

This feature is in its early stages and provides a more flexible way to use the permissions starting with a @. Adds the possibility of creating complex formulas, with preferences, negations and logical operators.

Operator Description Example
| As in simple syntax, indicates OR. A or B = A | B
& Indicates AND. A and B = A & B
( and ) Indicate preference. (A and B) or C = (A & B) | C
! Indicates a negation. (A and not B) or C = (A & !B) | C
Scripting

Scripting is used by Actors , in Concept permissions and in Visual elements . The main goal is to provide an advanced way to check permissions, roles, social groups and entity related attributes.

User functions

Methods related to currently authenticated user. The scripting context initializes the variable user.

Function

Description

user.isAdmin(), user.isWorker(), user.isStudent(), user.isHhrr(), user.isResponsible(), user.isInNetworking(), user.isInternal(), user.isCompany(), user.isCenter()

True or false indicating user different statuses.

user.getBusiness()

User preferred business. Accepts the same functions as user.

user.getProfileMap().isInRole(role)

True or false if user conform the syntaxis specified in Security .

user.isActor(actor)

True or false if user is actor.

user.isActor(entity, actor)

True or false if user is actor for the given entity.

Helping functions

Function

Description

pfunc.isUser()

True or false if there is an authenticated user.

pfunc.anyOfSyndications(user, csvSyndications)

True or false if user is assigned to any of the comma separated list of syndications. See Social groups .

pfunc.anyOfGroupings(user, csvGroupings)

True or false if user is assigned to any of the comma separated list of groupings.

Per module functions

Per module attributes address those features unique to the entities in this module. Per module attributes sum to the generic attributes.

Issue, Dossier and Category

Dossier context initializes the variables dpl and issue, dossier or category. Notice that when applying constraints that uniquely refer to a project, the dossier must be of type project.

Function

Description

dossier.isDirectOwner(user), category.isDirectOwner(user)

True or false value indicating whether the user is directly assigned as owner.

dpl.isParticipant(user), dpl.isShowAllAttachments(user), dpl.isShowParticipants(user), dpl.isShowAllIssues(user),
dpl.isReceiveAllEmails(user), dpl.isBindingVote(user), dpl.isDriver(user), dpl.isCoordinator(user), dpl.isBeneficiary(user), dpl.isOfferer(user), dpl.isResearch(user), dpl.isFunding(user), dpl.isSupport(user), dpl.isConsortium(user), dpl.isAdmin(user)

True or false indicating the dossier/category participation attribute with the same name.

dpl.isOwner(user), dpl.isSubject(user)

True or false indicating the dossier/category participation attribute with the same name.

dpl.isResporter(user), dpl.isResponsible(user), dpl.isQA(user), dpl.isAssistant(user)

True or false indicating the issue participation attribute with the same name.

Helping functions

Function

Description

dfunc.anyParticipation(Object user)

True or false if the given user participates in any dossier or category.

dfunc.anyOfCategories(dossier, csvCategories)

True or false if issue, dossier or category is in any of the comma separated list of category IDs.

dfunc.anyOfPhases(dossier, csvIndexes)

True or false if issue's dossier or dossier is in any of the comma separated list of phase indexes.

dfunc.anyOfPhaseTypes(dossier, csvTypes)

True or false if issue's dossier or dossier is in any of the comma separated list of phase types, being those CREATION, INCUBATOR, VOTES, DECISION, PROPOSALS, EXECUTION and ARCHIVE.

dfunc.anyOfRoles(dpl, user, csvRoles)

True or false if user is assigned to any of the comma separated list of roles, being those PARTICIPANT_OWNER, PARTICIPANT_ASSISTANT and PARTICIPANT_SUBJECT.

dfunc.anyOfExtRoles(dpl, user, csvRoles)

True or false if user is assigned to any of the comma separated list of roles, being those showAllAttachments, showParticipants, showAllIssues, receiveAllEmails, bindingVote, driver, coordinator, beneficiary, offerer, research, funding, support, consortium, admin.

dfunc.anyOfDiscriminators(dpl, user, csvDiscriminators)

True or false if user is assigned to any of the comma separated list of discriminators.

dfunc.anyOfRoles(user, csvRoles)

True or false if user is assigned to any of the comma separated list of roles in any dossier or category, being those PARTICIPANT_OWNER, PARTICIPANT_ASSISTANT and PARTICIPANT_SUBJECT.

dfunc.anyOfExtRoles(user, csvRoles)

True or false if user is assigned to any of the comma separated list of roles in any dossier or category, being those showAllAttachments, showParticipants, showAllIssues, receiveAllEmails, bindingVote, driver, coordinator, beneficiary, offerer, research, funding, support, consortium, admin.

Script files

It is possible to use scripting files with the directive file:file_name. Scripting files are located in /WEB-INF/elephant/scripts.

Combining directives

When using file with other directives, like debug, they must be placed in the script file.

Debugging

Scripts generate no logs with errors. Starting the script with debug: indicates the Scripting API to write any error in the log file.

Actors

Actors API is a superset specification based in Security 's Scripting . The goal of this API is allowing the creation of easy-customizable application actors.

The basics

An actor is a given user complying with a group of constraints attached to the actor's name. An example would be:

PartnerNetwork=pfunc.anyOfSyndications(user, "partner,patron,contacts_admin")

The line configures the PartnerNetwork actor. In order to check if the visiting user is a PartnerNetwork, in Visuals we'll do:

user.isActor("PartnerNetwork")

Surpassing the individual

Actors API is fully compliant with the collaboration modules. We can create specific actors for a large variety of entities. An example of an actor related to dossiers or categories:

ComissionMember=dpl.isParticipant(user)

Now we could check if the visitor is a ComissionMember with:

user.isActor(dossier, "ComissionMember")

Checking a user

The BaaS service provides a view where we can check users against all defined actors. It's also possible to perform the check using an entity.

Concept permissions

Concept permissions is a convenience set of security settings, differentiated by their name (concept). Concept permissions factory should primarily be an Elephant Entity, by means of its method getConceptPermission(name). Using an Elephant Entity as a factory ensures the correct initialization of the Scripting methods.

Permission fields

Field

Description

Required

name

Used as the concept related to this set of constraints.

allow

True when the concept is allowed. Defaults to false. Usually allow controls interactions with the concept.

show

True when the concept should be shown. Defaults to false. Usually show controls visualization of the concept.

showRole

Extension to show. Defined as normal Security roles.

actionRole

Extension to allow. Defined as normal Security roles.

showScript

Extension to show. Defined as in Scripting . It is possible to use scripting files with the directive file:file_name. Scripting files are located in /WEB-INF/elephant/scripts.

actionScript

Extension to allow. Defined as in Scripting . It is possible to use scripting files with the directive file:file_name. Scripting files are located in /WEB-INF/elephant/scripts.

showActor

Extension to show. Defined as in Actors .

actionActor

Extension to allow. Defined as in Actors .

max

Used to pass a numerical value to visual controls.

order

Useful when concepts should be shown in specific order.

permissions

A set of conceptual permissions with the same structure. Used as sub-concept permissions and scalable to any level.

Superuser

The concept of a Superuser adds extra security to management users. There are two kinds of superusers, the superusers themselves, and the CloudAdmin user, addressed to cloud administrators.

Superuser functionality

A Superuser, su from now on, has access to the whole configuration set, including special management of Social Groups for contacts. Important for a su to remember:

Superuser special access

The following table shows the elements restricted to su-only-eyes.

Expanding to new elements
In the near future, more elements will be added/created for su only use. The more significant are:
  • More control over global site appearance.
  • More control over site behavior on mobile devices.
Element Description
Assign admin Social Groups Only su will be able to assign administration groups. Non-su admins will see the administration groups as disabled.
Assign su to any contact Only su will be able to assign new superusers.
Microservices servers and members Only visible for su.
Reset site settings Only visible for su.
Reset schemes Only visible for su.
Configurator Only visible for su.
Server driven contexts Only visible for su.
Layout root Only visible for su.
Sendables

Sendable has two main attributes, schedule and sent. schedule is a date and time field, representing when the entity should be sent. sent is set to TRUE when the entity has been sent. Sendable has also a list of SendableAssistant. The function of this list is the possibility to add recipients when sending.

Sendable was mainly added to schedule sending a Convocation. When programming a convocation, the assistant list is replaced by the convocation list of attendees.

Sendable on BrightSide Publications

Publications already have a sending method that suits perfectly for most cases. We should we use Sendable when we have a private category publication, with an always varying number of subscribers. We can keep the category with no subscribers and use Sendable assistants instead.

Differences between category sending method and Sendable

Category

Sendable

Mail subject is category related, since the message body can contain more than one publication.

Mail subject is the publication title.

Recipients are controlled by the category.

Recipients are Sendable assistants, unique for this publication.

The mail queue controls when publication are sent, taking into account user options when public.

The mail is sent as state in schedule attribute.

Sending a test

Sendable control allows sending an email-test. It's not required to have any sendable attribute configured, nor attendees added. The Send test to... action asks first to which contacts you want to send the test, then uses the saved entity to generate the email.

Test & Agreements

Notice that Send test to... isn't aware of user's agreements. It simply sends the email as a test.

Sitemap

Elephant is able to create a sitemap.xml file. The file is compliant with Google webmaster tools.

Auto-generated

The file is auto-generated when the BaaS administrator uses the option Tools -> Contexts. The file location is /sitemap.xml.

How it works

The sitemaps generator crawls Elephant contexts and adds those visible, that is, with no role restrictions. Also lists publications from BrightSide Publication module, and add those publications in visible groups and categories. It also adds publication images that follow the standard convention described here.

Extended URLs requirements for sitemaps

In order to generate the correct URL for specific BrightSide modules, is necessary to register a context as a web-context for the specific entity.

Elephant reads web-contexts from entity-web-context.properties file, located at WEB-INF/elephant/conf. The format of this file is entity=path. Examples:

publication=/publications
dossier=/projects

When the BrightSide Publication plugin for sitemap, expands the entity URL, uses the path defined for publication entities.

URL as parameter

Sitemaps highly depends on URL-as-parameter Elephant feature. Used mainly on BrightSide modules, the functionality is provided by the Elephant's core.

Current URL resolving state

In order to work correctly, you need to provide information to the file entity-web-context.properties, under /WEB-INF/elephant/conf. Elephant uses this information to ensure which entity is at stake. In short, entities not defined in this file wont get an URL.

As for now, the URLs are generated once, and would never change. This is in itself an issue, since users wont be able changing wrong generated URLs. On the other hand, URLs encountering problems at generation time (violating the primary key, for instance) could be easily corrected.

What happens in the background

URL-as-parameter uses the Elephant's context recede behavior. When extra path is provided, but there is no context supporting it, the context implementation moves up. Formerly, this step changed the servlet path as well. Now, simply uses this mechanism to pass the extra path to EntityWebUrls.exists().

Since entity-web-context.properties is involved, checking the full path to ensure the result is quite easy.

Skills & Tags

Skills and Tags are both different APIs and have different behaviors. Although, both share the final goals: create a transversal categorization and group transversal types of entity, otherwise ignored.

Skills

The user skill types are Knowledge, Functional and Attitude. The company or center skill types are Sector and Specialty.

For entities, all the above skill types apply.

When attached to entities, skills may have different meanings. The table below shows how to interpret skills regarding the entity they were attached.

Entity owning the skill

Interpretation

Contact

The contact owns the skill.

Convocation

The call should specify the reason: required for assistance or directed to those interested in.

Other entities

The entity requires the skill.

Tags

Tags are simple, synthetic words defining the entity. By default, entities aim to create separated sets of tags. The point is to separate tags by concept (type of entity) and by use (internal or external). Tags are all the same type.

Internal tags

When the BS Contacts was born, it owned the Tags API. Tags are mostly assigned by Social Group syndication. The final use is to easily filter contacts by their social group. Since then, even after the API independence, contact attached tags are treated as for internal use.

Social

Elephant creates Open Graph metas. By default, og:title will be the context name. Different modules may override this behavior.

Image conventions

When dealing with images, Elephant will resolve og:image using:

  1. The first PNG or JPG image in local repository, with its name ending with _social.(png|jpg).
  2. The first PNG or JPG image in local repository, with its name ending with .(png|jpg).
  3. The first PNG or JPG image in root repository, with its name ending with _def_social.(png|jpg).

In order to be a valid image, must have at least 200 pixels width or height. Images with more than 600 pixels will be considered large.

Some examples

Intention

Image

Default image for all contexts

Add a *_def_social.(png|jpg) to the root repository.

Image for a context, including root

Add a *.(png|jpg), equal or bigger than 200px higher or wider, to the context repository.

Image for a context, including root

Add a *_social.(png|jpg) to the context repository.

This examples do not apply to BrightSide modules, since single entities may have different images.

BrightSide modules

BrightSide modules implement social conventions their own way. For instance, BrightSide Publications use a convention based on repository folders (see Publication Conventions). BrightSide Dossiers and BrightSide Financials use instead the _social suffix convention.

Social image cache

Elephant maintains an image cache for social images. If you need to reset this cache, edit and save any context.

Students

Elephant Students seamlessly integrates with other Elephant and BrightSide modules. Its main purpose is to allow a Challenger to post challenges related to BrightSide entities. The Student will then be able to respond to those challenges, by itself or in a group.

Universities, deans, careers and tutors

In order to create the Students structure, some actors are essential.

The first step will be to create a University and add one or more Dean. Next, add some Career along with their Tutor.

Recognizing students

The application will recognize a potential Student because its Email connector. When creating a University we gave some domain terminations, ex. @university.edu. Whenever the user has an email ending with those termination, becomes marked as a potential Student and it's proposed to choose which careers is pursuing.

The Challengers

Platform administrators can be challengers for any Elephant or BrightSide. Each module extends the capability to be a Challenger based on how users participate.

The project challenger example

BrightSide Dossier defines as a Challenger users participating in a project. Those users are presented with a Add challenge button within the project they participate on.

What a role can see?

Role

What can see

Dean

  • The students of its university.
  • Projects (entities) they participate.
  • Responses from its students to challenges.

Tutor

  • The students pursuing its career.
  • Projects (entities) they participate.
  • Responses from its students to challenges.

Challenger, patron and partner

  • All students.
  • Projects (entities) they participate.
  • Responses from its students to challenges.

Student

  • All challenges.
  • All projects and who is participating.
  • Projects (entities) is participating.
  • His responses.
Entity viewpoint

From within an entity, the Students module provides ways of interaction, depending the user's role.


For the current example the related entity is a dossier of type Project.

Participating

A usual flow would be the student asking to participate in a project. As a result, the student will appear as a project participant and could be convocated when the project is used as convocation's entity (see Convocatòries ).


Deciding whether or not add a challenge

A challenger can add challenges despite there are or there are not, students participating. Students will see the challenges in their own challenges view. If there are students participating, the challenger will see their names and careers.


Editing the challenge

The challenger can edit the challenge by giving an unambiguous title, a rich-text description and attaching documents when required.


Deciding whether or not add a response

A student can add a response to a challenge once has read what the challenge is about.


Editing the response

The student can respond using a rich-text description, including images. Also can add other students to the response.


Challenger feedback

The final view for the challenger is a resume of all interactions and the implicated actors.


The whole interaction has been sending notifications to the interested people (see Notifications ).


Interactions


Participating


Responses


Notifications

New challenge

New response

Challenge changes

Response changes

TinkerPop

TinkerPop is an Apache project that provides the Gremlin Query Language, a beautiful piece of art. An easy way to have fun, while getting results from a graph. TinkerGraph and Gremlin Console are also part of TinkerPop.

Elephant provides a GraphML from all entities, generated with TinkerGraph. This documentation will help you get started with the Gremlin Console, and will provide some examples to use in your own data.

Gremlin queries
Gremlin can now be executed using the Gremlin Console and Groovy. The goal, though, is to have the Gremlin queries fully implemented into an Elephant project. As a result, the generation of new indicators may be the result of a Gremlin query.

Getting the entity.graphml file

Go to your User area, click on Reports, and select Entities GraphML. This will generate an email, with the entity.graphml file.

Security alert
This feature is only available to superusers.

Installing the Gremlin Console

Gremlin Console is an amazing tool that will allow you to explore your Elephant Entities like you never before thought possible.

The easiest way to install the console is using a Docker container. But you may find a more suitable way in their web page.

Running the console

Before running the console, you need to mount the folder where you will copy the GraphML file. In the example, the folder is located at /Public/tinker and we want it as /tinker inside the console.

docker run -it --rm -v ~/Public/tinker:/tinker tinkerpop/gremlin-console
This will create the standard welcome into your Gremlin console.
Nov 06, 2024 2:16:21 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin>
Now, create the graph, the traversal and load the file, in the example entity.graphml.
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> graph.io(graphml()).readGraph('/tinker/entity.graphml')
gremlin> g = traversal().withEmbedded(graph)
==>graphtraversalsource[tinkergraph[vertices:486 edges:850], standard]

Using a Groovy script

You can also save the commands in a .groovy file, and load it with the :load command.
entity.groovy file
graph = TinkerGraph.open()
graph.io(graphml()).readGraph('/tinker/entity.graphml')
g = traversal().withEmbedded(graph)
Loading the Groovy script
gremlin> :load /tinker/entity.groovy
Now you're ready to start running queries
Graph model

The Model

Along with the data graph, you can also download the model graph, which is reverse engineered from your actual data.


This is an example of model distribution.

The graph is independent of the graph model. Your data will be all included in the generated graph. The model is meant to be an extra help, to understand your data.

The Graph

These are Fruchterman Reingold layouts from the Elephant generated Graph. We used Gephi to visualize the graph, and we will be using Gremlin Console to query the graph.

Useful queries
Typified vs non-typified

Properties like phase or type are typified, accepting only certain values. Some of these queries will help you get the valid values from a specific property.

Non-typified properties, like name or title, are expected to be all different.

Possible values of contact's type

g.V().hasLabel('contact').values('type').dedup()

Possible values of dossier's phase

g.V().hasLabel('dossier').values('phase').dedup()
Contact queries

How many contacts per type?

g.V().hasLabel('contact')
     .groupCount().by('type')

How many workers per company?

g.V().hasLabel('contact').has('type', 'CONTACT_COMPANY')
     .project('Name', 'Workers').by('name').by(in('works').count())

How many workers per company, ordered from most to least?

g.V().hasLabel('contact').has('type', 'CONTACT_COMPANY')
     .project('Name', 'Workers').by('name').by(in('works').count())
     .dedup().fold().order(local).by(select('Workers'), desc)

How many students per learning center?

g.V().hasLabel('contact').has('type', 'CONTACT_LEARNINGCENTER')
     .project('Name', 'Students').by('name').by(in('studies').count())

How many docents per learning center?

g.V().hasLabel('contact').has('type', 'CONTACT_LEARNINGCENTER')
     .project('Name', 'Docents').by('name').by(in('teaches').count())

Contact's name and type

g.V().hasLabel('contact').valueMap().select('name', 'type')

Contacts' outgoing relations

g.V().hasLabel('contact').outE().inV().path().by('name').by(label)

How these two contacts are related, using business, dossiers and convocations?

g.V().hasLabel('contact').has('name','Contact 1')
     .repeat(both('participates','works','organizes','invites').simplePath())
       .until(and(
         hasLabel('contact').has('name','Contact 2'),
         loops().is(lte(10))
       ))
     .limit(20)
     .path().by('name')

Finding contact's matchings

g.V().hasLabel('contact').has('name','Contact name')
     .repeat(both('participates','works','organizes','invites','parent'))
       .until(and(hasLabel('contact').has('type','CONTACT_USER'),not(cyclicPath())))
     .limit(600)
     .path().by('name')

Sorted contact's matchings

g.V().hasLabel('contact').has('name','Contact name')
     .repeat(both('participates','works','organizes','invites','parent'))
       .until(and(hasLabel('contact').has('type','CONTACT_USER'),not(cyclicPath())))
     .limit(600)
     .tail(local)
     .groupCount().by('name')
     .order(local).by(values,desc)
Dossier queries

Participants per project

g.V().hasLabel('dossier').group().by(values('name'))
     .by(inE('participates').count()).unfold()

Projects per phase

g.V().hasLabel('dossier').group().by(values('phase')).by(count()).unfold()

Dossiers per category

g.V().hasLabel('dossier').group().by(outE('parent')
     .inV().values('name')).by(count()).unfold()

Dossiers' category

g.V().hasLabel('dossier').out('parent').path().by('name')

Dossiers' category path

g.V().hasLabel('dossier').repeat(out('parent').simplePath())
     .until(out('parent').count().is(0))
     .path().by('name')
Gephi

Gephi is an amazing visualization and exploration program for all kinds of graph and networks. It's also open-source and free. Gephi has multiple plugins, to help with graph data analysis and layouts.

You can use Gephi as a standalone application, or as a Gremlin Console plugin.

Gephi plugin

Before starting, you need to have Gephi installed. For Linux systems, preferably use the distribution installer.

Once installed, follow the Gephi plugin instructions.

Running the console

If you are using Docker, you will need to allow using the host network, where Gephi was installed.

sudo docker run -it --rm -v ~/Public/tinker:/tinker --network host tinkerpop/gremlin-console

Activating Gephi

:plugin use tinkerpop.gephi
:remote connect tinkerpop.gephi

Sending graph to Gephi

:> graph
Gremlin scripts

Elephant includes an executor of Gremlin scripts. It's not intended to substitute the Gremlin Console, and does not use Groovy, but only the Gremlin language.

Gremlin macros

Elephant includes a set of dynamic macros, in order to render Gremlin results in a fancy manner.

Gremlin
Macro processor

@{gcchart ( height , name , root ) }
Atributs Descripció Per defecte Opcions
height CSS style height.
name Attribute name.
root

@{gchart ( data , height , order , title , type ) }
Atributs Descripció Per defecte Opcions
data
height CSS style height.
order asc, desc
title
type Only items with type. line, pie

@{gcindicator ( name , root ) }
Atributs Descripció Per defecte Opcions
name Attribute name.
root

@{gckpi ( name , root ) }
Atributs Descripció Per defecte Opcions
name Attribute name.
root

@{gconcept ( class , name , root ) }
Atributs Descripció Per defecte Opcions
class Writes true or false expressions depending on whether class could be instantiated.
name Attribute name.
root

@{gctable ( name , root ) }
Atributs Descripció Per defecte Opcions
name Attribute name.
root

@{gcview ( concept , limit , root ) }
Atributs Descripció Per defecte Opcions
concept
limit
root

@{gindicator ( value ) }
Atributs Descripció Per defecte Opcions
value Value to search for.

@{gkpi ( format , now , period , then ) }
Atributs Descripció Per defecte Opcions
format Format used to show the value. percentage, difference
now
period month, year, lastYear, lastQuarter, lastSemester, lastMonth, semester, quarter
then

@{gtable ( order , rows ) }
Atributs Descripció Per defecte Opcions
order asc, desc
rows

@{gview ( entities , limit , matching , ranking , template , tmpl-root ) }
Atributs Descripció Per defecte Opcions
entities
limit
matching
ranking
template Template used to show the items.
tmpl-root Templates root.

Macro examples

These are ElephantGraph, real-data, dynamic macros examples.

Idea
Cas d'exit i entrada de portafoli de la plataforma BaaS
Crear un cas d'èxit a partir d'un usuari real, ja definit. Usar parts per a una entrada de portafoli de clients.
EL.A Incubadora
Elephant Android
Aplicació Android adaptada a webs Elephant.
DEMO.BAAS Idea
Webs de demo
Manteniment de les webs de demo del BaaS.
Phase Projects
Resolution 1
Incubator 2
Idea 9
Execution 15

How?

Preventing macros from execute
The following EWiki code adds an empty space after @ and before { to prevent the macro from executing. Remove the spaces if you're planning to use it in your site.
@w{cards(class=three)}
@ {gview(entities="projects-random",ranking="project-alltime",matching="project-relations",tmpl-root="dossier",template="project-cards",limit=3)}
@w{/cards}

@w{grid(class=two column)}

@w{column}
@w{table(class=definition)}
@w{theader(values="Phase|Projects")}
@ {gtable(rows=projects-phase)}
@w{/table}
@w{/column}

@w{column}
@ {gchart(title="Projects phase",type=pie,data=projects-phase,height=300px)} 
@w{/column}

@w{column}
@ {gchart(title="Dossier status",type=pie,data=dossier-status,height=300px)} 
@w{/column}

@w{column}
@ {gchart(title="Issues priority",type=pie,data=issues-status,height=300px)} 
@w{/column}

@w{/grid}
Visual elements

The Visual Elements API provides an affordable way to create views with user sensible data. Visual Elements relies on names given to those parts to be controlled.

The most common example arises when creating a template that needs to know who is viewing it, so can render more or less content. With Visual elements you will give a name to the sensible parts and create a configuration file. The API will do the rest.

Visual Elements is stored as a JSON file in /WEB-INF/elephant/conf and can be edited using BaaS -> Tools -> Files -> Configuration -> JSON.

Controlled attributes against user

Every visual element will be checked against user his allowed social groups, grouping values, administration attributes. As a result, the API will tell if the user can have access to the element or is a simple visitor (an authenticated user with no specific permissions for the element).

First case, insert by iteration

The method allowed(user) returns a sorted collection of allowed elements for user. Inside the template you will iterate the collection, check its name and insert the content. The sort order is also part of the API and is specified in the configuration file.

The image gives a very simplified example of iteration. Does not show how to implement the iteration within the template. Usually you will check the visual element name against the expected name for content. Example, if visual-element-name equals content-name then add the content.


Second case, check against the API

Instead of iterating a collection, you can check directly against any given name. The method getElement(name, user) returns, if allowed for user, the visual element with the given name.


The sub elements

As you probably already noticed, both cases include the possibility of sub elements. A sub element is a visual element that fully depends on its parent. The allows(name, user) returns true when the element name can be shown to user.

To understand sub elements utility, think about form actions. The parent element is an HTML form and the buttons represent actions. Using the API, each button can be conditioned by the allows(action_name, user) method.

Another example, imagine you have a determined list of users. Now, you're not sure whether show user's name and company, or only company's name. And you're quite sure this will be something that will vary among your customers. Using the API, you can relay on an easy to edit configuration file.

Adding specific entities

The whole Elephant system heavily uses entities. Entities are groups of related information and have a full Entities API to relay on. In order to use entities with the Visual Elements API, you need to implement the VisualEntityCheck interface. Consists in a single method check(property, value, entity, user) and returns a boolean.

Attributes
Some attributes are deprecated

In the long run, Scripting will completely substitute most of the Attributes within Visual Elements.

Visual elements attributes are ORed. The constraints will be interpreted as if condition A or condition B ... are fulfilled by the current user, the requesting element will be shown.

Generic attributes

Generic attributes apply to any visual element node.

Attribute

Description

Required

name

The attribute name is used in templates to identify or locate the attribute.

label

Label points to a resource key. May be used as a caption for the attribute values.

order

Is a numerical that forces the sort order of elements returned in allowed method.

role

Must conform the syntaxis specified in Security .

eval

Allows complex constraints using scripting. See Scripting .

syndications

ORed social group identifiers the user needs to be assigned to. See Social groups .

groupings

ORed contact groupings the user needs to be assigned to.

businessSyndications

ORed social group identifiers the company or center where the user belongs, needs to be assigned to. See Social groups .

businessGroupings

ORed contact groupings the company or center where the user belongs, needs to be assigned to.

visitor

The user is authenticated.

admin, worker, student, hhrr

True or false ORed constraints indicating that the user must be an administrator, a working person in a company, a student in a center or a responsible for human resources in a company or center.

subElements

Children elements of current visual element. Mainly used when a visual has subelements with constraints.

Per module attributes

Per module attributes address those features unique to the entities in this module. Per module attributes sum to the generic attributes.

Dossier and Dossier category

Attribute

Description

Required

phases

Array of ORed phases, representing current project phase.

roles

Array of ORed participation roles: PARTICIPANT_OWNER, PARTICIPANT_ASSISTANT and PARTICIPANT_SUBJECT.

discriminators

Array of ORed participation discriminators.

directOwner

True or false value indicating whether the user is directly assigned as owner.

participates

True or false value indicating whether the user is participating, despite the role or attribute assigned.

branchAdmin, showAllAttachments, showParticipants, showAllIssues,
receiveAllEmails, bindingVote, driver, coordinator, beneficiary,
offerer, research, funding, support, consortium

True or false ORed constraints indicating the participation attribute with the same name.

Web actions

Elephant Web Actions is a specification used by several components to allow an easy way to execute actions based on URIs. The specification uses an action protocol to perform internal translations. Most of the actions could be executed using url:address, the specification liberates the user to remember special addresses and adds some helping attributes, like captions and icons.

The protocols

Protocol

Exposed as

Description

NAVIGATE

nav:value

Navigates internally. The value is an internal URL.

TAG

tag:value

Navigates internally. The value is a context WebTag.

ACTION

action:value

Internal application action. Current action values are:

  • signup
  • tellsomeone

URL

url:value

Generic navigation. The value is an URL.

MAIL

mailto:value

Mail to navigation URL. The value should be an email.

TEL

tel:value

Phone call navigation URL. The value should be a phone number.

WHATS

whats:value

Whatsapp send message URL. The value should be a phone number.

TGRAM

tgram:value

Telegram send message URL. The value should be a user identifier.

Elephant WebActions API is based on WebLinks and Icons classes. In combination, they make easy to create web actions based on protocols resulting in URLs.

WebLinks

WebLinks are created using the WebAction protocol, and they expose some useful methods when creating templates.

Method

Description

getType()

Returns the WebAction type used to create the link.

getCaption()

Returns the link caption.

getUrl()

Returns the URL for this link.

getIcon()

Returns the icon value.

getHelp()

Returns an extended value for this link, to be used as help. Usually is the original URL, the phone number, the user identifier or other value depending on the protocol type.

getIcons()

Return the Icons class, explained below.

isExternal()

Returns true when the link moves to another site.

isEmpty()

Return true when the WebLink has no values.

Icons

Icons is a utility class that helps adding icons to templates. Some methods can be concatenated, eliminating the necessity to make assignments.

Method

Description

Concatenated

cssClass(value)

Allows to add extra classes to the icon class. Mainly used for colors and size.

cssStyle(value)

Allows to add extra styles to the icon element.

path(value)

Adds a path for file based icons (ending with .png)

before(value)

HTML based value that will be added before the icon if there is an icon value.

after(value)

HTML based value that will be added after the icon if there is an icon value.

icon()

Returns the HTML to create the icon, or an empty string if the is not an icon value.

Wiki syntax

Wiki syntax is the default editing mode in Elephant modules. Abstracts from using HTML while helps creating rich content. Even those who master HTML will find it useful for several reasons:

Quick reference

Wiki Result
---+Header 1

Header 1

---++Header 2

Header 2

---+++Header 3

Header 3

**bold** bold
__italic__ italic
==fixed== fixed
* item 1
  * item 1.1
* item 2
  • item 1
    • item 1.1
  • item 2
1 item 1
  1 item 1.1
1 item 2
  1. item 1
    1. item 1.1
  2. item 2
[img repository(/powered.jpg)]
[[http://www.turro.org][turro.org]] turro.org
[link(http://www.turro.org)]
[img repository(/powered.png)]
[/link]
[block(center)]
Some text that will be centered%BR%within the container.
[/block]
Some text that will be centered
within the container.

||< Header 1
|< Header 2
|< Header 3
|-< Cell 1,1
|< Cell 2,1
|< Cell 3,1
|-< Cell 1,2
|< Cell 2,2
|< Cell 3,2
|-< Cell 1,3
|< Cell 2,3
|< Cell 3,3
-||

Header 1

Header 2

Header 3

Cell 1,1

Cell 2,1

Cell 3,1

Cell 1,2

Cell 2,2

Cell 3,2

Cell 1,3

Cell 2,3

Cell 3,3


Quick start

Creating a paragraph using Wiki is quite simple, just start typing. By default, wiki will put your text within <p></p>.

In order to add a new paragraph, live a blank line between text. This will tell the compiler to terminate the first <p> and create a new one. More than one blank line will be treated as one, creating only one paragraph.

If you don't live any space between paragraphs, a <br/> will be used to divide the text, instead of <p></p> blocks.

Wiki

HTML Result

Lorem ipsum dolor sit...
<p>Lorem ipsum dolor sit...</p>
Lorem ipsum dolor sit...

...mollit anim id est laborum.
<p>Lorem ipsum dolor sit...</p>
<p>...mollit anim id est laborum.</p>
Lorem ipsum dolor sit...
...mollit anim id est laborum.
<p>Lorem ipsum dolor sit...
<br/>
...mollit anim id est laborum.</p>

Headers

Headers are also easy. Three hyphens followed by the plus sign. One for each header number you want. Headers require to be at the beginning of the line.

Wiki

Result

HTML Result

---+Header 1

Header 1

<h1>Header 1</h1>
---++Header 2

Header 2

<h2>Header 2</h2>
---+++Header 3

Header 3

<h3>Header 3</h3>

Typefaces

You can enhance words by using different typefaces. Double asterisk for bold, double underline for oblique and double equal sign for fixed space. Typeface modifiers can appear wherever across the line, spanning among several words.

Wiki

Result

HTML Result

**bold**

bold

<b>bold</b>
__italic__

italic

<i>italic</i>
==fixed==

fixed

<code>fixed</code>

Lists

Lists use * or 1 depending on the list type, unordered or ordered. The syntax is simple, for unordered lists type an space, asterisk and space. Then the text. For indented lists, type an extra space before the asterisk. For ordered lists, substitute the asterisk for the number one.

Wiki

Result

 * Item 1
 * Item 2
  * Subitem  2.1
 * Item 3
  • Item 1
  • Item 2
    • Subitem 2.1
  • Item 3
 1 Item 1
 1 Item 2
  1 Subitem 2.1
 1 Item 3
  1. Item 1
  2. Item 2
    1. Subitem 2.1
  3. Item 3

Don't forget to use always the number 1 in ordered lists. Will always result in the correct number.

Blocks

The HTML <div> is [block] in wiki syntax. Blocks are key elements when formatting.

Wiki

Result

[block(center)]
Some text that will be centered%BR%within the container.
[/block]

Some text that will be centered
within the container.

[block(background-color:#eee,color:#333,padding:5px 10px)]
Some text.
[/block]

Some text.

Blocks do not directly accept characters, which has the effect of creating a paragraph surrounding the text inside. Also translates line feeds into <br/> and creates a new paragraph when an empty line is found.

If you need a block that accepts characters use instead [html].

Wiki

Result

[html(center)]
Some text that will be centered%BR%within the container.
[/html]
Some text that will be centered
within the container.
[html(background-color:#eee,color:#333,padding:5px 10px)]
Some text.
[/html]
Some text.

See more about passing attributes to wiki elements in CSS and attributes .

Icons

Elephant syntaxparser includes a macro to easily include fontawesome icons.

Macro

HTML

Result

%fa-home%

<i class="fa fa-home"></i>

%fa-home #00d0ff%

<i color="#00d0ff" class="fa fa-home"></i>

%fa-home fa-3x%

<i class="fa fa-home fa-3x"></i>

%fa-home fa-3x fa-rotate-90%

<i class="fa fa-home fa-3x fa-rotate-90"></i>

%fa-home fa-3x fa-spin%

<i class="fa fa-home fa-3x fa-spin"></i>

Elephant syntaxparser includes a macro to easily include semantic-ui icons.

Macro

HTML

Result

%icon-home%

<i class="home icon"></i>

%icon-red home%
Color choices: red, orange, yellow, olive, green, teal, blue, violet, purple, pink, brown, grey, black.

<i class="red home icon"></i>

%icon-big home%
Size choices: mini, tiny, small, large, big, huge, massive.

<i class="big home icon"></i>

%icon-big clockwise rotated home%
Rotation choices: clockwise, counterclockwise.

<i class="big clockwise rotated home icon"></i>

%icon-big loading home%
State choices: disabled, loading.

<i class="big loading home icon"></i>

Semantic-UI icon set


500px

accessible icon

accusoft

acquisitions incorporated

adn

adobe

adversal

affiliatetheme

airbnb

algolia

alipay

amazon

amazon pay

amilia

android

angellist

angrycreative

angular

app store

app store ios

apper

apple

apple pay

artstation

asymmetrik

atlassian

audible

autoprefixer

avianex

aviato

aws

bandcamp

battle net

behance

behance square

bimobject

bitbucket

bitcoin

bity

black tie

blackberry

blogger

blogger b

bluetooth

bluetooth b

bootstrap

btc

buffer

buromobelexperte

buy n large

buysellads

canadian maple leaf

cc amazon pay

cc amex

cc apple pay

cc diners club

cc discover

cc jcb

cc mastercard

cc paypal

cc stripe

cc visa

centercode

centos

chrome

chromecast

cloudscale

cloudsmith

cloudversify

codepen

codiepie

confluence

connectdevelop

contao

cotton bureau

cpanel

creative commons

creative commons by

creative commons nc

creative commons nc eu

creative commons nc jp

creative commons nd

creative commons pd

creative commons pd alt

creative commons remix

creative commons sa

creative commons sampling

creative commons sampling plus

creative commons share

creative commons zero

critical role

css3

css3 alt

cuttlefish

d and d

d and d beyond

dashcube

delicious

deploydog

deskpro

dev

deviantart

dhl

diaspora

digg

digital ocean

discord

discourse

dochub

docker

draft2digital

dribbble

dribbble square

dropbox

drupal

dyalog

earlybirds

ebay

edge

elementor

ello

ember

empire

envira

erlang

ethereum

etsy

evernote

expeditedssl

facebook

facebook f

facebook messenger

facebook square

fantasy flight games

fedex

fedora

figma

firefox

firefox browser

first order

first order alt

firstdraft

flickr

flipboard

fly

font awesome

font awesome alt

font awesome flag

fonticons

fonticons fi

fort awesome

fort awesome alt

forumbee

foursquare

free code camp

freebsd

fulcrum

galactic republic

galactic senate

get pocket

gg

gg circle

git

git alt

git square

github

github alt

github square

gitkraken

gitlab

gitter

glide

glide g

gofore

goodreads

goodreads g

google

google drive

google play

google plus

google plus g

google plus square

google wallet

gratipay

grav

gripfire

grunt

gulp

hacker news

hacker news square

hackerrank

hips

hire a helper

hooli

hornbill

hotjar

houzz

html5

hubspot

ideal

imdb

instagram

intercom

internet explorer

invision

ioxhost

itch io

itunes

itunes note

java

jedi order

jenkins

jira

joget

joomla

js

js square

jsfiddle

kaggle

keybase

keycdn

kickstarter

kickstarter k

korvue

laravel

lastfm

lastfm square

leanpub

less

line

linkedin

linkedin in

linode

linux

lyft

magento

mailchimp

mandalorian

markdown

mastodon

maxcdn

mdb

medapps

medium

medium m

medrt

meetup

megaport

mendeley

microblog

microsoft

mix

mixcloud

mizuni

modx

monero

napster

neos

nimblr

node

node js

npm

ns8

nutritionix

odnoklassniki

odnoklassniki square

old republic

opencart

openid

opera

optin monster

orcid

osi

page4

pagelines

palfed

patreon

paypal

penny arcade

periscope

phabricator

phoenix framework

phoenix squadron

php

pied piper

pied piper alt

pied piper hat

pied piper pp

pied piper square

pinterest

pinterest p

pinterest square

playstation

product hunt

pushed

python

qq

quinscape

quora

r project

raspberry pi

ravelry

react

reacteurope

readme

rebel

red river

reddit

reddit alien

reddit square

redhat

renren

replyd

researchgate

resolving

rev

rocketchat

rockrms

safari

salesforce

sass

schlix

scribd

searchengin

sellcast

sellsy

servicestack

shirtsinbulk

shopware

simplybuilt

sistrix

sith

sketch

skyatlas

skype

slack

slack hash

slideshare

snapchat

snapchat ghost

snapchat square

soundcloud

sourcetree

speakap

speaker deck

spotify

squarespace

stack exchange

stack overflow

stackpath

staylinked

steam

steam square

steam symbol

sticker mule

strava

stripe

stripe s

studiovinari

stumbleupon

stumbleupon circle

superpowers

supple

suse

swift

symfony

teamspeak

telegram

telegram plane

tencent weibo

the red yeti

themeco

themeisle

think peaks

trade federation

trello

tripadvisor

tumblr

tumblr square

twitch

twitter

twitter square

typo3

uber

ubuntu

uikit

umbraco

uniregistry

unity

untappd

ups

usb

usps

ussunnah

vaadin

viacoin

viadeo

viadeo square

viber

vimeo

vimeo square

vimeo v

vine

vk

vnv

vuejs

waze

weebly

weibo

weixin

whatsapp

whatsapp square

whmcs

wikipedia w

windows

wix

wizards of the coast

wolf pack battalion

wordpress

wordpress simple

wpbeginner

wpexplorer

wpforms

wpressr

xbox

xing

xing square

y combinator

yahoo

yammer

yandex

yandex international

yarn

yelp

yoast

youtube

youtube square

zhihu

ad

address book

address card

adjust

air freshener

align center

align justify

align left

align right

allergies

ambulance

american sign language interpreting

anchor

angle double down

angle double left

angle double right

angle double up

angle down

angle left

angle right

angle up

angry

ankh

apple alt

archive

archway

arrow alt circle down

arrow alt circle left

arrow alt circle right

arrow alt circle up

arrow circle down

arrow circle left

arrow circle right

arrow circle up

arrow down

arrow left

arrow right

arrow up

arrows alt

arrows alt h

arrows alt v

assistive listening systems

asterisk

at

atlas

atom

audio description

award

baby

baby carriage

backspace

backward

bacon

bahai

balance scale

balance scale left

balance scale right

ban

band aid

barcode

bars

baseball ball

basketball ball

bath

battery empty

battery full

battery half

battery quarter

battery three quarters

bed

beer

bell

bell slash

bezier curve

bible

bicycle

biking

binoculars

biohazard

birthday cake

blender

blender phone

blind

blog

bold

bolt

bomb

bone

bong

book

book dead

book medical

book open

book reader

bookmark

border all

border none

border style

bowling ball

box

box open

boxes

braille

brain

bread slice

briefcase

briefcase medical

broadcast tower

broom

brush

bug

building

bullhorn

bullseye

burn

bus

bus alt

business time

calculator

calendar

calendar alt

calendar check

calendar day

calendar minus

calendar plus

calendar times

calendar week

camera

camera retro

campground

candy cane

cannabis

capsules

car

car alt

car battery

car crash

car side

caravan

caret down

caret left

caret right

caret square down

caret square left

caret square right

caret square up

caret up

carrot

cart arrow down

cart plus

cash register

cat

certificate

chair

chalkboard

chalkboard teacher

charging station

chart area

chart bar

chart line

chart pie

check

check circle

check double

check square

cheese

chess

chess bishop

chess board

chess king

chess knight

chess pawn

chess queen

chess rook

chevron circle down

chevron circle left

chevron circle right

chevron circle up

chevron down

chevron left

chevron right

chevron up

child

church

circle

circle notch

city

clinic medical

clipboard

clipboard check

clipboard list

clock

clone

closed captioning

cloud

cloud download alt

cloud meatball

cloud moon

cloud moon rain

cloud rain

cloud showers heavy

cloud sun

cloud sun rain

cloud upload alt

cocktail

code

code branch

coffee

cog

cogs

coins

columns

comment

comment alt

comment dollar

comment dots

comment medical

comment slash

comments

comments dollar

compact disc

compass

compress

compress alt

compress arrows alt

concierge bell

cookie

cookie bite

copy

copyright

couch

credit card

crop

crop alt

cross

crosshairs

crow

crown

crutch

cube

cubes

cut

database

deaf

democrat

desktop

dharmachakra

diagnoses

dice

dice d20

dice d6

dice five

dice four

dice one

dice six

dice three

dice two

digital tachograph

directions

divide

dizzy

dna

dog

dollar sign

dolly

dolly flatbed

donate

door closed

door open

dot circle

dove

download

drafting compass

dragon

draw polygon

drum

drum steelpan

drumstick bite

dumbbell

dumpster

dumpster fire

dungeon

edit

egg

eject

ellipsis h

ellipsis v

envelope

envelope open

envelope open text

envelope square

equals

eraser

ethernet

euro sign

exchange alt

exclamation

exclamation circle

exclamation triangle

expand

expand alt

expand arrows alt

external link alt

external link square alt

eye

eye dropper

eye slash

fan

fast backward

fast forward

fax

feather

feather alt

female

fighter jet

file

file alt

file archive

file audio

file code

file contract

file csv

file download

file excel

file export

file image

file import

file invoice

file invoice dollar

file medical

file medical alt

file pdf

file powerpoint

file prescription

file signature

file upload

file video

file word

fill

fill drip

film

filter

fingerprint

fire

fire alt

fire extinguisher

first aid

fish

fist raised

flag

flag checkered

flag usa

flask

flushed

folder

folder minus

folder open

folder plus

font

football ball

forward

frog

frown

frown open

funnel dollar

futbol

gamepad

gas pump

gavel

gem

genderless

ghost

gift

gifts

glass cheers

glass martini

glass martini alt

glass whiskey

glasses

globe

globe africa

globe americas

globe asia

globe europe

golf ball

gopuram

graduation cap

greater than

greater than equal

grimace

grin

grin alt

grin beam

grin beam sweat

grin hearts

grin squint

grin squint tears

grin stars

grin tears

grin tongue

grin tongue squint

grin tongue wink

grin wink

grip horizontal

grip lines

grip lines vertical

grip vertical

guitar

h square

hamburger

hammer

hamsa

hand holding

hand holding heart

hand holding usd

hand lizard

hand middle finger

hand paper

hand peace

hand point down

hand point left

hand point right

hand point up

hand pointer

hand rock

hand scissors

hand spock

hands

hands helping

handshake

hanukiah

hard hat

hashtag

hat cowboy

hat cowboy side

hat wizard

hdd

heading

headphones

headphones alt

headset

heart

heart broken

heartbeat

helicopter

highlighter

hiking

hippo

history

hockey puck

holly berry

home

horse

horse head

hospital

hospital alt

hospital symbol

hot tub

hotdog

hotel

hourglass

hourglass end

hourglass half

hourglass start

house damage

hryvnia

i cursor

ice cream

icicles

icons

id badge

id card

id card alt

igloo

image

images

inbox

indent

industry

infinity

info

info circle

italic

jedi

joint

journal whills

kaaba

key

keyboard

khanda

kiss

kiss beam

kiss wink heart

kiwi bird

landmark

language

laptop

laptop code

laptop medical

laugh

laugh beam

laugh squint

laugh wink

layer group

leaf

lemon

less than

less than equal

level down alt

level up alt

life ring

lightbulb

link

lira sign

list

list alt

list ol

list ul

location arrow

lock

lock open

long arrow alt down

long arrow alt left

long arrow alt right

long arrow alt up

low vision

luggage cart

magic

magnet

mail bulk

male

map

map marked

map marked alt

map marker

map marker alt

map pin

map signs

marker

mars

mars double

mars stroke

mars stroke h

mars stroke v

mask

medal

medkit

meh

meh blank

meh rolling eyes

memory

menorah

mercury

meteor

microchip

microphone

microphone alt

microphone alt slash

microphone slash

microscope

minus

minus circle

minus square

mitten

mobile

mobile alt

money bill

money bill alt

money bill wave

money bill wave alt

money check

money check alt

monument

moon

mortar pestle

mosque

motorcycle

mountain

mouse

mouse pointer

mug hot

music

network wired

neuter

newspaper

not equal

notes medical

object group

object ungroup

oil can

om

otter

outdent

pager

paint brush

paint roller

palette

pallet

paper plane

paperclip

parachute box

paragraph

parking

passport

pastafarianism

paste

pause

pause circle

paw

peace

pen

pen alt

pen fancy

pen nib

pen square

pencil alt

pencil ruler

people carry

pepper hot

percent

percentage

person booth

phone

phone alt

phone slash

phone square

phone square alt

phone volume

photo video

piggy bank

pills

pizza slice

place of worship

plane

plane arrival

plane departure

play

play circle

plug

plus

plus circle

plus square

podcast

poll

poll h

poo

poo storm

poop

portrait

pound sign

power off

pray

praying hands

prescription

prescription bottle

prescription bottle alt

print

procedures

project diagram

puzzle piece

qrcode

question

question circle

quidditch

quote left

quote right

quran

radiation

radiation alt

rainbow

random

receipt

record vinyl

recycle

redo

redo alt

registered

remove format

reply

reply all

republican

restroom

retweet

ribbon

ring

road

robot

rocket

route

rss

rss square

ruble sign

ruler

ruler combined

ruler horizontal

ruler vertical

running

rupee sign

sad cry

sad tear

satellite

satellite dish

save

school

screwdriver

scroll

sd card

search

search dollar

search location

search minus

search plus

seedling

server

shapes

share

share alt

share alt square

share square

shekel sign

shield alt

ship

shipping fast

shoe prints

shopping bag

shopping basket

shopping cart

shower

shuttle van

sign

sign in alt

sign language

sign out alt

signal

signature

sim card

sitemap

skating

skiing

skiing nordic

skull

skull crossbones

slash

sleigh

sliders h

smile

smile beam

smile wink

smog

smoking

smoking ban

sms

snowboarding

snowflake

snowman

snowplow

socks

solar panel

sort

sort alpha down

sort alpha down alt

sort alpha up

sort alpha up alt

sort amount down

sort amount down alt

sort amount up

sort amount up alt

sort down

sort numeric down

sort numeric down alt

sort numeric up

sort numeric up alt

sort up

spa

space shuttle

spell check

spider

spinner

splotch

spray can

square

square full

square root alt

stamp

star

star and crescent

star half

star half alt

star of david

star of life

step backward

step forward

stethoscope

sticky note

stop

stop circle

stopwatch

store

store alt

stream

street view

strikethrough

stroopwafel

subscript

subway

suitcase

suitcase rolling

sun

superscript

surprise

swatchbook

swimmer

swimming pool

synagogue

sync

sync alt

syringe

table

table tennis

tablet

tablet alt

tablets

tachometer alt

tag

tags

tape

tasks

taxi

teeth

teeth open

temperature high

temperature low

tenge

terminal

text height

text width

th

th large

th list

theater masks

thermometer

thermometer empty

thermometer full

thermometer half

thermometer quarter

thermometer three quarters

thumbs down

thumbs up

thumbtack

ticket alt

times

times circle

tint

tint slash

tired

toggle off

toggle on

toilet

toilet paper

toolbox

tools

tooth

torah

torii gate

tractor

trademark

traffic light

trailer

train

tram

transgender

transgender alt

trash

trash alt

trash restore

trash restore alt

tree

trophy

truck

truck loading

truck monster

truck moving

truck pickup

tshirt

tty

tv

umbrella

umbrella beach

underline

undo

undo alt

universal access

university

unlink

unlock

unlock alt

upload

user

user alt

user alt slash

user astronaut

user check

user circle

user clock

user cog

user edit

user friends

user graduate

user injured

user lock

user md

user minus

user ninja

user nurse

user plus

user secret

user shield

user slash

user tag

user tie

user times

users

users cog

utensil spoon

utensils

vector square

venus

venus double

venus mars

vial

vials

video

video slash

vihara

voicemail

volleyball ball

volume down

volume mute

volume off

volume up

vote yea

vr cardboard

walking

wallet

warehouse

water

wave square

weight

weight hanging

wheelchair

wifi

wind

window close

window maximize

window minimize

window restore

wine bottle

wine glass

wine glass alt

won sign

wrench

x ray

yen sign

yin yang

address book outline

address card outline

angry outline

arrow alt circle down outline

arrow alt circle left outline

arrow alt circle right outline

arrow alt circle up outline

bell outline

bell slash outline

bookmark outline

building outline

calendar alt outline

calendar check outline

calendar minus outline

calendar outline

calendar plus outline

calendar times outline

caret square down outline

caret square left outline

caret square right outline

caret square up outline

chart bar outline

check circle outline

check square outline

circle outline

clipboard outline

clock outline

clone outline

closed captioning outline

comment alt outline

comment dots outline

comment outline

comments outline

compass outline

copy outline

copyright outline

credit card outline

dizzy outline

dot circle outline

edit outline

envelope open outline

envelope outline

eye outline

eye slash outline

file alt outline

file archive outline

file audio outline

file code outline

file excel outline

file image outline

file outline

file pdf outline

file powerpoint outline

file video outline

file word outline

flag outline

flushed outline

folder open outline

folder outline

frown open outline

frown outline

futbol outline

gem outline

grimace outline

grin alt outline

grin beam outline

grin beam sweat outline

grin hearts outline

grin outline

grin squint outline

grin squint tears outline

grin stars outline

grin tears outline

grin tongue outline

grin tongue squint outline

grin tongue wink outline

grin wink outline

hand lizard outline

hand paper outline

hand peace outline

hand point down outline

hand point left outline

hand point right outline

hand point up outline

hand pointer outline

hand rock outline

hand scissors outline

hand spock outline

handshake outline

hdd outline

heart outline

hospital outline

hourglass outline

id badge outline

id card outline

image outline

images outline

keyboard outline

kiss beam outline

kiss outline

kiss wink heart outline

laugh beam outline

laugh outline

laugh squint outline

laugh wink outline

lemon outline

life ring outline

lightbulb outline

list alt outline

map outline

meh blank outline

meh outline

meh rolling eyes outline

minus square outline

money bill alt outline

moon outline

newspaper outline

object group outline

object ungroup outline

paper plane outline

pause circle outline

play circle outline

plus square outline

question circle outline

registered outline

sad cry outline

sad tear outline

save outline

share square outline

smile beam outline

smile outline

smile wink outline

snowflake outline

square outline

star half outline

star outline

sticky note outline

stop circle outline

sun outline

surprise outline

thumbs down outline

thumbs up outline

times circle outline

tired outline

trash alt outline

user circle outline

user outline

window close outline

window maximize outline

window minimize outline

window restore outline

Images

The image syntax is [img:size image_file]. Size is optional and can be expressed in valid CSS units.

In some cases, when large images are used, you might prefer the thumb syntax. [thumb image_file:size]. Elephant internally creates a thumb file a renders the image with a link to the original one. Thumbs are restricted to JPG images.

Some examples

Wiki

Result

[img repository(/powered.jpg)]

[img:80px repository(/powered.jpg)]

[img:50% repository(/powered.jpg)]

[thumb repository(/powered.jpg):80]
The number stands for thumb's maximum size.

Thumbs automatically create a fileName_thumb.ext file from fileName.ext file. When visitors click on the thumb image get a new window with the original image.

In order to create links with images see anchor.

The repository

In the examples above you might noticed the function repository(), this function returns to current repository location.

Wiki

Result

repository()

/docs/elephant/components/wiki_syntax/images/_internal/repository

Links

Wiki has several ways for constructing links. Mainly they all derivate from the initial form:

[[the_link]] or
[[the_link][the_text_to_show]] or
[[the_link][img the_image]]

Wiki

Result

[[http://www.turro.org]]

http://www.turro.org

[[http://www.turro.org][turro.org]]

turro.org

[[http://www.turro.org][img repository(/powered.png)]]

Links with new target

You can create links that point to external sources or will create new a tab on the browser and make it clear to the visitor with ext or new:

Wiki

Result

[new[http://www.turro.org][turro.org]]

turro.org

[ext[http://www.turro.org][img repository(/powered.png)]]

The repository function is explained in Images .

Links with markup

Modern responsive frameworks require class assignments to links. In that case, you can use links with markup. The URL reference must be the first markup parameter.

Wiki

Result

[link(http://www.turro.org)]
turro.org
[/link]
turro.org
[link(http://www.turro.org)]
[img repository(/powered.png)]
[/link]
[link(http://www.turro.org,&class:ui primary button)]
turro.org
[/link]
turro.org

The last example take advantage from Semantic-ui, used in this site.

See more about passing attributes to wiki elements in CSS and attributes .

Topics

A page topic is any place within your text that you want marked. Topic related elements are:

Wiki

Result

[topic topic_name]

Creates a topic mark.

[[goto topic_name]]

topic_name. Jumps to topic_name.

[[goto topic_name][my topic]]

my topic. Jumps to topic_name.

[[goto topic_name][img repository(/powered.png)]]

.
Jumps to topic_name.

Tables

Table syntax helps creating tables with rich content.

The markup

Wiki

Result

||<

Starts a long table header. Left aligned.

||>

Starts a long table header. Right aligned.

|-<

Starts a long table row. Left aligned.

|->

Starts a long table row. Right aligned.

|<

Starts a long table column. Left aligned.

|>

Starts a long table column. Right aligned.

-||

Ends a long table

An example

In order to get those tags executed they need to be at line's start. To make text more readable let them take the whole line, giving as much spaces as needed. See an example:

||< Header 1 
|< Header 2
|< Header 3
|-< Cell 1,1
|< Cell 2,1
|< Cell 3,1
|-< Cell 1,2
|< Cell 2,2
|< Cell 3,2
|-< Cell 1,3
|< Cell 2,3
|< Cell 3,3
-||

creates:

Header 1

Header 2

Header 3

Cell 1,1

Cell 2,1

Cell 3,1

Cell 1,2

Cell 2,2

Cell 3,2

Cell 1,3

Cell 2,3

Cell 3,3

An example with populated cells

||< Name
|< Description
|> Value
|-< Elephant
|<
Portal framework running in any J2EE container. Features:

 * Contents management.
 * Wiki syntax.
 * Knowledge base.
 * etc.
|> 0
-||

creates:

Name

Description

Value

Elephant

Portal framework running in any J2EE container. Features:

  • Contents management.
  • Wiki syntax.
  • Knowledge base.
  • etc.

0

Tabs

Maybe you wanted to show some part while hiding the rest. Tabs do that for you, just write:

[tab(Hello)]
This will show after loading the page.

[tab(Click to see)]
Only after clicking on this tab you could see what was hiding.

[tab(Special effects, background-color:#eeeeee)]
This tab's content shows on a grayed background.

[/tab]

And get:

This will show after loading the page.

Or use blind instead:

[blind(Hello)]
This will show after clicking __Hello__.

[blind(Click to see)]
Only after clicking on this text you could see what was hiding.

[blind(Special effects, background-color:#eeeeee)]
Text on a grayed background.

[/blind]

And get:

Hello
Click to see
Special effects
Columns

Using wiki it's posible writing in multiple columns. Each column would start using [column] at line's begining. For instance, this text uses column at the top and at the end of this paragraph.

This text starts at the newly created column. You can start as many columns as you want. The same way, you can stop columns by introducing [/column] in an empty line.

See more about passing attributes to wiki elements in CSS and attributes .

Spans

The span element work much the way block does. The main difference is that span doesn't take the whole line, but can be related to a single among the paragraph.

Wiki

Result

This [span(color:red,background-color:gray,font-size:16pt)]
words will be red over gray and bigger[/span] than the rest.

This words will be red over gray and bigger than the rest.

See more about passing attributes to wiki elements in CSS and attributes .

Joker

The joker can transform into any HTML tag. It takes the first parameter as the pretended element.

Wiki

Result

[joker(div,color:red)]
Some text that will be centered%BR%within the container.
[/joker]
Some text that will be centered
within the container.
[joker(div,background-color:#eee,color:#333,padding:5px 10px)]
Some text.
[/joker]
Some text.
Floating frames

Suppose you want an image left aligned and located along text's flow. To achieve this using wiki syntax you create a float. The syntax is:

[float(left,center,right)]
whatever content you want aligned
[/float]

This text shows how it flows along with a floating frame. This text shows how it flows along with a floating frame. This text shows how it flows along with a floating frame. This text shows how it flows along with a floating frame. This text shows how it flows along with a floating frame. This text shows how it flows along with a floating frame. This text shows how it flows along with a floating frame. This text shows how it flows along with a floating frame. This text shows how it flows along with a floating frame. This text shows how it flows along with a floating frame.

See more about passing attributes to wiki elements in CSS and attributes .

Notes

A note is a margin annotation. Wiki syntaxis is:

[note] Your text [/note]
This text was entered as a wiki note.

See more about passing attributes to wiki elements in CSS and attributes .

Emoticons

Elephant allows emoticons in pages, articles and comments. In order to get the final emoticon image, emoticon symbols should have, at left, the beginning of a line or a space and, at right, the end of the line or a space.

Writing

You get this Emoticon

:-) or :)

:D or :-D

;-) or ;)

;-D or ;D

:-( or :(

:-/ or :/

8| or 8-|

:-o or :o

:| or :-|

:-, or :,

|-|

:-s or :s

:8)

:-b or :b

:-# or :#


Emojis

Elephant syntaxparser includes a macro to easily include fomantic-ui emojis.

Macro

HTML

Result

%emoji-relaxed%

<em data-emoji="relaxed"></em>

%emoji-relaxed #small%
Size choices: small, medium, large, big.

<em data-emoji="relaxed" class="small"></em>

%emoji-relaxed #medium loading%
Modifier choices: disabled, loading.

<em data-emoji="relaxed" class="medium loading"></em>

Fomantic-UI emoji set


:8ball:

:art:

:badminton:

:banjo:

:baseball:

:basketball:

:bow_and_arrow:

:bowling:

:boxing_glove:

:chess_pawn:

:circus_tent:

:clapper:

:cricket_game:

:curling_stone:

:dart:

:drum:

:field_hockey:

:first_place:

:fishing_pole_and_fish:

:flying_disc:

:football:

:game_die:

:goal:

:golf:

:guitar:

:headphones:

:hockey:

:horse_racing:

:horse_racing_tone1:

:horse_racing_tone2:

:horse_racing_tone3:

:horse_racing_tone4:

:horse_racing_tone5:

:ice_skate:

:jigsaw:

:kite:

:lacrosse:

:man_biking:

:man_biking_tone1:

:man_biking_tone2:

:man_biking_tone3:

:man_biking_tone4:

:man_biking_tone5:

:man_bouncing_ball:

:man_bouncing_ball_tone1:

:man_bouncing_ball_tone2:

:man_bouncing_ball_tone3:

:man_bouncing_ball_tone4:

:man_bouncing_ball_tone5:

:man_cartwheeling:

:man_cartwheeling_tone1:

:man_cartwheeling_tone2:

:man_cartwheeling_tone3:

:man_cartwheeling_tone4:

:man_cartwheeling_tone5:

:man_climbing:

:man_climbing_tone1:

:man_climbing_tone2:

:man_climbing_tone3:

:man_climbing_tone4:

:man_climbing_tone5:

:man_golfing:

:man_golfing_tone1:

:man_golfing_tone2:

:man_golfing_tone3:

:man_golfing_tone4:

:man_golfing_tone5:

:man_in_lotus_position:

:man_in_lotus_position_tone1:

:man_in_lotus_position_tone2:

:man_in_lotus_position_tone3:

:man_in_lotus_position_tone4:

:man_in_lotus_position_tone5:

:man_juggling:

:man_juggling_tone1:

:man_juggling_tone2:

:man_juggling_tone3:

:man_juggling_tone4:

:man_juggling_tone5:

:man_lifting_weights:

:man_lifting_weights_tone1:

:man_lifting_weights_tone2:

:man_lifting_weights_tone3:

:man_lifting_weights_tone4:

:man_lifting_weights_tone5:

:man_mountain_biking:

:man_mountain_biking_tone1:

:man_mountain_biking_tone2:

:man_mountain_biking_tone3:

:man_mountain_biking_tone4:

:man_mountain_biking_tone5:

:man_playing_handball:

:man_playing_handball_tone1:

:man_playing_handball_tone2:

:man_playing_handball_tone3:

:man_playing_handball_tone4:

:man_playing_handball_tone5:

:man_playing_water_polo:

:man_playing_water_polo_tone1:

:man_playing_water_polo_tone2:

:man_playing_water_polo_tone3:

:man_playing_water_polo_tone4:

:man_playing_water_polo_tone5:

:man_rowing_boat:

:man_rowing_boat_tone1:

:man_rowing_boat_tone2:

:man_rowing_boat_tone3:

:man_rowing_boat_tone4:

:man_rowing_boat_tone5:

:man_surfing:

:man_surfing_tone1:

:man_surfing_tone2:

:man_surfing_tone3:

:man_surfing_tone4:

:man_surfing_tone5:

:man_swimming:

:man_swimming_tone1:

:man_swimming_tone2:

:man_swimming_tone3:

:man_swimming_tone4:

:man_swimming_tone5:

:martial_arts_uniform:

:medal:

:men_wrestling:

:microphone:

:military_medal:

:musical_keyboard:

:musical_score:

:parachute:

:people_wrestling:

:performing_arts:

:person_biking:

:person_biking_tone1:

:person_biking_tone2:

:person_biking_tone3:

:person_biking_tone4:

:person_biking_tone5:

:person_bouncing_ball:

:person_bouncing_ball_tone1:

:person_bouncing_ball_tone2:

:person_bouncing_ball_tone3:

:person_bouncing_ball_tone4:

:person_bouncing_ball_tone5:

:person_climbing:

:person_climbing_tone1:

:person_climbing_tone2:

:person_climbing_tone3:

:person_climbing_tone4:

:person_climbing_tone5:

:person_doing_cartwheel:

:person_doing_cartwheel_tone1:

:person_doing_cartwheel_tone2:

:person_doing_cartwheel_tone3:

:person_doing_cartwheel_tone4:

:person_doing_cartwheel_tone5:

:person_fencing:

:person_golfing:

:person_golfing_tone1:

:person_golfing_tone2:

:person_golfing_tone3:

:person_golfing_tone4:

:person_golfing_tone5:

:person_in_lotus_position:

:person_in_lotus_position_tone1:

:person_in_lotus_position_tone2:

:person_in_lotus_position_tone3:

:person_in_lotus_position_tone4:

:person_in_lotus_position_tone5:

:person_juggling:

:person_juggling_tone1:

:person_juggling_tone2:

:person_juggling_tone3:

:person_juggling_tone4:

:person_juggling_tone5:

:person_lifting_weights:

:person_lifting_weights_tone1:

:person_lifting_weights_tone2:

:person_lifting_weights_tone3:

:person_lifting_weights_tone4:

:person_lifting_weights_tone5:

:person_mountain_biking:

:person_mountain_biking_tone1:

:person_mountain_biking_tone2:

:person_mountain_biking_tone3:

:person_mountain_biking_tone4:

:person_mountain_biking_tone5:

:person_playing_handball:

:person_playing_handball_tone1:

:person_playing_handball_tone2:

:person_playing_handball_tone3:

:person_playing_handball_tone4:

:person_playing_handball_tone5:

:person_playing_water_polo:

:person_playing_water_polo_tone1:

:person_playing_water_polo_tone2:

:person_playing_water_polo_tone3:

:person_playing_water_polo_tone4:

:person_playing_water_polo_tone5:

:person_rowing_boat:

:person_rowing_boat_tone1:

:person_rowing_boat_tone2:

:person_rowing_boat_tone3:

:person_rowing_boat_tone4:

:person_rowing_boat_tone5:

:person_surfing:

:person_surfing_tone1:

:person_surfing_tone2:

:person_surfing_tone3:

:person_surfing_tone4:

:person_surfing_tone5:

:person_swimming:

:person_swimming_tone1:

:person_swimming_tone2:

:person_swimming_tone3:

:person_swimming_tone4:

:person_swimming_tone5:

:ping_pong:

:reminder_ribbon:

:rosette:

:rugby_football:

:running_shirt_with_sash:

:saxophone:

:second_place:

:skateboard:

:ski:

:skier:

:sled:

:slot_machine:

:snowboarder:

:snowboarder_tone1:

:snowboarder_tone2:

:snowboarder_tone3:

:snowboarder_tone4:

:snowboarder_tone5:

:soccer:

:softball:

:tennis:

:third_place:

:ticket:

:tickets:

:trophy:

:trumpet:

:video_game:

:violin:

:volleyball:

:woman_biking:

:woman_biking_tone1:

:woman_biking_tone2:

:woman_biking_tone3:

:woman_biking_tone4:

:woman_biking_tone5:

:woman_bouncing_ball:

:woman_bouncing_ball_tone1:

:woman_bouncing_ball_tone2:

:woman_bouncing_ball_tone3:

:woman_bouncing_ball_tone4:

:woman_bouncing_ball_tone5:

:woman_cartwheeling:

:woman_cartwheeling_tone1:

:woman_cartwheeling_tone2:

:woman_cartwheeling_tone3:

:woman_cartwheeling_tone4:

:woman_cartwheeling_tone5:

:woman_climbing:

:woman_climbing_tone1:

:woman_climbing_tone2:

:woman_climbing_tone3:

:woman_climbing_tone4:

:woman_climbing_tone5:

:woman_golfing:

:woman_golfing_tone1:

:woman_golfing_tone2:

:woman_golfing_tone3:

:woman_golfing_tone4:

:woman_golfing_tone5:

:woman_in_lotus_position:

:woman_in_lotus_position_tone1:

:woman_in_lotus_position_tone2:

:woman_in_lotus_position_tone3:

:woman_in_lotus_position_tone4:

:woman_in_lotus_position_tone5:

:woman_juggling:

:woman_juggling_tone1:

:woman_juggling_tone2:

:woman_juggling_tone3:

:woman_juggling_tone4:

:woman_juggling_tone5:

:woman_lifting_weights:

:woman_lifting_weights_tone1:

:woman_lifting_weights_tone2:

:woman_lifting_weights_tone3:

:woman_lifting_weights_tone4:

:woman_lifting_weights_tone5:

:woman_mountain_biking:

:woman_mountain_biking_tone1:

:woman_mountain_biking_tone2:

:woman_mountain_biking_tone3:

:woman_mountain_biking_tone4:

:woman_mountain_biking_tone5:

:woman_playing_handball:

:woman_playing_handball_tone1:

:woman_playing_handball_tone2:

:woman_playing_handball_tone3:

:woman_playing_handball_tone4:

:woman_playing_handball_tone5:

:woman_playing_water_polo:

:woman_playing_water_polo_tone1:

:woman_playing_water_polo_tone2:

:woman_playing_water_polo_tone3:

:woman_playing_water_polo_tone4:

:woman_playing_water_polo_tone5:

:woman_rowing_boat:

:woman_rowing_boat_tone1:

:woman_rowing_boat_tone2:

:woman_rowing_boat_tone3:

:woman_rowing_boat_tone4:

:woman_rowing_boat_tone5:

:woman_surfing:

:woman_surfing_tone1:

:woman_surfing_tone2:

:woman_surfing_tone3:

:woman_surfing_tone4:

:woman_surfing_tone5:

:woman_swimming:

:woman_swimming_tone1:

:woman_swimming_tone2:

:woman_swimming_tone3:

:woman_swimming_tone4:

:woman_swimming_tone5:

:women_wrestling:

:yo_yo:

:checkered_flag:

:crossed_flags:

:england:

:flag_ac:

:flag_ad:

:flag_ae:

:flag_af:

:flag_ag:

:flag_ai:

:flag_al:

:flag_am:

:flag_ao:

:flag_aq:

:flag_ar:

:flag_as:

:flag_at:

:flag_au:

:flag_aw:

:flag_ax:

:flag_az:

:flag_ba:

:flag_bb:

:flag_bd:

:flag_be:

:flag_bf:

:flag_bg:

:flag_bh:

:flag_bi:

:flag_bj:

:flag_bl:

:flag_black:

:flag_bm:

:flag_bn:

:flag_bo:

:flag_bq:

:flag_br:

:flag_bs:

:flag_bt:

:flag_bv:

:flag_bw:

:flag_by:

:flag_bz:

:flag_ca:

:flag_cc:

:flag_cd:

:flag_cf:

:flag_cg:

:flag_ch:

:flag_ci:

:flag_ck:

:flag_cl:

:flag_cm:

:flag_cn:

:flag_co:

:flag_cp:

:flag_cr:

:flag_cu:

:flag_cv:

:flag_cw:

:flag_cx:

:flag_cy:

:flag_cz:

:flag_de:

:flag_dg:

:flag_dj:

:flag_dk:

:flag_dm:

:flag_do:

:flag_dz:

:flag_ea:

:flag_ec:

:flag_ee:

:flag_eg:

:flag_eh:

:flag_er:

:flag_es:

:flag_et:

:flag_eu:

:flag_fi:

:flag_fj:

:flag_fk:

:flag_fm:

:flag_fo:

:flag_fr:

:flag_ga:

:flag_gb:

:flag_gd:

:flag_ge:

:flag_gf:

:flag_gg:

:flag_gh:

:flag_gi:

:flag_gl:

:flag_gm:

:flag_gn:

:flag_gp:

:flag_gq:

:flag_gr:

:flag_gs:

:flag_gt:

:flag_gu:

:flag_gw:

:flag_gy:

:flag_hk:

:flag_hm:

:flag_hn:

:flag_hr:

:flag_ht:

:flag_hu:

:flag_ic:

:flag_id:

:flag_ie:

:flag_il:

:flag_im:

:flag_in:

:flag_io:

:flag_iq:

:flag_ir:

:flag_is:

:flag_it:

:flag_je:

:flag_jm:

:flag_jo:

:flag_jp:

:flag_ke:

:flag_kg:

:flag_kh:

:flag_ki:

:flag_km:

:flag_kn:

:flag_kp:

:flag_kr:

:flag_kw:

:flag_ky:

:flag_kz:

:flag_la:

:flag_lb:

:flag_lc:

:flag_li:

:flag_lk:

:flag_lr:

:flag_ls:

:flag_lt:

:flag_lu:

:flag_lv:

:flag_ly:

:flag_ma:

:flag_mc:

:flag_md:

:flag_me:

:flag_mf:

:flag_mg:

:flag_mh:

:flag_mk:

:flag_ml:

:flag_mm:

:flag_mn:

:flag_mo:

:flag_mp:

:flag_mq:

:flag_mr:

:flag_ms:

:flag_mt:

:flag_mu:

:flag_mv:

:flag_mw:

:flag_mx:

:flag_my:

:flag_mz:

:flag_na:

:flag_nc:

:flag_ne:

:flag_nf:

:flag_ng:

:flag_ni:

:flag_nl:

:flag_no:

:flag_np:

:flag_nr:

:flag_nu:

:flag_nz:

:flag_om:

:flag_pa:

:flag_pe:

:flag_pf:

:flag_pg:

:flag_ph:

:flag_pk:

:flag_pl:

:flag_pm:

:flag_pn:

:flag_pr:

:flag_ps:

:flag_pt:

:flag_pw:

:flag_py:

:flag_qa:

:flag_re:

:flag_ro:

:flag_rs:

:flag_ru:

:flag_rw:

:flag_sa:

:flag_sb:

:flag_sc:

:flag_sd:

:flag_se:

:flag_sg:

:flag_sh:

:flag_si:

:flag_sj:

:flag_sk:

:flag_sl:

:flag_sm:

:flag_sn:

:flag_so:

:flag_sr:

:flag_ss:

:flag_st:

:flag_sv:

:flag_sx:

:flag_sy:

:flag_sz:

:flag_ta:

:flag_tc:

:flag_td:

:flag_tf:

:flag_tg:

:flag_th:

:flag_tj:

:flag_tk:

:flag_tl:

:flag_tm:

:flag_tn:

:flag_to:

:flag_tr:

:flag_tt:

:flag_tv:

:flag_tw:

:flag_tz:

:flag_ua:

:flag_ug:

:flag_um:

:flag_us:

:flag_uy:

:flag_uz:

:flag_va:

:flag_vc:

:flag_ve:

:flag_vg:

:flag_vi:

:flag_vn:

:flag_vu:

:flag_wf:

:flag_white:

:flag_ws:

:flag_xk:

:flag_ye:

:flag_yt:

:flag_za:

:flag_zm:

:flag_zw:

:pirate_flag:

:rainbow_flag:

:scotland:

:triangular_flag_on_post:

:united_nations:

:wales:

:apple:

:avocado:

:baby_bottle:

:bacon:

:bagel:

:banana:

:beer:

:beers:

:bento:

:beverage_box:

:birthday:

:bowl_with_spoon:

:bread:

:broccoli:

:burrito:

:butter:

:cake:

:candy:

:canned_food:

:carrot:

:champagne:

:champagne_glass:

:cheese:

:cherries:

:chestnut:

:chocolate_bar:

:chopsticks:

:cocktail:

:coconut:

:coffee:

:cookie:

:cooking:

:corn:

:croissant:

:cucumber:

:cup_with_straw:

:cupcake:

:curry:

:custard:

:cut_of_meat:

:dango:

:doughnut:

:dumpling:

:egg:

:eggplant:

:falafel:

:fish_cake:

:fork_and_knife:

:fork_knife_plate:

:fortune_cookie:

:french_bread:

:fried_shrimp:

:fries:

:garlic:

:grapes:

:green_apple:

:hamburger:

:honey_pot:

:hot_pepper:

:hotdog:

:ice_cream:

:ice_cube:

:icecream:

:kiwi:

:leafy_green:

:lemon:

:lollipop:

:mango:

:mate:

:meat_on_bone:

:melon:

:milk:

:moon_cake:

:oden:

:onion:

:pancakes:

:peach:

:peanuts:

:pear:

:pie:

:pineapple:

:pizza:

:popcorn:

:potato:

:poultry_leg:

:pretzel:

:ramen:

:rice:

:rice_ball:

:rice_cracker:

:sake:

:salad:

:salt:

:sandwich:

:shallow_pan_of_food:

:shaved_ice:

:spaghetti:

:spoon:

:stew:

:strawberry:

:stuffed_flatbread:

:sushi:

:sweet_potato:

:taco:

:takeout_box:

:tangerine:

:tea:

:tomato:

:tropical_drink:

:tumbler_glass:

:waffle:

:watermelon:

:wine_glass:

:tone1:

:tone2:

:tone3:

:tone4:

:tone5:

:ant:

:baby_chick:

:badger:

:bamboo:

:bat:

:bear:

:bee:

:beetle:

:bird:

:blossom:

:blowfish:

:boar:

:boom:

:bouquet:

:bug:

:butterfly:

:cactus:

:camel:

:cat2:

:cat:

:cherry_blossom:

:chicken:

:chipmunk:

:christmas_tree:

:cloud:

:cloud_lightning:

:cloud_rain:

:cloud_snow:

:cloud_tornado:

:comet:

:cow2:

:cow:

:crab:

:crescent_moon:

:cricket:

:crocodile:

:dash:

:deciduous_tree:

:deer:

:dizzy:

:dog2:

:dog:

:dolphin:

:dove:

:dragon:

:dragon_face:

:dromedary_camel:

:droplet:

:duck:

:eagle:

:ear_of_rice:

:earth_africa:

:earth_americas:

:earth_asia:

:elephant:

:evergreen_tree:

:fallen_leaf:

:feet:

:fire:

:first_quarter_moon:

:first_quarter_moon_with_face:

:fish:

:flamingo:

:fog:

:four_leaf_clover:

:fox:

:frog:

:full_moon:

:full_moon_with_face:

:giraffe:

:goat:

:gorilla:

:guide_dog:

:hamster:

:hatched_chick:

:hatching_chick:

:hear_no_evil:

:hedgehog:

:herb:

:hibiscus:

:hippopotamus:

:horse:

:kangaroo:

:koala:

:last_quarter_moon:

:last_quarter_moon_with_face:

:leaves:

:leopard:

:lion_face:

:lizard:

:llama:

:lobster:

:maple_leaf:

:monkey:

:monkey_face:

:mosquito:

:mouse2:

:mouse:

:mushroom:

:new_moon:

:new_moon_with_face:

:ocean:

:octopus:

:orangutan:

:otter:

:owl:

:ox:

:oyster:

:palm_tree:

:panda_face:

:parrot:

:partly_sunny:

:peacock:

:penguin:

:pig2:

:pig:

:pig_nose:

:poodle:

:rabbit2:

:rabbit:

:raccoon:

:racehorse:

:rainbow:

:ram:

:rat:

:rhino:

:ringed_planet:

:rooster:

:rose:

:sauropod:

:scorpion:

:see_no_evil:

:seedling:

:service_dog:

:shamrock:

:shark:

:sheep:

:shell:

:shrimp:

:skunk:

:sloth:

:snail:

:snake:

:snowflake:

:snowman2:

:snowman:

:sparkles:

:speak_no_evil:

:spider:

:spider_web:

:squid:

:star2:

:star:

:sun_with_face:

:sunflower:

:sunny:

:swan:

:sweat_drops:

:t_rex:

:tanabata_tree:

:thunder_cloud_rain:

:tiger2:

:tiger:

:tropical_fish:

:tulip:

:turkey:

:turtle:

:umbrella2:

:umbrella:

:unicorn:

:waning_crescent_moon:

:waning_gibbous_moon:

:water_buffalo:

:waxing_crescent_moon:

:waxing_gibbous_moon:

:whale2:

:whale:

:white_sun_cloud:

:white_sun_rain_cloud:

:white_sun_small_cloud:

:wilted_rose:

:wind_blowing_face:

:wolf:

:zap:

:zebra:

:abacus:

:adhesive_bandage:

:alarm_clock:

:alembic:

:amphora:

:axe:

:balloon:

:ballot_box:

:bar_chart:

:barber:

:basket:

:bath:

:bath_tone1:

:bath_tone2:

:bath_tone3:

:bath_tone4:

:bath_tone5:

:bathtub:

:battery:

:bed:

:bellhop:

:black_nib:

:blue_book:

:bomb:

:book:

:bookmark:

:bookmark_tabs:

:books:

:bricks:

:broom:

:bulb:

:calendar:

:calendar_spiral:

:calling:

:camera:

:camera_with_flash:

:candle:

:card_box:

:card_index:

:cd:

:chains:

:chair:

:chart_with_downwards_trend:

:chart_with_upwards_trend:

:clipboard:

:clock:

:closed_book:

:closed_lock_with_key:

:coffin:

:compass:

:compression:

:computer:

:confetti_ball:

:control_knobs:

:couch:

:crayon:

:credit_card:

:crossed_swords:

:crystal_ball:

:dagger:

:date:

:desktop:

:dividers:

:diya_lamp:

:dna:

:dollar:

:dolls:

:door:

:drop_of_blood:

:dvd:

:e-mail:

:electric_plug:

:envelope:

:envelope_with_arrow:

:euro:

:fax:

:file_cabinet:

:file_folder:

:film_frames:

:fire_extinguisher:

:firecracker:

:flags:

:flashlight:

:floppy_disk:

:frame_photo:

:gear:

:gem:

:gift:

:green_book:

:gun:

:hammer:

:hammer_pick:

:hole:

:hourglass:

:hourglass_flowing_sand:

:inbox_tray:

:incoming_envelope:

:iphone:

:izakaya_lantern:

:joystick:

:key2:

:key:

:keyboard:

:knife:

:label:

:ledger:

:level_slider:

:link:

:lock:

:lock_with_ink_pen:

:love_letter:

:mag:

:mag_right:

:magnet:

:mailbox:

:mailbox_closed:

:mailbox_with_mail:

:mailbox_with_no_mail:

:microbe:

:microphone2:

:microscope:

:minidisc:

:money_with_wings:

:moneybag:

:mouse_three_button:

:movie_camera:

:nazar_amulet:

:newspaper2:

:newspaper:

:notebook:

:notebook_with_decorative_cover:

:notepad_spiral:

:nut_and_bolt:

:oil:

:open_file_folder:

:orange_book:

:outbox_tray:

:package:

:page_facing_up:

:page_with_curl:

:pager:

:paintbrush:

:paperclip:

:paperclips:

:pen_ballpoint:

:pen_fountain:

:pencil2:

:pencil:

:person_in_bed_tone1:

:person_in_bed_tone2:

:person_in_bed_tone3:

:person_in_bed_tone4:

:person_in_bed_tone5:

:petri_dish:

:pick:

:pill:

:postal_horn:

:postbox:

:potable_water:

:pound:

:prayer_beads:

:printer:

:probing_cane:

:projector:

:pushpin:

:radio:

:razor:

:receipt:

:red_envelope:

:ribbon:

:roll_of_paper:

:round_pushpin:

:safety_pin:

:satellite:

:scales:

:scissors:

:scroll:

:shield:

:shopping_bags:

:shopping_cart:

:shower:

:sleeping_accommodation:

:smoking:

:soap:

:sponge:

:squeeze_bottle:

:stethoscope:

:stopwatch:

:straight_ruler:

:syringe:

:tada:

:teddy_bear:

:telephone:

:telephone_receiver:

:telescope:

:test_tube:

:thermometer:

:timer:

:toilet:

:toolbox:

:tools:

:trackball:

:triangular_ruler:

:tv:

:unlock:

:urn:

:vhs:

:video_camera:

:wastebasket:

:watch:

:wind_chime:

:wrench:

:yen:

:adult:

:adult_tone1:

:adult_tone2:

:adult_tone3:

:adult_tone4:

:adult_tone5:

:alien:

:angel:

:angel_tone1:

:angel_tone2:

:angel_tone3:

:angel_tone4:

:angel_tone5:

:angry:

:anguished:

:astonished:

:athletic_shoe:

:baby:

:baby_tone1:

:baby_tone2:

:baby_tone3:

:baby_tone4:

:baby_tone5:

:bald:

:ballet_shoes:

:bearded_person:

:bearded_person_tone1:

:bearded_person_tone2:

:bearded_person_tone3:

:bearded_person_tone4:

:bearded_person_tone5:

:bikini:

:billed_cap:

:blond-haired_man:

:blond-haired_man_tone1:

:blond-haired_man_tone2:

:blond-haired_man_tone3:

:blond-haired_man_tone4:

:blond-haired_man_tone5:

:blond-haired_woman:

:blond-haired_woman_tone1:

:blond-haired_woman_tone2:

:blond-haired_woman_tone3:

:blond-haired_woman_tone4:

:blond-haired_woman_tone5:

:blond_haired_person:

:blond_haired_person_tone1:

:blond_haired_person_tone2:

:blond_haired_person_tone3:

:blond_haired_person_tone4:

:blond_haired_person_tone5:

:blush:

:bone:

:boot:

:boy:

:boy_tone1:

:boy_tone2:

:boy_tone3:

:boy_tone4:

:boy_tone5:

:brain:

:breast_feeding:

:breast_feeding_tone1:

:breast_feeding_tone2:

:breast_feeding_tone3:

:breast_feeding_tone4:

:breast_feeding_tone5:

:bride_with_veil:

:bride_with_veil_tone1:

:bride_with_veil_tone2:

:bride_with_veil_tone3:

:bride_with_veil_tone4:

:bride_with_veil_tone5:

:briefcase:

:briefs:

:bust_in_silhouette:

:busts_in_silhouette:

:call_me:

:call_me_tone1:

:call_me_tone2:

:call_me_tone3:

:call_me_tone4:

:call_me_tone5:

:child:

:child_tone1:

:child_tone2:

:child_tone3:

:child_tone4:

:child_tone5:

:clap:

:clap_tone1:

:clap_tone2:

:clap_tone3:

:clap_tone4:

:clap_tone5:

:closed_umbrella:

:clown:

:coat:

:cold_face:

:cold_sweat:

:confounded:

:confused:

:construction_worker:

:construction_worker_tone1:

:construction_worker_tone2:

:construction_worker_tone3:

:construction_worker_tone4:

:construction_worker_tone5:

:couple:

:couple_mm:

:couple_with_heart:

:couple_with_heart_woman_man:

:couple_ww:

:couplekiss:

:cowboy:

:crown:

:cry:

:crying_cat_face:

:curly_haired:

:dancer:

:dancer_tone1:

:dancer_tone2:

:dancer_tone3:

:dancer_tone4:

:dancer_tone5:

:dark_sunglasses:

:deaf_man:

:deaf_man_tone1:

:deaf_man_tone2:

:deaf_man_tone3:

:deaf_man_tone4:

:deaf_man_tone5:

:deaf_person:

:deaf_person_tone1:

:deaf_person_tone2:

:deaf_person_tone3:

:deaf_person_tone4:

:deaf_person_tone5:

:deaf_woman:

:deaf_woman_tone1:

:deaf_woman_tone2:

:deaf_woman_tone3:

:deaf_woman_tone4:

:deaf_woman_tone5:

:detective:

:detective_tone1:

:detective_tone2:

:detective_tone3:

:detective_tone4:

:detective_tone5:

:disappointed:

:disappointed_relieved:

:diving_mask:

:dizzy_face:

:dress:

:drooling_face:

:ear:

:ear_tone1:

:ear_tone2:

:ear_tone3:

:ear_tone4:

:ear_tone5:

:ear_with_hearing_aid:

:ear_with_hearing_aid_tone1:

:ear_with_hearing_aid_tone2:

:ear_with_hearing_aid_tone3:

:ear_with_hearing_aid_tone4:

:ear_with_hearing_aid_tone5:

:elf:

:elf_tone1:

:elf_tone2:

:elf_tone3:

:elf_tone4:

:elf_tone5:

:exploding_head:

:expressionless:

:eye:

:eyeglasses:

:eyes:

:face_vomiting:

:face_with_hand_over_mouth:

:face_with_monocle:

:face_with_raised_eyebrow:

:face_with_symbols_over_mouth:

:fairy:

:fairy_tone1:

:fairy_tone2:

:fairy_tone3:

:fairy_tone4:

:fairy_tone5:

:family:

:family_man_boy:

:family_man_boy_boy:

:family_man_girl:

:family_man_girl_boy:

:family_man_girl_girl:

:family_man_woman_boy:

:family_mmb:

:family_mmbb:

:family_mmg:

:family_mmgb:

:family_mmgg:

:family_mwbb:

:family_mwg:

:family_mwgb:

:family_mwgg:

:family_woman_boy:

:family_woman_boy_boy:

:family_woman_girl:

:family_woman_girl_boy:

:family_woman_girl_girl:

:family_wwb:

:family_wwbb:

:family_wwg:

:family_wwgb:

:family_wwgg:

:fearful:

:fingers_crossed:

:fingers_crossed_tone1:

:fingers_crossed_tone2:

:fingers_crossed_tone3:

:fingers_crossed_tone4:

:fingers_crossed_tone5:

:fist:

:fist_tone1:

:fist_tone2:

:fist_tone3:

:fist_tone4:

:fist_tone5:

:flushed:

:foot:

:foot_tone1:

:foot_tone2:

:foot_tone3:

:foot_tone4:

:foot_tone5:

:footprints:

:frowning2:

:frowning:

:genie:

:ghost:

:girl:

:girl_tone1:

:girl_tone2:

:girl_tone3:

:girl_tone4:

:girl_tone5:

:gloves:

:goggles:

:grimacing:

:grin:

:grinning:

:guard:

:guard_tone1:

:guard_tone2:

:guard_tone3:

:guard_tone4:

:guard_tone5:

:hand_splayed:

:hand_splayed_tone1:

:hand_splayed_tone2:

:hand_splayed_tone3:

:hand_splayed_tone4:

:hand_splayed_tone5:

:handbag:

:handshake:

:head_bandage:

:heart_eyes:

:heart_eyes_cat:

:helmet_with_cross:

:high_heel:

:hiking_boot:

:hot_face:

:hugging:

:hushed:

:imp:

:innocent:

:jack_o_lantern:

:japanese_goblin:

:japanese_ogre:

:jeans:

:joy:

:joy_cat:

:kimono:

:kiss:

:kiss_mm:

:kiss_woman_man:

:kiss_ww:

:kissing:

:kissing_cat:

:kissing_closed_eyes:

:kissing_heart:

:kissing_smiling_eyes:

:lab_coat:

:laughing:

:left_facing_fist:

:left_facing_fist_tone1:

:left_facing_fist_tone2:

:left_facing_fist_tone3:

:left_facing_fist_tone4:

:left_facing_fist_tone5:

:leg:

:leg_tone1:

:leg_tone2:

:leg_tone3:

:leg_tone4:

:leg_tone5:

:levitate:

:levitate_tone1:

:levitate_tone2:

:levitate_tone3:

:levitate_tone4:

:levitate_tone5:

:lips:

:lipstick:

:love_you_gesture:

:love_you_gesture_tone1:

:love_you_gesture_tone2:

:love_you_gesture_tone3:

:love_you_gesture_tone4:

:love_you_gesture_tone5:

:luggage:

:lying_face:

:mage:

:mage_tone1:

:mage_tone2:

:mage_tone3:

:mage_tone4:

:mage_tone5:

:man:

:man_artist:

:man_artist_tone1:

:man_artist_tone2:

:man_artist_tone3:

:man_artist_tone4:

:man_artist_tone5:

:man_astronaut:

:man_astronaut_tone1:

:man_astronaut_tone2:

:man_astronaut_tone3:

:man_astronaut_tone4:

:man_astronaut_tone5:

:man_bald:

:man_bald_tone1:

:man_bald_tone2:

:man_bald_tone3:

:man_bald_tone4:

:man_bald_tone5:

:man_bowing:

:man_bowing_tone1:

:man_bowing_tone2:

:man_bowing_tone3:

:man_bowing_tone4:

:man_bowing_tone5:

:man_construction_worker:

:man_construction_worker_tone1:

:man_construction_worker_tone2:

:man_construction_worker_tone3:

:man_construction_worker_tone4:

:man_construction_worker_tone5:

:man_cook:

:man_cook_tone1:

:man_cook_tone2:

:man_cook_tone3:

:man_cook_tone4:

:man_cook_tone5:

:man_curly_haired:

:man_curly_haired_tone1:

:man_curly_haired_tone2:

:man_curly_haired_tone3:

:man_curly_haired_tone4:

:man_curly_haired_tone5:

:man_dancing:

:man_dancing_tone1:

:man_dancing_tone2:

:man_dancing_tone3:

:man_dancing_tone4:

:man_dancing_tone5:

:man_detective:

:man_detective_tone1:

:man_detective_tone2:

:man_detective_tone3:

:man_detective_tone4:

:man_detective_tone5:

:man_elf:

:man_elf_tone1:

:man_elf_tone2:

:man_elf_tone3:

:man_elf_tone4:

:man_elf_tone5:

:man_facepalming:

:man_facepalming_tone1:

:man_facepalming_tone2:

:man_facepalming_tone3:

:man_facepalming_tone4:

:man_facepalming_tone5:

:man_factory_worker:

:man_factory_worker_tone1:

:man_factory_worker_tone2:

:man_factory_worker_tone3:

:man_factory_worker_tone4:

:man_factory_worker_tone5:

:man_fairy:

:man_fairy_tone1:

:man_fairy_tone2:

:man_fairy_tone3:

:man_fairy_tone4:

:man_fairy_tone5:

:man_farmer:

:man_farmer_tone1:

:man_farmer_tone2:

:man_farmer_tone3:

:man_farmer_tone4:

:man_farmer_tone5:

:man_firefighter:

:man_firefighter_tone1:

:man_firefighter_tone2:

:man_firefighter_tone3:

:man_firefighter_tone4:

:man_firefighter_tone5:

:man_frowning:

:man_frowning_tone1:

:man_frowning_tone2:

:man_frowning_tone3:

:man_frowning_tone4:

:man_frowning_tone5:

:man_genie:

:man_gesturing_no:

:man_gesturing_no_tone1:

:man_gesturing_no_tone2:

:man_gesturing_no_tone3:

:man_gesturing_no_tone4:

:man_gesturing_no_tone5:

:man_gesturing_ok:

:man_gesturing_ok_tone1:

:man_gesturing_ok_tone2:

:man_gesturing_ok_tone3:

:man_gesturing_ok_tone4:

:man_gesturing_ok_tone5:

:man_getting_face_massage:

:man_getting_face_massage_tone1:

:man_getting_face_massage_tone2:

:man_getting_face_massage_tone3:

:man_getting_face_massage_tone4:

:man_getting_face_massage_tone5:

:man_getting_haircut:

:man_getting_haircut_tone1:

:man_getting_haircut_tone2:

:man_getting_haircut_tone3:

:man_getting_haircut_tone4:

:man_getting_haircut_tone5:

:man_guard:

:man_guard_tone1:

:man_guard_tone2:

:man_guard_tone3:

:man_guard_tone4:

:man_guard_tone5:

:man_health_worker:

:man_health_worker_tone1:

:man_health_worker_tone2:

:man_health_worker_tone3:

:man_health_worker_tone4:

:man_health_worker_tone5:

:man_in_manual_wheelchair:

:man_in_manual_wheelchair_tone1:

:man_in_manual_wheelchair_tone2:

:man_in_manual_wheelchair_tone3:

:man_in_manual_wheelchair_tone4:

:man_in_manual_wheelchair_tone5:

:man_in_motorized_wheelchair:

:man_in_motorized_wheelchair_tone1:

:man_in_motorized_wheelchair_tone2:

:man_in_motorized_wheelchair_tone3:

:man_in_motorized_wheelchair_tone4:

:man_in_motorized_wheelchair_tone5:

:man_in_steamy_room:

:man_in_steamy_room_tone1:

:man_in_steamy_room_tone2:

:man_in_steamy_room_tone3:

:man_in_steamy_room_tone4:

:man_in_steamy_room_tone5:

:man_in_tuxedo:

:man_in_tuxedo_tone1:

:man_in_tuxedo_tone2:

:man_in_tuxedo_tone3:

:man_in_tuxedo_tone4:

:man_in_tuxedo_tone5:

:man_judge:

:man_judge_tone1:

:man_judge_tone2:

:man_judge_tone3:

:man_judge_tone4:

:man_judge_tone5:

:man_kneeling:

:man_kneeling_tone1:

:man_kneeling_tone2:

:man_kneeling_tone3:

:man_kneeling_tone4:

:man_kneeling_tone5:

:man_mage:

:man_mage_tone1:

:man_mage_tone2:

:man_mage_tone3:

:man_mage_tone4:

:man_mage_tone5:

:man_mechanic:

:man_mechanic_tone1:

:man_mechanic_tone2:

:man_mechanic_tone3:

:man_mechanic_tone4:

:man_mechanic_tone5:

:man_office_worker:

:man_office_worker_tone1:

:man_office_worker_tone2:

:man_office_worker_tone3:

:man_office_worker_tone4:

:man_office_worker_tone5:

:man_pilot:

:man_pilot_tone1:

:man_pilot_tone2:

:man_pilot_tone3:

:man_pilot_tone4:

:man_pilot_tone5:

:man_police_officer:

:man_police_officer_tone1:

:man_police_officer_tone2:

:man_police_officer_tone3:

:man_police_officer_tone4:

:man_police_officer_tone5:

:man_pouting:

:man_pouting_tone1:

:man_pouting_tone2:

:man_pouting_tone3:

:man_pouting_tone4:

:man_pouting_tone5:

:man_raising_hand:

:man_raising_hand_tone1:

:man_raising_hand_tone2:

:man_raising_hand_tone3:

:man_raising_hand_tone4:

:man_raising_hand_tone5:

:man_red_haired:

:man_red_haired_tone1:

:man_red_haired_tone2:

:man_red_haired_tone3:

:man_red_haired_tone4:

:man_red_haired_tone5:

:man_running:

:man_running_tone1:

:man_running_tone2:

:man_running_tone3:

:man_running_tone4:

:man_running_tone5:

:man_scientist:

:man_scientist_tone1:

:man_scientist_tone2:

:man_scientist_tone3:

:man_scientist_tone4:

:man_scientist_tone5:

:man_shrugging:

:man_shrugging_tone1:

:man_shrugging_tone2:

:man_shrugging_tone3:

:man_shrugging_tone4:

:man_shrugging_tone5:

:man_singer:

:man_singer_tone1:

:man_singer_tone2:

:man_singer_tone3:

:man_singer_tone4:

:man_singer_tone5:

:man_standing:

:man_standing_tone1:

:man_standing_tone2:

:man_standing_tone3:

:man_standing_tone4:

:man_standing_tone5:

:man_student:

:man_student_tone1:

:man_student_tone2:

:man_student_tone3:

:man_student_tone4:

:man_student_tone5:

:man_superhero:

:man_superhero_tone1:

:man_superhero_tone2:

:man_superhero_tone3:

:man_superhero_tone4:

:man_superhero_tone5:

:man_supervillain:

:man_supervillain_tone1:

:man_supervillain_tone2:

:man_supervillain_tone3:

:man_supervillain_tone4:

:man_supervillain_tone5:

:man_teacher:

:man_teacher_tone1:

:man_teacher_tone2:

:man_teacher_tone3:

:man_teacher_tone4:

:man_teacher_tone5:

:man_technologist:

:man_technologist_tone1:

:man_technologist_tone2:

:man_technologist_tone3:

:man_technologist_tone4:

:man_technologist_tone5:

:man_tipping_hand:

:man_tipping_hand_tone1:

:man_tipping_hand_tone2:

:man_tipping_hand_tone3:

:man_tipping_hand_tone4:

:man_tipping_hand_tone5:

:man_tone1:

:man_tone2:

:man_tone3:

:man_tone4:

:man_tone5:

:man_vampire:

:man_vampire_tone1:

:man_vampire_tone2:

:man_vampire_tone3:

:man_vampire_tone4:

:man_vampire_tone5:

:man_walking:

:man_walking_tone1:

:man_walking_tone2:

:man_walking_tone3:

:man_walking_tone4:

:man_walking_tone5:

:man_wearing_turban:

:man_wearing_turban_tone1:

:man_wearing_turban_tone2:

:man_wearing_turban_tone3:

:man_wearing_turban_tone4:

:man_wearing_turban_tone5:

:man_white_haired:

:man_white_haired_tone1:

:man_white_haired_tone2:

:man_white_haired_tone3:

:man_white_haired_tone4:

:man_white_haired_tone5:

:man_with_chinese_cap:

:man_with_chinese_cap_tone1:

:man_with_chinese_cap_tone2:

:man_with_chinese_cap_tone3:

:man_with_chinese_cap_tone4:

:man_with_chinese_cap_tone5:

:man_with_probing_cane:

:man_with_probing_cane_tone1:

:man_with_probing_cane_tone2:

:man_with_probing_cane_tone3:

:man_with_probing_cane_tone4:

:man_with_probing_cane_tone5:

:man_zombie:

:mans_shoe:

:mask:

:mechanical_arm:

:mechanical_leg:

:men_holding_hands_tone1:

:men_holding_hands_tone2:

:men_holding_hands_tone2_tone1:

:men_holding_hands_tone3:

:men_holding_hands_tone3_tone1:

:men_holding_hands_tone3_tone2:

:men_holding_hands_tone4:

:men_holding_hands_tone4_tone1:

:men_holding_hands_tone4_tone2:

:men_holding_hands_tone4_tone3:

:men_holding_hands_tone5:

:men_holding_hands_tone5_tone1:

:men_holding_hands_tone5_tone2:

:men_holding_hands_tone5_tone3:

:men_holding_hands_tone5_tone4:

:men_with_bunny_ears_partying:

:mermaid:

:mermaid_tone1:

:mermaid_tone2:

:mermaid_tone3:

:mermaid_tone4:

:mermaid_tone5:

:merman:

:merman_tone1:

:merman_tone2:

:merman_tone3:

:merman_tone4:

:merman_tone5:

:merperson:

:merperson_tone1:

:merperson_tone2:

:merperson_tone3:

:merperson_tone4:

:merperson_tone5:

:metal:

:metal_tone1:

:metal_tone2:

:metal_tone3:

:metal_tone4:

:metal_tone5:

:middle_finger:

:middle_finger_tone1:

:middle_finger_tone2:

:middle_finger_tone3:

:middle_finger_tone4:

:middle_finger_tone5:

:money_mouth:

:mortar_board:

:mrs_claus:

:mrs_claus_tone1:

:mrs_claus_tone2:

:mrs_claus_tone3:

:mrs_claus_tone4:

:mrs_claus_tone5:

:muscle:

:muscle_tone1:

:muscle_tone2:

:muscle_tone3:

:muscle_tone4:

:muscle_tone5:

:nail_care:

:nail_care_tone1:

:nail_care_tone2:

:nail_care_tone3:

:nail_care_tone4:

:nail_care_tone5:

:nauseated_face:

:necktie:

:nerd:

:neutral_face:

:no_mouth:

:nose:

:nose_tone1:

:nose_tone2:

:nose_tone3:

:nose_tone4:

:nose_tone5:

:ok_hand:

:ok_hand_tone1:

:ok_hand_tone2:

:ok_hand_tone3:

:ok_hand_tone4:

:ok_hand_tone5:

:older_adult:

:older_adult_tone1:

:older_adult_tone2:

:older_adult_tone3:

:older_adult_tone4:

:older_adult_tone5:

:older_man:

:older_man_tone1:

:older_man_tone2:

:older_man_tone3:

:older_man_tone4:

:older_man_tone5:

:older_woman:

:older_woman_tone1:

:older_woman_tone2:

:older_woman_tone3:

:older_woman_tone4:

:older_woman_tone5:

:one_piece_swimsuit:

:open_hands:

:open_hands_tone1:

:open_hands_tone2:

:open_hands_tone3:

:open_hands_tone4:

:open_hands_tone5:

:open_mouth:

:palms_up_together:

:palms_up_together_tone1:

:palms_up_together_tone2:

:palms_up_together_tone3:

:palms_up_together_tone4:

:palms_up_together_tone5:

:partying_face:

:pensive:

:people_holding_hands:

:people_holding_hands_tone1:

:people_holding_hands_tone2:

:people_holding_hands_tone2_tone1:

:people_holding_hands_tone3:

:people_holding_hands_tone3_tone1:

:people_holding_hands_tone3_tone2:

:people_holding_hands_tone4:

:people_holding_hands_tone4_tone1:

:people_holding_hands_tone4_tone2:

:people_holding_hands_tone4_tone3:

:people_holding_hands_tone5:

:people_holding_hands_tone5_tone1:

:people_holding_hands_tone5_tone2:

:people_holding_hands_tone5_tone3:

:people_holding_hands_tone5_tone4:

:people_with_bunny_ears_partying:

:persevere:

:person_bowing:

:person_bowing_tone1:

:person_bowing_tone2:

:person_bowing_tone3:

:person_bowing_tone4:

:person_bowing_tone5:

:person_facepalming:

:person_facepalming_tone1:

:person_facepalming_tone2:

:person_facepalming_tone3:

:person_facepalming_tone4:

:person_facepalming_tone5:

:person_frowning:

:person_frowning_tone1:

:person_frowning_tone2:

:person_frowning_tone3:

:person_frowning_tone4:

:person_frowning_tone5:

:person_gesturing_no:

:person_gesturing_no_tone1:

:person_gesturing_no_tone2:

:person_gesturing_no_tone3:

:person_gesturing_no_tone4:

:person_gesturing_no_tone5:

:person_gesturing_ok:

:person_gesturing_ok_tone1:

:person_gesturing_ok_tone2:

:person_gesturing_ok_tone3:

:person_gesturing_ok_tone4:

:person_gesturing_ok_tone5:

:person_getting_haircut:

:person_getting_haircut_tone1:

:person_getting_haircut_tone2:

:person_getting_haircut_tone3:

:person_getting_haircut_tone4:

:person_getting_haircut_tone5:

:person_getting_massage:

:person_getting_massage_tone1:

:person_getting_massage_tone2:

:person_getting_massage_tone3:

:person_getting_massage_tone4:

:person_getting_massage_tone5:

:person_in_steamy_room:

:person_in_steamy_room_tone1:

:person_in_steamy_room_tone2:

:person_in_steamy_room_tone3:

:person_in_steamy_room_tone4:

:person_in_steamy_room_tone5:

:person_kneeling:

:person_kneeling_tone1:

:person_kneeling_tone2:

:person_kneeling_tone3:

:person_kneeling_tone4:

:person_kneeling_tone5:

:person_pouting:

:person_pouting_tone1:

:person_pouting_tone2:

:person_pouting_tone3:

:person_pouting_tone4:

:person_pouting_tone5:

:person_raising_hand:

:person_raising_hand_tone1:

:person_raising_hand_tone2:

:person_raising_hand_tone3:

:person_raising_hand_tone4:

:person_raising_hand_tone5:

:person_running:

:person_running_tone1:

:person_running_tone2:

:person_running_tone3:

:person_running_tone4:

:person_running_tone5:

:person_shrugging:

:person_shrugging_tone1:

:person_shrugging_tone2:

:person_shrugging_tone3:

:person_shrugging_tone4:

:person_shrugging_tone5:

:person_standing:

:person_standing_tone1:

:person_standing_tone2:

:person_standing_tone3:

:person_standing_tone4:

:person_standing_tone5:

:person_tipping_hand:

:person_tipping_hand_tone1:

:person_tipping_hand_tone2:

:person_tipping_hand_tone3:

:person_tipping_hand_tone4:

:person_tipping_hand_tone5:

:person_walking:

:person_walking_tone1:

:person_walking_tone2:

:person_walking_tone3:

:person_walking_tone4:

:person_walking_tone5:

:person_wearing_turban:

:person_wearing_turban_tone1:

:person_wearing_turban_tone2:

:person_wearing_turban_tone3:

:person_wearing_turban_tone4:

:person_wearing_turban_tone5:

:pinching_hand:

:pinching_hand_tone1:

:pinching_hand_tone2:

:pinching_hand_tone3:

:pinching_hand_tone4:

:pinching_hand_tone5:

:pleading_face:

:point_down:

:point_down_tone1:

:point_down_tone2:

:point_down_tone3:

:point_down_tone4:

:point_down_tone5:

:point_left:

:point_left_tone1:

:point_left_tone2:

:point_left_tone3:

:point_left_tone4:

:point_left_tone5:

:point_right:

:point_right_tone1:

:point_right_tone2:

:point_right_tone3:

:point_right_tone4:

:point_right_tone5:

:point_up:

:point_up_2:

:point_up_2_tone1:

:point_up_2_tone2:

:point_up_2_tone3:

:point_up_2_tone4:

:point_up_2_tone5:

:point_up_tone1:

:point_up_tone2:

:point_up_tone3:

:point_up_tone4:

:point_up_tone5:

:police_officer:

:police_officer_tone1:

:police_officer_tone2:

:police_officer_tone3:

:police_officer_tone4:

:police_officer_tone5:

:poop:

:pouch:

:pouting_cat:

:pray:

:pray_tone1:

:pray_tone2:

:pray_tone3:

:pray_tone4:

:pray_tone5:

:pregnant_woman:

:pregnant_woman_tone1:

:pregnant_woman_tone2:

:pregnant_woman_tone3:

:pregnant_woman_tone4:

:pregnant_woman_tone5:

:prince:

:prince_tone1:

:prince_tone2:

:prince_tone3:

:prince_tone4:

:prince_tone5:

:princess:

:princess_tone1:

:princess_tone2:

:princess_tone3:

:princess_tone4:

:princess_tone5:

:punch:

:punch_tone1:

:punch_tone2:

:punch_tone3:

:punch_tone4:

:punch_tone5:

:purse:

:rage:

:raised_back_of_hand:

:raised_back_of_hand_tone1:

:raised_back_of_hand_tone2:

:raised_back_of_hand_tone3:

:raised_back_of_hand_tone4:

:raised_back_of_hand_tone5:

:raised_hand:

:raised_hand_tone1:

:raised_hand_tone2:

:raised_hand_tone3:

:raised_hand_tone4:

:raised_hand_tone5:

:raised_hands:

:raised_hands_tone1:

:raised_hands_tone2:

:raised_hands_tone3:

:raised_hands_tone4:

:raised_hands_tone5:

:red_haired:

:relaxed:

:relieved:

:right_facing_fist:

:right_facing_fist_tone1:

:right_facing_fist_tone2:

:right_facing_fist_tone3:

:right_facing_fist_tone4:

:right_facing_fist_tone5:

:ring:

:robot:

:rofl:

:rolling_eyes:

:safety_vest:

:sandal:

:santa:

:santa_tone1:

:santa_tone2:

:santa_tone3:

:santa_tone4:

:santa_tone5:

:sari:

:scarf:

:school_satchel:

:scream:

:scream_cat:

:selfie:

:selfie_tone1:

:selfie_tone2:

:selfie_tone3:

:selfie_tone4:

:selfie_tone5:

:shirt:

:shorts:

:shushing_face:

:skull:

:skull_crossbones:

:sleeping:

:sleepy:

:slight_frown:

:slight_smile:

:smile:

:smile_cat:

:smiley:

:smiley_cat:

:smiling_face_with_3_hearts:

:smiling_imp:

:smirk:

:smirk_cat:

:sneezing_face:

:sob:

:socks:

:space_invader:

:speaking_head:

:star_struck:

:stuck_out_tongue:

:stuck_out_tongue_closed_eyes:

:stuck_out_tongue_winking_eye:

:sunglasses:

:superhero:

:superhero_tone1:

:superhero_tone2:

:superhero_tone3:

:superhero_tone4:

:superhero_tone5:

:supervillain:

:supervillain_tone1:

:supervillain_tone2:

:supervillain_tone3:

:supervillain_tone4:

:supervillain_tone5:

:sweat:

:sweat_smile:

:thermometer_face:

:thinking:

:thread:

:thumbsdown:

:thumbsdown_tone1:

:thumbsdown_tone2:

:thumbsdown_tone3:

:thumbsdown_tone4:

:thumbsdown_tone5:

:thumbsup:

:thumbsup_tone1:

:thumbsup_tone2:

:thumbsup_tone3:

:thumbsup_tone4:

:thumbsup_tone5:

:tired_face:

:tongue:

:tooth:

:tophat:

:triumph:

:two_men_holding_hands:

:two_women_holding_hands:

:unamused:

:upside_down:

:v:

:v_tone1:

:v_tone2:

:v_tone3:

:v_tone4:

:v_tone5:

:vampire:

:vampire_tone1:

:vampire_tone2:

:vampire_tone3:

:vampire_tone4:

:vampire_tone5:

:vulcan:

:vulcan_tone1:

:vulcan_tone2:

:vulcan_tone3:

:vulcan_tone4:

:vulcan_tone5:

:wave:

:wave_tone1:

:wave_tone2:

:wave_tone3:

:wave_tone4:

:wave_tone5:

:weary:

:white_haired:

:wink:

:woman:

:woman_and_man_holding_hands_tone1:

:woman_and_man_holding_hands_tone1_tone2:

:woman_and_man_holding_hands_tone1_tone3:

:woman_and_man_holding_hands_tone1_tone4:

:woman_and_man_holding_hands_tone1_tone5:

:woman_and_man_holding_hands_tone2:

:woman_and_man_holding_hands_tone2_tone1:

:woman_and_man_holding_hands_tone2_tone3:

:woman_and_man_holding_hands_tone2_tone4:

:woman_and_man_holding_hands_tone2_tone5:

:woman_and_man_holding_hands_tone3:

:woman_and_man_holding_hands_tone3_tone1:

:woman_and_man_holding_hands_tone3_tone2:

:woman_and_man_holding_hands_tone3_tone4:

:woman_and_man_holding_hands_tone3_tone5:

:woman_and_man_holding_hands_tone4:

:woman_and_man_holding_hands_tone4_tone1:

:woman_and_man_holding_hands_tone4_tone2:

:woman_and_man_holding_hands_tone4_tone3:

:woman_and_man_holding_hands_tone4_tone5:

:woman_and_man_holding_hands_tone5:

:woman_and_man_holding_hands_tone5_tone1:

:woman_and_man_holding_hands_tone5_tone2:

:woman_and_man_holding_hands_tone5_tone3:

:woman_and_man_holding_hands_tone5_tone4:

:woman_artist:

:woman_artist_tone1:

:woman_artist_tone2:

:woman_artist_tone3:

:woman_artist_tone4:

:woman_artist_tone5:

:woman_astronaut:

:woman_astronaut_tone1:

:woman_astronaut_tone2:

:woman_astronaut_tone3:

:woman_astronaut_tone4:

:woman_astronaut_tone5:

:woman_bald:

:woman_bald_tone1:

:woman_bald_tone2:

:woman_bald_tone3:

:woman_bald_tone4:

:woman_bald_tone5:

:woman_bowing:

:woman_bowing_tone1:

:woman_bowing_tone2:

:woman_bowing_tone3:

:woman_bowing_tone4:

:woman_bowing_tone5:

:woman_construction_worker:

:woman_construction_worker_tone1:

:woman_construction_worker_tone2:

:woman_construction_worker_tone3:

:woman_construction_worker_tone4:

:woman_construction_worker_tone5:

:woman_cook:

:woman_cook_tone1:

:woman_cook_tone2:

:woman_cook_tone3:

:woman_cook_tone4:

:woman_cook_tone5:

:woman_curly_haired:

:woman_curly_haired_tone1:

:woman_curly_haired_tone2:

:woman_curly_haired_tone3:

:woman_curly_haired_tone4:

:woman_curly_haired_tone5:

:woman_detective:

:woman_detective_tone1:

:woman_detective_tone2:

:woman_detective_tone3:

:woman_detective_tone4:

:woman_detective_tone5:

:woman_elf:

:woman_elf_tone1:

:woman_elf_tone2:

:woman_elf_tone3:

:woman_elf_tone4:

:woman_elf_tone5:

:woman_facepalming:

:woman_facepalming_tone1:

:woman_facepalming_tone2:

:woman_facepalming_tone3:

:woman_facepalming_tone4:

:woman_facepalming_tone5:

:woman_factory_worker:

:woman_factory_worker_tone1:

:woman_factory_worker_tone2:

:woman_factory_worker_tone3:

:woman_factory_worker_tone4:

:woman_factory_worker_tone5:

:woman_fairy:

:woman_fairy_tone1:

:woman_fairy_tone2:

:woman_fairy_tone3:

:woman_fairy_tone4:

:woman_fairy_tone5:

:woman_farmer:

:woman_farmer_tone1:

:woman_farmer_tone2:

:woman_farmer_tone3:

:woman_farmer_tone4:

:woman_farmer_tone5:

:woman_firefighter:

:woman_firefighter_tone1:

:woman_firefighter_tone2:

:woman_firefighter_tone3:

:woman_firefighter_tone4:

:woman_firefighter_tone5:

:woman_frowning:

:woman_frowning_tone1:

:woman_frowning_tone2:

:woman_frowning_tone3:

:woman_frowning_tone4:

:woman_frowning_tone5:

:woman_genie:

:woman_gesturing_no:

:woman_gesturing_no_tone1:

:woman_gesturing_no_tone2:

:woman_gesturing_no_tone3:

:woman_gesturing_no_tone4:

:woman_gesturing_no_tone5:

:woman_gesturing_ok:

:woman_gesturing_ok_tone1:

:woman_gesturing_ok_tone2:

:woman_gesturing_ok_tone3:

:woman_gesturing_ok_tone4:

:woman_gesturing_ok_tone5:

:woman_getting_face_massage:

:woman_getting_face_massage_tone1:

:woman_getting_face_massage_tone2:

:woman_getting_face_massage_tone3:

:woman_getting_face_massage_tone4:

:woman_getting_face_massage_tone5:

:woman_getting_haircut:

:woman_getting_haircut_tone1:

:woman_getting_haircut_tone2:

:woman_getting_haircut_tone3:

:woman_getting_haircut_tone4:

:woman_getting_haircut_tone5:

:woman_guard:

:woman_guard_tone1:

:woman_guard_tone2:

:woman_guard_tone3:

:woman_guard_tone4:

:woman_guard_tone5:

:woman_health_worker:

:woman_health_worker_tone1:

:woman_health_worker_tone2:

:woman_health_worker_tone3:

:woman_health_worker_tone4:

:woman_health_worker_tone5:

:woman_in_manual_wheelchair:

:woman_in_manual_wheelchair_tone1:

:woman_in_manual_wheelchair_tone2:

:woman_in_manual_wheelchair_tone3:

:woman_in_manual_wheelchair_tone4:

:woman_in_manual_wheelchair_tone5:

:woman_in_motorized_wheelchair:

:woman_in_motorized_wheelchair_tone1:

:woman_in_motorized_wheelchair_tone2:

:woman_in_motorized_wheelchair_tone3:

:woman_in_motorized_wheelchair_tone4:

:woman_in_motorized_wheelchair_tone5:

:woman_in_steamy_room:

:woman_in_steamy_room_tone1:

:woman_in_steamy_room_tone2:

:woman_in_steamy_room_tone3:

:woman_in_steamy_room_tone4:

:woman_in_steamy_room_tone5:

:woman_judge:

:woman_judge_tone1:

:woman_judge_tone2:

:woman_judge_tone3:

:woman_judge_tone4:

:woman_judge_tone5:

:woman_kneeling:

:woman_kneeling_tone1:

:woman_kneeling_tone2:

:woman_kneeling_tone3:

:woman_kneeling_tone4:

:woman_kneeling_tone5:

:woman_mage:

:woman_mage_tone1:

:woman_mage_tone2:

:woman_mage_tone3:

:woman_mage_tone4:

:woman_mage_tone5:

:woman_mechanic:

:woman_mechanic_tone1:

:woman_mechanic_tone2:

:woman_mechanic_tone3:

:woman_mechanic_tone4:

:woman_mechanic_tone5:

:woman_office_worker:

:woman_office_worker_tone1:

:woman_office_worker_tone2:

:woman_office_worker_tone3:

:woman_office_worker_tone4:

:woman_office_worker_tone5:

:woman_pilot:

:woman_pilot_tone1:

:woman_pilot_tone2:

:woman_pilot_tone3:

:woman_pilot_tone4:

:woman_pilot_tone5:

:woman_police_officer:

:woman_police_officer_tone1:

:woman_police_officer_tone2:

:woman_police_officer_tone3:

:woman_police_officer_tone4:

:woman_police_officer_tone5:

:woman_pouting:

:woman_pouting_tone1:

:woman_pouting_tone2:

:woman_pouting_tone3:

:woman_pouting_tone4:

:woman_pouting_tone5:

:woman_raising_hand:

:woman_raising_hand_tone1:

:woman_raising_hand_tone2:

:woman_raising_hand_tone3:

:woman_raising_hand_tone4:

:woman_raising_hand_tone5:

:woman_red_haired:

:woman_red_haired_tone1:

:woman_red_haired_tone2:

:woman_red_haired_tone3:

:woman_red_haired_tone4:

:woman_red_haired_tone5:

:woman_running:

:woman_running_tone1:

:woman_running_tone2:

:woman_running_tone3:

:woman_running_tone4:

:woman_running_tone5:

:woman_scientist:

:woman_scientist_tone1:

:woman_scientist_tone2:

:woman_scientist_tone3:

:woman_scientist_tone4:

:woman_scientist_tone5:

:woman_shrugging:

:woman_shrugging_tone1:

:woman_shrugging_tone2:

:woman_shrugging_tone3:

:woman_shrugging_tone4:

:woman_shrugging_tone5:

:woman_singer:

:woman_singer_tone1:

:woman_singer_tone2:

:woman_singer_tone3:

:woman_singer_tone4:

:woman_singer_tone5:

:woman_standing:

:woman_standing_tone1:

:woman_standing_tone2:

:woman_standing_tone3:

:woman_standing_tone4:

:woman_standing_tone5:

:woman_student:

:woman_student_tone1:

:woman_student_tone2:

:woman_student_tone3:

:woman_student_tone4:

:woman_student_tone5:

:woman_superhero:

:woman_superhero_tone1:

:woman_superhero_tone2:

:woman_superhero_tone3:

:woman_superhero_tone4:

:woman_superhero_tone5:

:woman_supervillain:

:woman_supervillain_tone1:

:woman_supervillain_tone2:

:woman_supervillain_tone3:

:woman_supervillain_tone4:

:woman_supervillain_tone5:

:woman_teacher:

:woman_teacher_tone1:

:woman_teacher_tone2:

:woman_teacher_tone3:

:woman_teacher_tone4:

:woman_teacher_tone5:

:woman_technologist:

:woman_technologist_tone1:

:woman_technologist_tone2:

:woman_technologist_tone3:

:woman_technologist_tone4:

:woman_technologist_tone5:

:woman_tipping_hand:

:woman_tipping_hand_tone1:

:woman_tipping_hand_tone2:

:woman_tipping_hand_tone3:

:woman_tipping_hand_tone4:

:woman_tipping_hand_tone5:

:woman_tone1:

:woman_tone2:

:woman_tone3:

:woman_tone4:

:woman_tone5:

:woman_vampire:

:woman_vampire_tone1:

:woman_vampire_tone2:

:woman_vampire_tone3:

:woman_vampire_tone4:

:woman_vampire_tone5:

:woman_walking:

:woman_walking_tone1:

:woman_walking_tone2:

:woman_walking_tone3:

:woman_walking_tone4:

:woman_walking_tone5:

:woman_wearing_turban:

:woman_wearing_turban_tone1:

:woman_wearing_turban_tone2:

:woman_wearing_turban_tone3:

:woman_wearing_turban_tone4:

:woman_wearing_turban_tone5:

:woman_white_haired:

:woman_white_haired_tone1:

:woman_white_haired_tone2:

:woman_white_haired_tone3:

:woman_white_haired_tone4:

:woman_white_haired_tone5:

:woman_with_headscarf:

:woman_with_headscarf_tone1:

:woman_with_headscarf_tone2:

:woman_with_headscarf_tone3:

:woman_with_headscarf_tone4:

:woman_with_headscarf_tone5:

:woman_with_probing_cane:

:woman_with_probing_cane_tone1:

:woman_with_probing_cane_tone2:

:woman_with_probing_cane_tone3:

:woman_with_probing_cane_tone4:

:woman_with_probing_cane_tone5:

:woman_zombie:

:womans_clothes:

:womans_flat_shoe:

:womans_hat:

:women_holding_hands_tone1:

:women_holding_hands_tone2:

:women_holding_hands_tone2_tone1:

:women_holding_hands_tone3:

:women_holding_hands_tone3_tone1:

:women_holding_hands_tone3_tone2:

:women_holding_hands_tone4:

:women_holding_hands_tone4_tone1:

:women_holding_hands_tone4_tone2:

:women_holding_hands_tone4_tone3:

:women_holding_hands_tone5:

:women_holding_hands_tone5_tone1:

:women_holding_hands_tone5_tone2:

:women_holding_hands_tone5_tone3:

:women_holding_hands_tone5_tone4:

:women_with_bunny_ears_partying:

:woozy_face:

:worried:

:writing_hand:

:writing_hand_tone1:

:writing_hand_tone2:

:writing_hand_tone3:

:writing_hand_tone4:

:writing_hand_tone5:

:yarn:

:yawning_face:

:yum:

:zany_face:

:zipper_mouth:

:zombie:

:regional_indicator_a:

:regional_indicator_b:

:regional_indicator_c:

:regional_indicator_d:

:regional_indicator_e:

:regional_indicator_f:

:regional_indicator_g:

:regional_indicator_h:

:regional_indicator_i:

:regional_indicator_j:

:regional_indicator_k:

:regional_indicator_l:

:regional_indicator_m:

:regional_indicator_n:

:regional_indicator_o:

:regional_indicator_p:

:regional_indicator_q:

:regional_indicator_r:

:regional_indicator_s:

:regional_indicator_t:

:regional_indicator_u:

:regional_indicator_v:

:regional_indicator_w:

:regional_indicator_x:

:regional_indicator_y:

:regional_indicator_z:

:100:

:1234:

:a:

:ab:

:abc:

:abcd:

:accept:

:anger:

:anger_right:

:aquarius:

:aries:

:arrow_backward:

:arrow_double_down:

:arrow_double_up:

:arrow_down:

:arrow_down_small:

:arrow_forward:

:arrow_heading_down:

:arrow_heading_up:

:arrow_left:

:arrow_lower_left:

:arrow_lower_right:

:arrow_right:

:arrow_right_hook:

:arrow_up:

:arrow_up_down:

:arrow_up_small:

:arrow_upper_left:

:arrow_upper_right:

:arrows_clockwise:

:arrows_counterclockwise:

:asterisk:

:asterisk_symbol:

:atm:

:atom:

:b:

:baby_symbol:

:back:

:baggage_claim:

:ballot_box_with_check:

:bangbang:

:beginner:

:bell:

:biohazard:

:black_circle:

:black_heart:

:black_joker:

:black_large_square:

:black_medium_small_square:

:black_medium_square:

:black_small_square:

:black_square_button:

:blue_circle:

:blue_heart:

:blue_square:

:broken_heart:

:brown_circle:

:brown_heart:

:brown_square:

:cancer:

:capital_abcd:

:capricorn:

:chart:

:children_crossing:

:cinema:

:cl:

:clock1030:

:clock10:

:clock1130:

:clock11:

:clock1230:

:clock12:

:clock130:

:clock1:

:clock230:

:clock2:

:clock330:

:clock3:

:clock430:

:clock4:

:clock530:

:clock5:

:clock630:

:clock6:

:clock730:

:clock7:

:clock830:

:clock8:

:clock930:

:clock9:

:clubs:

:congratulations:

:cool:

:copyright:

:cross:

:cupid:

:curly_loop:

:currency_exchange:

:customs:

:cyclone:

:diamond_shape_with_a_dot_inside:

:diamonds:

:digit_eight:

:digit_five:

:digit_four:

:digit_nine:

:digit_one:

:digit_seven:

:digit_six:

:digit_three:

:digit_two:

:digit_zero:

:do_not_litter:

:eight:

:eight_pointed_black_star:

:eight_spoked_asterisk:

:eject:

:end:

:exclamation:

:eye_in_speech_bubble:

:fast_forward:

:female_sign:

:five:

:fleur-de-lis:

:flower_playing_cards:

:four:

:free:

:gemini:

:gift_heart:

:globe_with_meridians:

:green_circle:

:green_heart:

:green_square:

:grey_exclamation:

:grey_question:

:hash:

:heart:

:heart_decoration:

:heart_exclamation:

:heartbeat:

:heartpulse:

:hearts:

:heavy_check_mark:

:heavy_division_sign:

:heavy_dollar_sign:

:heavy_minus_sign:

:heavy_multiplication_x:

:heavy_plus_sign:

:high_brightness:

:hotsprings:

:id:

:ideograph_advantage:

:infinity:

:information_source:

:interrobang:

:keycap_ten:

:koko:

:large_blue_diamond:

:large_orange_diamond:

:left_luggage:

:left_right_arrow:

:leftwards_arrow_with_hook:

:leo:

:libra:

:loop:

:loud_sound:

:loudspeaker:

:low_brightness:

:m:

:mahjong:

:male_sign:

:medical_symbol:

:mega:

:menorah:

:mens:

:mobile_phone_off:

:musical_note:

:mute:

:name_badge:

:negative_squared_cross_mark:

:new:

:ng:

:nine:

:no_bell:

:no_bicycles:

:no_entry:

:no_entry_sign:

:no_mobile_phones:

:no_pedestrians:

:no_smoking:

:non-potable_water:

:notes:

:o2:

:o:

:octagonal_sign:

:ok:

:om_symbol:

:on:

:one:

:ophiuchus:

:orange_circle:

:orange_heart:

:orange_square:

:orthodox_cross:

:parking:

:part_alternation_mark:

:passport_control:

:pause_button:

:peace:

:pisces:

:place_of_worship:

:play_pause:

:pound_symbol:

:purple_circle:

:purple_heart:

:purple_square:

:put_litter_in_its_place:

:question:

:radio_button:

:radioactive:

:record_button:

:recycle:

:red_circle:

:red_square:

:registered:

:repeat:

:repeat_one:

:restroom:

:revolving_hearts:

:rewind:

:sa:

:sagittarius:

:scorpius:

:secret:

:seven:

:signal_strength:

:six:

:six_pointed_star:

:small_blue_diamond:

:small_orange_diamond:

:small_red_triangle:

:small_red_triangle_down:

:soon:

:sos:

:sound:

:spades:

:sparkle:

:sparkling_heart:

:speaker:

:speech_balloon:

:speech_left:

:star_and_crescent:

:star_of_david:

:stop_button:

:symbols:

:taurus:

:thought_balloon:

:three:

:tm:

:top:

:track_next:

:track_previous:

:trident:

:twisted_rightwards_arrows:

:two:

:two_hearts:

:u5272:

:u5408:

:u55b6:

:u6307:

:u6708:

:u6709:

:u6e80:

:u7121:

:u7533:

:u7981:

:u7a7a:

:underage:

:up:

:vibration_mode:

:virgo:

:vs:

:warning:

:wavy_dash:

:wc:

:wheel_of_dharma:

:wheelchair:

:white_check_mark:

:white_circle:

:white_flower:

:white_heart:

:white_large_square:

:white_medium_small_square:

:white_medium_square:

:white_small_square:

:white_square_button:

:womens:

:x:

:yellow_circle:

:yellow_heart:

:yellow_square:

:yin_yang:

:zero:

:zzz:

:aerial_tramway:

:airplane:

:airplane_arriving:

:airplane_departure:

:airplane_small:

:ambulance:

:anchor:

:articulated_lorry:

:auto_rickshaw:

:bank:

:beach:

:beach_umbrella:

:bike:

:blue_car:

:bridge_at_night:

:bullettrain_front:

:bullettrain_side:

:bus:

:busstop:

:camping:

:canoe:

:carousel_horse:

:church:

:city_dusk:

:city_sunset:

:cityscape:

:classical_building:

:construction:

:construction_site:

:convenience_store:

:cruise_ship:

:department_store:

:desert:

:european_castle:

:european_post_office:

:factory:

:ferris_wheel:

:ferry:

:fire_engine:

:fireworks:

:flying_saucer:

:foggy:

:fountain:

:fuelpump:

:helicopter:

:hindu_temple:

:homes:

:hospital:

:hotel:

:house:

:house_abandoned:

:house_with_garden:

:island:

:japan:

:japanese_castle:

:kaaba:

:light_rail:

:love_hotel:

:manual_wheelchair:

:map:

:metro:

:milky_way:

:minibus:

:monorail:

:mosque:

:motor_scooter:

:motorboat:

:motorcycle:

:motorized_wheelchair:

:motorway:

:mount_fuji:

:mountain:

:mountain_cableway:

:mountain_railway:

:mountain_snow:

:moyai:

:night_with_stars:

:office:

:oncoming_automobile:

:oncoming_bus:

:oncoming_police_car:

:oncoming_taxi:

:park:

:police_car:

:post_office:

:race_car:

:railway_car:

:railway_track:

:red_car:

:rice_scene:

:rocket:

:roller_coaster:

:rotating_light:

:sailboat:

:satellite_orbital:

:school:

:scooter:

:seat:

:shinto_shrine:

:ship:

:sparkler:

:speedboat:

:stadium:

:stars:

:station:

:statue_of_liberty:

:steam_locomotive:

:sunrise:

:sunrise_over_mountains:

:suspension_railway:

:synagogue:

:taxi:

:tent:

:tokyo_tower:

:tractor:

:traffic_light:

:train2:

:train:

:tram:

:trolleybus:

:truck:

:vertical_traffic_light:

:volcano:

:wedding:

Location

Wiki allows to point links to locations within XMLPortal. This makes easy linking among portal contexts. Current location functions are:

repository(file_location_within_repository)

This function returns full repository location plus file_location_within_repository. File's location must start with a slash.

context(location_within_portal)

This function returns full application context plus location_within_portal. Location must start with a slash. Context deals with application's deployed context, thus, for web applications deployed at root context, result string will be empty, whereas for the rest will return to /application_context

current(extra_parameters)

Current refers to the current portal context, thus linking to current function will end you up to the same context you already are. This function is intended to add parameters .

More location options in anchor.

Tips and tricks

Break headers in multiple lines

In wiki, a header is a single line starting with ---+. The moment you press enter key and create a new line, you also stop the header. In order to split a header in multiple lines, use the %BR% macro. %BR% generates a new line, but continues the same line as for wiki processor.

The wiki text

[block(center)]
---+++Centered header%BR%with multiple%BR%lines
[/block]

Will compile into

Centered header
with multiple
lines

List element with multiple lines

Lists are represented by one or more spaces followed by * or 1. As it happen with headers, list elements use a single line. You can split the line into multiple lines using the %BR% macro.

The wiki text

 * **A list element**%BR%With some description...
 * **A second element**%BR%With some more description attached...

Will compile into

Conditional visibility

By using macros, you can control elements visibility. We'll use two macros, {@user} and {@equals}. The first one will check if current user id is blank, in which case no user is authenticated. The second macro will expand to none when user id is blank, and to blank otherwise.

The wiki text

[block(display:{@equals:{@user:id}::none: })]
Hello {@user:name}!
[/block]

The statement the equals macro aims to resolve is: if user id is blank, write none, otherwise write one space. Read more about the equals macro in anchor.

Will compile into, visible only when authenticated

Hello !

If you're an unauthenticated visitor, you'll be able to see the invisible block by inspecting the element.
CSS and attributes

Most of wiki blocks, in the form of [element], accept passing CSS style attributes and element attributes. There are several differences, though. Styles are separated by comma instead of semicolon. They are introduced directly between parenthesis, not in a style attribute. Element attributes, for example class, are prefixed with &.

Let's see by example using the [block] element:

CSS styles

Wiki

[block(background-color:#eee,color:#333,padding:5px 10px)]

Result

<div style="background-color:#eee;color:#333;padding:5px 10px;">

Class attribute

Wiki

[block(&class:ui segment)]

Result

<div class="ui segment">

Mixing both

Wiki

[block(&class:ui segment,background-color:#eee,color:#333,padding:5px 10px)]

Result

<div class="ui segment" style="background-color:#eee;color:#333;padding:5px 10px;">

For full CSS specification details see CSS at W3C. Starters might prefer LEARN & USE.

HTML

It is possible to write HTML directly. If you do so, the wiki processor will add unnecessary paragraphs and new lines. To avoid this behavior, stop wiki by writing $no_wiki. You can start it whenever you want by writing $wiki.

Best practices

The recommended way to add the $wiki and $no_wiki directives, is using an empty line. Mainly when stopping the wiki processor.

To understand why an empty line, you need to know what happen behind scenes. The wiki processor maintains a stack with all the elements created. When stops, the processor ensures that all the elements still open are closed, in the correct order. If you stop the processor, for instance, inside a [block], the processor will generate a [/block].

Java

Writing colored Java code is very simple using $java in an empty line. Following text will be considered Java code.

public void main(String[] args) {
  public final String hello = "Hello!";
  public final int INITIAL_MODE = 23;
  // here will come your code
}
Java, as with wiki syntax, ends with $no_java.
XML

Writing colored XML is very simple using $xml in an empty line. Following text will be considered XML.

<task id="1">
  <responsible id="19"/>
  <parent id="12"/>
</task>
XML, as with wiki syntax, ends with $no_xml.
UI Frameworks
Get along with JavaScript frameworks and Elephant Wiki

This site uses Semantic-UI / Fomantic-UI. It also uses the wiki syntax in all pages.

Adding the class attribute to wiki elements

Wiki elements accept CSS style attributes directly within parenthesis. When adding (attribute:value) wiki expands to style="attribute:value". Attributes starting with & are treated as non-style attributes and became an HTML element attribute. This is the case for class.

Wiki

Expanded HTML

Result

[html(&class:ui button)]Button[/html]
<div class="ui button">Button</div>
Button

Mixing class and style attributes

It is possible to use both, class and style attributes in wiki elements. Simply add style attributes separated by comas.

Wiki

Expanded HTML

Result

[html(&class:ui button,font-style:oblique,text-transform:uppercase)]Button[/html]
<div class="ui button" style="font-style:oblique;text-transform:uppercase;">Button</div>
Button

Wiki elements relation to HTML

Wiki

Results in

Description

[html]
<div>

Accepting characters block. Will not create new lines or paragraphs. See Blocks .

[block]
<div>

Non accepting characters block. Creates new lines and paragraphs when an empty line is given. See Blocks .

[span]
<span>

Creates an in line element. See Spans .

[link]
<a>

Creates an anchor. See Links .

[joker(element)]
<element>

Creates an accepting characters element named as the first parameter. See Joker .

The joker as a joker

The joker wiki element can emulate any HTML element. Let's see a joker as an HTML anchor.

Wiki

Expanded HTML

Result

[joker(a,&href:/docs,&class:ui button,text-transform:uppercase)]Docs[/joker]
<a href="/docs" class="ui button" style="text-transform:uppercase;">Docs</a>
Docs

When to use html or block

As you probably noticed, html and block wiki elements do much the same. They create an HTML div with the difference of accepting or not characters. When accepting characters, the element does not create new lines or paragraphs.

When creating Semantic-UI grids, the grid requires the use of html. Columns may use html or block depending on their content. For example, if the column content is text, is preferable to use block. If the content is mainly other elements, use html instead.

The two blocks of construction would be:

For text columns

[html(&class:ui two column grid)]
[block(&class:column)]
Some text.
[/block]
[block(&class:column)]
Some other text.
[/block]
[/html]

For more element columns

[html(&class:ui two column grid)]
[html(&class:column)]
[block(&class:ui segment)]Some segment.[/block]
[/html]
[html(&class:column)]
[block(&class:ui segment)]Some other segment.[/block]
[/html]
[/html]
Useful templates

These templates use the wiki syntax to create Semantic-UI elements. By default, Elephant uses the template-semantic root for web templates.

Web site solution vs. Email solution

It's important to understand differences between the content published in the web from that sent by email.

Emails cannot use web frameworks. Email applications do not allow the whole set of CSS rules, neither accept executing all JavaScript code. In short, emails use a subset of the wiki syntax in order to allow publications to be sent by email and show as expected. As a rule, do not use framework specific classes in email content.

Left image, right centered text

Web site solution


This is an example of middle and center aligned text

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Code

[html(&class:ui stackable middle aligned grid)]
[html(&class:six wide column,padding-top:0px,margin:0px,line-height:0px)]
[img repository(/abstractal1.jpg)]
[/html]
[html(&class:ten wide column)]
[block(&class:ui basic center aligned text container segment,font-size:2.1em)]
---+This is an example of middle and center aligned text

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
[/block]
[/html]
[/html]

Email solution


This is an example of middle and center aligned text

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Code

[column(width:35%)]
[img repository(/abstractal1.jpg)]
[column(width:65%,text-align:center,vertical-align:middle,font-size:2.1em)]
---+This is an example of middle and center aligned text

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
[/column]
[/no-format]
Video
This example requires Semantic-UI / Fomantic-UI.

Although you can disconnect wiki syntax, this example shows how you could mix both. In normal cases, you will add this code within stackable grids, cards, items and so on, to create a better user experience.

Wiki

The data-id is the YouTube video code. This code is visible in the URL as a parameter or part of the path, depending if is a share URL or you're watching in YouTube.

[html(&class:ui embed normal,&data-source:youtube,&data-id:eCBUrsqVfgE)][/html]

Result

EWiki (Beta)

A new version of the wiki interpreter is coming. There are some major features that may change the way wiki is used, although the intention is to be backward compatible.

Check EWiki syntax for updates.

New features

Error handling

The interpreter will be able to inform about formatting errors and point them in the editor.

The agnostic tag

Tags can be created despite not being in the specification. This overpowers the old joker tag.

Mixed content

The directives related to changing the interpreter mode are no longer required. HTML can be embedded within wiki causing no extra formatting, except for text containers. Java code and XML can be included as blocks or inline using enclosing java and xml tags.

Easy escaping characters

Any character can be escaped using the back slash.

Quoted or double-quoted tag parameters

Complex strings can be quoted or double-quoted. No need to escape the double dot in URLs, simply quote it.

Common non-style attributes

The class attribute no longer needs to be prefixed with &. The more usual attributes will follow the same direction.

Tagged templates

Tags with existing templates are rendered using the template.

HTML beautified

HTML output block indented. Missing tags corrected, even if not in the specification.

Administering

Elephant Web Admin API is a new set of tools for creating pages and editing contents in a single place.

The main goal of the API is simplifying tasks and providing web pages with the same features other modules already have. For one, the EWiki.

New features

Context admin

Content admin


Configuration files

Elephant Configuration Files contain information about what's internally happening when delivering content, reading databases or sending emails.

Configuration files are classified into different roots, and developed into specific branches, with meaningful names. This table explains the roots.

Root Content
Configuration Generic site configuration, search forms, DB connections, mail providers, OAuth providers, ...
Support Internal support data.
Cascade Stylesheets Overridable cascade stylesheets.
Mail templates Format templates for emails.
Semantic templates Semantic/Fomantic templates.
Reports Book-keeping reports. Requires Financials installed.
Terms of Use Terms of Use to be accepted, before a user can register.
Welcome Extra text added to the Welcome email.
Wiki Wiki templates and snippets.
Permissions and scope
It isn't a common task to configure these files, and the access is only granted to superusers. An exception could be the Terms of Use and Welcome content.

Terms of Use

Files in this folder, can be .txt, .html and .wiki. Each type will be interpreted as expected by the file's extension. The result will be a dialog with as many tabs as files encountered, being the name in the tab, the file's name.

Welcome

Files in this folder, can be extra.txt or extra.wiki. Each type will be interpreted as expected by the file's extension. The result will be added to the welcome email.

The text file will integrate into the email with default size and font. The wiki file is expected to include wiki with email compatible syntax.

Configurator

Elephant Configurator is a file based configuration tool. The main intention is to encapsulate Elephant site properties. The tool uses a map of keys, values, contextual help and triggers. This is a list of keys, and their use within Elephant based modules, including the BrightSide libraries. This feature is only available to superuser.

Beta feature
Since this feature is still in beta stage, some keys may not be implemented. Use with care.
Key Description Default
Alliance.Client.Grants.ReadServers Disables server-reading Project Grants when false true
Appearance.Color.Primary Primary color, should be set to stylesheet primary color, can be used in Wmacros with color, as primary
Appearance.Color.Secondary Secondary color, should be set to stylesheet secondary color, can be used in Wmacros with color, as secondary
Appearance.Color.C1 Free definition, can be used in Wmacros with color, as c1
Appearance.Color.C2 Free definition, can be used in Wmacros with color, as c2
Appearance.Color.C3 Free definition, can be used in Wmacros with color, as c3
Authentication.AllowCenters Disables centers from authenticate when false false
Authentication.AllowCompanies Disables companies from authenticate when false false
Authentication.AllowLiveLinks Disables LiveLinks when false true
Contact.Relation.Professional.Autovalidate Professional relations will auto-validate when true false
Contact.Relation.Student.Autovalidate Student relations will auto-validate when true false
Context.Mobile.Path When defined, enables a different landing for mobile devices
Directory.Networking.Access.BasicRoles Basic roles for accessing directories @admin:is|@patron:on|@partner:on
Directory.Networking.Access.PremiumRoles Premium roles for accessing premium features @admin:is|@patron:on|@partner:on
Directory.Networking.Centers.ListedRoles Center's roles in order to be listed @center:is
Directory.Networking.Companies.ListedRoles Company's roles in order to be listed @company:is
Directory.Networking.Entities.ListedRoles Company or Center roles in order to be listed @company:is|@center:is
Directory.Networking.ListedRoles Contact's roles in order to be listed @natural:is|@responsible:is
Directory.Networking.Professionals.ListedRoles Contact's roles in order to be listed @worker:is|@responsible:is
Dossier.View.DaysToBeNew Maximum days passed since created or changed phase, to be considered new 30
Profile.Documents.Maximum Defines the maximum public documents per profile 3
Profile.Suggest.Company Suggests improving company or center description false
Profile.Suggest.Image Suggests users to add the avatar to the profile false
Profile.Suggest.Professional.Documents Suggests adding public documents to professional's profile false
Profile.Suggest.Relation Strongly suggests users to add a relation false
Profile.Suggest.Skills Suggests users to add skills false
Profile.Suggest.Student.Documents Suggests adding public documents to student's profile true
Service.New.AllowRoles Contact's roles to be able to publish @partner:on
Service.New.AllowSingle Allows unrelated contacts to publish false
Service.Question.AllowRoles Contact's roles to be able send questions @partner:on|@patron:on
Service.Recipients.Roles Contact's roles that will receive notifications @admin:is|@partner:on|@patron:on|@guest:on
SignUp.Allow Disables creating new accounts when false true
SignUp.AllowRelations Enables creating a relation for new accounts when true false
SignUp.Default.SocialGroup Sets de default social group for new accounts guest
SignUp.TellSomeone.Allow Disables the 'Tell someone' feature when false true
Site.Name Sets de site name
Site.Domain Forces the site to work with this domain. Important when using SSL.
Site.Description Sets site description.
Site.Keywords Sets site keywords.
Site.Fonts Loads fonts from G-Fonts. Lato
Site.Icon Icon absolute URL.
Site.Locales Sets site locales, usually the same as in ROOT context.
Site.Files Site internal files.
Site.Encoding Site encoding. ISO-8859-1
Site.TemplatesRoot Templates root. templates-semantic
Site.UseSSL Use SSL (requires certificate) false
Responsiveness

Elephant Templates are fully responsive by default, using the CSS/JavaScript framework Fomantic-UI.

Since version 3, Elephant introduces two different types of responsiveness, browser-based as server-based.

Browser-based

Browser-based responsiveness is mainly provided by the standard templates + Fomantic-UI. The templates provide the necessary information to the browser, to adjust components for different screen sizes. The browser is then capable of restructure the content dinamically, without reloading the page.

To try the browser-based responsiveness, resize the browser window. You will see how components change, stacking columns, or changing the main menu type when the size resembles a cellphone device.

Server-based

Server-based responsiveness is controlled by the server side. Allows to provide different content depending on user roles, dao-iterators or dynamic macros.

Server-based responsiveness ensures that site visitors only receive the content addressed to their role or current device. The main difference with browser-based responsiveness is that the browser only receives the appropiate source-content.

Page reloading
Since server-based content isn't loaded by browsers, in order to see changes is necessary to reload the page. This only applies if you are making changes to content.

Server-driven context

A server-driven context is an extension of the server-based responsiveness. Context server-driven property must be set by the Superuser.

Beta feature
Since this feature is still in beta stage, some unexpected results may happen. At this moment, server-driven contexts do not allow dynamic macros. Use with care and check with different profiles.

Contexts with this property set to true, can use conditionals inside the EWiki content. Examples would be:

@s{if mobile}
  ... /* this content will be sent only to mobile devices */
@s{/if}
@s{if rolemap['@partner:on']}
  ... /* this content will be sent only to partners */
@s{/if}
Security Locks

Elephant Security Locks were introduced in 2020, to mitigate malicious attempts to access the website. Currently, the API uses different layers to protect the resources, the Security Locks themselves, and the Take a Nap system.

Security Locks

The Security Locks, block IPs permanently for specific reasons. The system activate the Security Locks by default.

Security Locks message

Not access allowed from your IP

Further attempts without permission will block you permanently and the IP will be published into blacklists.

If you want to be removed from this blacklist, contact the web administrators.

Take a Nap

Take a Nap is a more flexible system, with a bigger scope. Recognizes two status, at peace and not at peace. When not at peace, the system forces Elephant is taking a nap status. The status is not absolute, not wide range, and won't be detailed here for obvious reasons.

Take a Nap message

Elephant is taking a nap!

And you may wonder, why?

There are several reasons that trigger the nap state for you, but usually is because some malicious software is sending attacks to the website.

Do not worry, Elephant is up and running, while waiting for these attacks to stop.

Feedback

Proporcionar feedback davant qualsevol problema que sorgeixi en l'ús de la plataforma ajuda a millorar-la, obtenint com a resultat una major satisfacció de tots els usuaris i més empenta alhora d'usar noves característiques.

Sent totes les novetats i millores gratuïtes, proporcionar feedback acaba tenint un efecte beneficiós a llarg termini.

Feedback per errors

L'aplicació obre un diàleg d'error quan es detecta una excepció en el sistema. Tota la informació s'envia per email al servei de suport de Turro.Org. El diàleg permet introduir informació relacionada amb que s'estava fent en aquell moment o qualsevol comentari que l'usuari vulgui compartir amb el desenvolupador.

Feedback per defectes, millores o noves característiques

La millor manera és enviar un email a suport@turro.org amb tota la informació i els comentaris necessaris.

També pot Registrar-se i, un cop validat, reportar una incidència a la seva pantalla d'usuari.

Si ja és usuari registrat i no sap com autenticar, entri a Usuari , escrigui el seu correu i premi He oblidat el password.

Dependencies
Licenses
Licenses apply to BrightSide project and related modules distributed by Turró i Cutiller Foundation.

Notice that some dependencies may have a comercial license, including comercial support. Externals projects will need to apply their own license agreements and dependencies.

Dependency Graph

Tutorials

Video Tutorials

Presentació

BrightSide basic

Etiquetes
Acceptacions
Adjunts
Activitat

BrightSide Contactes

Alta Contactes
Navegació Contactes

BrightSide Dossiers

Dossiers
Temes

BrightSide Publicacions

Publicacions

BrightSide Avançat

Tasques i Entitats programables

Elephant

Administració de la web

Fundació


Creem una estructura transparent, on els participants entenen com contribuir, veuen les seves aportacions incloses en el patrimoni comú i gaudeixen d'un coneixement aplicable al mon real dels beneficiaris.


Veieu també...


Fundació i Imperi


Donem al beneficiari els recursos patrimoni de la Fundació sense cap cost. Afegim més valor amb recursos externs, buscant integració, escalabilitat i estandardització. Creem un cercle de millora continua on la participació del beneficiari és clau.

Segona Fundació


Cerquem alternatives als recursos actuals, que puguin millorar el que ja hi ha i que siguin tendències globals. Per això afavorim la participació de contribuïdors en camps no coberts per la pròpia Fundació, per crear segons plans per cadascuna de les tecnologies usades.

Els limits de la Fundació


Deixem clars quins són els objectius de la Fundació i quins són els límits. Afavorim l'aparició de valors afegits als recursos de la Fundació, no sent intrusius en la manera en que aquests recursos arriben al beneficiari.

Fundació i Terra


Creiem en l'estalvi de recursos, en la sostenibilitat. La base d'adjunts, base documental del software de la Fundació, suporta l'ús compartit d'arxius. La documentació self-service del sistema de facturació, permet a socis, clients i proveïdors accedir als seus documents en línia.

Valors

Per als beneficiaris

Oferir a usuaris particulars i a tota mena d'entitats, ja siguin mercantils o sense ànim de lucre, activitats i recursos tecnològics que els ajudin a dur a terme la seva activitat.

Oferir formació a autònoms i PIMES per que compleixin les normes del sistema de qualitat i augmentin la seva competitivitat.

Oferir formació i recursos a autònoms i PIMES per crear Business Intelligence dins la seva estructura de dades.

Oferir gratuïtament el software patrimoni de la Fundació.

Els recursos oferits per la Fundació que comportin un cost de manteniment, s'oferiran carregant el cost administratiu.

Tot recurs que ofereixi la Fundació i que no sigui patrimoni propi, serà avaluat seguint aquests criteris:

Per a la millora i evolució contínua del software

Oferir una plataforma única, transparent i globalment accessible, on millorar, corregir i distribuir el software de la Fundació.

Una plataforma on també:

Treballa amb nosaltres

Per tots els que estiguin interessats en establir una relació amb la Fundació, abans haurien de saber:

Donant serveis sota el nom de la Fundació

Si tens un projecte relacionat amb noves tecnologies, sigui codi, documentació o servei pur i dur, pots donar serveis als beneficiaris de la Fundació, usant el nom de la mateixa. Per assolir aquest punt de relació, abans hauràs de:

Un cop la feina feta i tot aprovat, el teu servei serà part dels serveis oferits per la Fundació, sent les persones que designis, tu inclòs, els responsables de donar el servei.

Marketing

Si ets distribuïdor pot interessar-te aquest l'enllaç Distribuïdors .

Usant logos

La Fundació com a soci tecnològic

Es permet l'ús dels logos de la Fundació com a soci tecnològic a col·laboradors que segueixin els Valors de la Fundació i:



Contribuïnt a la Fundació

Son contribuïdors de la Fundació tots aquells desenvolupadors que hagin contribuït codi.



Acreditant el coneixement de la plataforma

Es permet l'ús del logo de producte a aquelles persones que coneguin l'entorn de treball BrightSide amb prou profunditat com per a poder ensenyar a d'altres la millor manera de treure'n profit.


En cap cas es permet l'ús d'aquests logotips en un llenguatge groller, malintencionat o amb informació no contrastada. L'ús d'aquests logotips queda restringit als casos esmentats en aquesta mateixa plana.
Distribuïdors

Idees per presentar el servei


Avantatges

Marca

BrightSide permet usar la seva marca en tot l'entorn.

Els seus usuaris veuran sempre la imatge de la seva empresa com a proveïdora del servei.

Segur

BrightSide manté la seva base de contactes organitzada.

Els contactes BrightSide estan organitzats per Grups Socials, on se'ls hi dona els permisos per accedir a les parts autoritzades de la plataforma.

Per a tothom

BrightSide funciona a qualsevol sistema operatiu i en qualsevol navegador.

No cal que forci als seus usuaris a tenir un tipus d'ordinador, ni cal que s'instal·lin cap programa. Tot funciona per Internet, sigui quin sigui el sistema operatiu o el navegador.

Sigui on sigui

BrightSide s'accedeix per Internet, des de qualsevol lloc del mon.

És a la oficina i se li ha espatllat l'ordinador? És de vacances i pateix per com s'estaran fent les coses? Cal que ensenyi un document guardat en la plataforma?

Tecnologia


Tecnologia a la empresa

Agilitza les tasques diàries

Controla possibles errors

Millora la capacitat de decisió

La tecnologia a BrightSide

Integració

Totes les dades son dins el mateix entorn

Poden ser usades per tots els mòduls

Les coses es diuen un sol cop i ben dites

Escalabilitat

Els mòduls estan dissenyats per a créixer

Gaudeix de les avantatges de les aplicacions distribuïdes

Es desplega sobre l'especificació Java Enterprise Edition

Emmagatzema dades usant el Java Persistent Layer

Seguretat

Permet usar connexions segures amb SSL

L'aplicació controla l'accés d'usuari amb perfils, assignats via grups socials

Registre l'activitat per usuari

Registre l'activitat per entitat

Es fan còpies diàries desateses

Ubiqüitat

No necessita instal·lació

Funciona des de qualsevol connexió a Internet

S'executa dins l'explorador

Imprimeix generant arxius PDF

Multi-usuari

La política d'ús es basa en la capacitat del servidor contractat:

  • Una empresa amb molts treballadors pot tenir poca informació guardada
  • Un autònom pot generar molta informació

Multi-plataforma

BrightSide soporta:

  • Windows 7, Vista, XP
  • MacOS
  • Ubuntu, Kubuntu
  • RedHat
  • OpenSuse
  • Mandriva
  • Fedora
  • Debian
  • ...i més

...tant al servidor com al client

Basat en estàndards

  • Servlet
  • JSP
  • Java Server Faces
  • JPA
  • DOM
  • Chain
  • Plug-ins
  • Entity Factories
  • Injection
  • SQL
  • JQL
  • Xpath
  • XML
  • XSLT

...per mencionar-ne alguns

Començar amb la plataforma

Dona't d'alta en el teu distribuïdor

La Fundació Turró i Cutiller recomana distribuïdors que segueixen els valors de la Fundació.

Valors

Dona d'alta els contactes amb qui et relaciones

La plataforma ordenarà els teus contactes segons els tractes que tinguis amb ells.

Un contacte pot ser un usuari a la web, un client, un proveïdor, un colaborador. La plataforma els agruparà segons els grups socials als que pertanyin, i els hi donarà els permisos necessaris perque puguin veure allò que els hi pertoca.

Introdueix documentació

PDFs, contractes, factures, pressupostos, expedients, accions preventives, no conformitats...

La plataforma et permet adjuntar, crear, imprimir, compartir, signar. I amb còpies de seguretat desateses. Podràs dormir una mica més tranquil.

Delega i gaudeix de més temps

El teu nou entorn permet delegar en altres persones, amb diferents responsabilitats.

Un administratiu, un assitent a direcció, un client, un auxiliar comptable. Tots tenen lloc i en tots podràs confiar... bé, sabent que tot el que es faci queda registrat i ben guardat.

BrightSide Contacts


Integració amb la plataforma

Els contactes es donen d'alta una sola vegada i es reutilitzen tants cops com calgui.

Tota la informació queda introduïda

Tot el que sap del contacte queda introduït, incloent arxius i relacions amb altres contactes.

Perfils associats a grups socials

Assignació de permisos als contactes per la simple afiliació a un grup social.

Registre d'activitat

L'activitat del contacte queda registrada dins la plataforma, amb data, hora i acció feta.

Compatibilitat

Contactes importables i exportables vCard, generació QR-Code.

BrightSide Attachments


Integració amb la plataforma

Totes les entitats de la plataforma permeten adjuntar.

Funcions de Base Documental

Control de versions, compartició, grups de treball, publicació a la web amb o sense permisos.

Directori de treball local

En la mateixa web, amb bloquejos per edició, control de versions i multi-entitat.

BrightSide Dossiers


Integració amb la plataforma

Altres entitats poden crear dossiers i temes relacionats.

Privacitat

Dossiers visibles només a participants, controlant parts privades i públiques.

Seguiment de temes

Accions de millora, accions preventives, tasques, documents, no conformitats.

Fluxe de responsabilitats

Els participants poden saber quan s'espera alguna cosa d'ells i controlar les assignacions a tercers.

Sensible al mon real

Altament configurable, adaptable a múltiples escenaris.

BrightSide CRM


Integració amb la plataforma

Contactes, Dossiers, Adjunts. Informació d'activitat del client dins la plataforma.

Aprofitant la interrelació entre els mòduls, BrightSide permet crear informes personalitzats per contacte / mòdul.

Agenda comercial

Calendari comercial compatible amb calendaris estàndard.

L'agenda accessible en qualsevol moment gràcies a la compatibilitat vCal.

Accions de venda per client i propòsit

Accions de venda associades a prospeccions de venda.

Per a cada client / propòsit de venda, seguiment del moment actual. Múltiples venedors per prospecció / client.

Campanyes

Auto-generació de prospeccions de venda amb dades comunes definides en campanyes.

Selecció dels targets adequats per a cada client, segons organigrames definits a BrightSide Contacts. Resultats per campanya, per venedor, per accions de venda.

Publicació de la campanya

Sense coneixements de HTML.

BrightSide CRM possibilita la creació de continguts rics, multimèdia, que representin la campanya a la web, en enviaments per email, etc.

BrightSide Financials


Integració amb la plataforma

Crea relacions comercials amb contactes, genera dossiers, accepta adjunts.

Gestió i comptabiliat multi-usuari

La comptabilitat es genera automàticament, incorporant l'organigrama d'empresa.

Control del fluxe de documents

Cartera de documents, generació automàtica dels documents del fluxe.

Remeses

Per cobraments, pagaments, targetes de crèdit.

BrightSide ERP


Integració amb la plataforma

Usa contractes, genera documents, dossiers, accepta adjunts.

Packs recomenats

Els preus representen quotes mensuals i son purament orientatius. Es basen en costos actuals en hosting i còpies de seguretat. Cada distribuïdor hauria de carregar el seu valor afegit, tenint aquests preus com a orientació del cost de oferir el servei.

Serveis inclosos

Els serveis inclosos els pot donar la fundació o el propi distribuïdor. El resultat final és que el usuari en gaudeixi sense cap càrrec afegit.

Cloud BAAS

Nom

Conté

Preu recomenat

BAAS

  • Web
  • Contactes
  • Adjunts
  • Dossiers
  • Publicacions
  • Financials
  • Customer Relationship

75 €

Cloud BAAS Exclusiu

Nom

Conté

Preu recomenat

BAAS

  • Web
  • Contactes
  • Adjunts
  • Dossiers
  • Publicacions
  • Financials
  • Customer Relationship

200 €

Noves instàncies

  • Web
  • Contactes
  • Adjunts
  • Dossiers
  • Publicacions
  • Financials
  • Customer Relationship

40 €

Serveis de la Fundació

Hosting BrightSide

Millors preus, màxima seguretat.

Turro.Org cerca sempre les millors oportunitats de hosting, ja sigui en servidors dedicats com en servidors cloud.

Sempre actualitzat

Les versions estables de BrightSide a ple rendiment.

El software sempre actualitzat amb les darreres versions, nous mòduls segons apareixin, suport en línia. Sense cap cost adicional.

Cost segons l'ús

Sense llicències d'usuari, cost per espai usat.

No cal pensar quin serà l'ús futur, el hosting de Turro.Org i BrightSide creixeran amb tú.

Sempre al límit

Tecnologia en estat pur. Mentre els demés hi somien nosaltres ja ho fem.

Clouds elàstics, Web Services per integrar / compartir, ús de eines externes per millorar les pròpies. Treballar també pot ser divertit.

Definició d'entitats


Ofereixes serveis als teus clients?

Vols distribuir BrightSide amb la teva marca?

BaaS és el nom del servei. Ets lliure d'utilitzar-lo amb la teva marca per donar el servei BrightSide en-línia.

Cloud Hosting + JEE + BrightSide + Elephant

Darreres actualitzacions

Distribució a usuaris finals

Formació i suport


Ets professional de les TIC?

Vols suport per les teves plataformes BrightSide?

Turro.Org dona suport als distribuidors de BaaS.

Repositori de treball

Repositori central

Implementació + Feedback

Contribucions + Documentació


Ets desenvolupador?

Vols contribuir codi, crear nous mòduls?

La Fundació TiC manté el codi i la documentació del projecte BrightSide.

Ecosistema

Les entitats BaaS, BrightSide distribuit com a marca blanca, viuen dins un ecosistema on les relacions son exclusivament de servei.

Una empresa que vulgui donar servei BaaS pot agafar directament de la Fundació TiC el que necessita pels seus clients. L'empresa es llavors un distribuïdor BaaS, poden donar servei a d'altres empreses que vulguin suport.

Si una empresa vol rebre support pel hosting BaaS, pot contractar el servei a distribuïdors de la plataforma.