package pt.estgp.estgweb.services.users;
import org.apache.log4j.Logger;
import org.reflections.Reflections;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.RoleContainer;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedException;
import pt.utl.ist.berserk.logic.serviceManager.IService;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* Created by jorgemachado on 29/01/16.
*/
public class UserRoleConfigService
implements IService
{
private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(UserRoleConfigService.
class);
private List
<UserRoleConfig
> loadRolesTranslations
(UserSession sess
)
{
List
<UserRoleConfig
> roles = DaoFactory.
getUserRoleConfigDaoImpl().
findAll();
if(roles ==
null || roles.
size() == 0
)
{
roles = initRoles
();
}
return roles
;
}
private static long lastUpdate =
0;
public List
<UserRoleConfig
> loadRolesIfDirty
(UserSession sess
)
{
if(lastUpdate == 0
)
{
return loadRolesTranslations
(sess
);
}
UserRoleConfig lastChangeRole = DaoFactory.
getUserRoleConfigDaoImpl().
getLast("updateDate");
if(lastChangeRole.
getUpdateDate().
getTime() >= lastUpdate
)
{
List
<UserRoleConfig
> roles = loadRolesTranslations
(sess
);
lastUpdate =
1.5.0/docs/api/java/lang/System.html">System.
currentTimeMillis();
return roles
;
}
return null;
}
/**
* Serviço Tear 1 para substituição de Roles ou criação de Novos
* @param oldRole
* @param nomeRole
* @param newRoleStr
* @param session
* @return
* @throws pt.estgp.estgweb.filters.exceptions.AccessDeniedException
*/
public ReplaceRoleResult createNewNormalizedRoleService
(1.5.0/docs/api/java/lang/String.html">String oldRole,
1.5.0/docs/api/java/lang/String.html">String nomeRole,
1.5.0/docs/api/java/lang/String.html">String newRoleStr,UserSession session
) throws AccessDeniedException
{
ReplaceRoleResult result
;
UserRoleConfigImpl newUserRoleConfig = DomainObjectFactory.
createUserRoleConfigImpl();
newUserRoleConfig.
setRole(newRoleStr
);
newUserRoleConfig.
setValid(true);
newUserRoleConfig.
setValue(nomeRole
);
newUserRoleConfig.
setValuePt(nomeRole
);
newUserRoleConfig.
setValueEn("");
newUserRoleConfig.
setValueEs("");
newUserRoleConfig.
setValueFr("");
try {
if(oldRole ==
null || oldRole.
trim().
length() == 0
)
{
result =
new UserRoleConfigService
().
addUpdateRole(newUserRoleConfig,session,
false);
}
else
{
result =
new UserRoleConfigService
().
updateOldRoleWithView(oldRole, newUserRoleConfig, session,
false);
}
if(result.
roleKeyAlreadyExist)
{
logger.
error("Tentado CRIAR um Role que já existe e não é Administrador nem Super user");
throw new AccessDeniedException
("Tentado CRIAR um Role que já existe e não é Administrador nem Super user");
}
} catch (AccessDeniedException e
) {
logger.
error("Tentado alterar um Role e não é Administrador nem Super user");
throw e
;
}
return result
;
}
public ReplaceRoleResult updateOldRoleWithView
(1.5.0/docs/api/java/lang/String.html">String oldRole,UserRoleConfigImpl newViewRoleConfig, UserSession sess
)
throws AccessDeniedException
{
return updateOldRoleWithView
(oldRole, newViewRoleConfig, sess,
true);
}
public ReplaceRoleResult updateOldRoleWithView
(1.5.0/docs/api/java/lang/String.html">String oldRole,UserRoleConfigImpl newViewRoleConfig, UserSession sess,
boolean updateCourses
)
throws AccessDeniedException
{
UserRoleConfig oldUserRoleConfig = DaoFactory.
getUserRoleConfigDaoImpl().
findByRole(oldRole
);
if(oldUserRoleConfig ==
null)
{
return addUpdateRole
(newViewRoleConfig,sess,updateCourses
);
}
else
{
newViewRoleConfig.
setId(oldUserRoleConfig.
getId());
return addUpdateRole
(newViewRoleConfig,sess,updateCourses
);
}
}
public ReplaceRoleResult addUpdateRole
(UserRoleConfigImpl viewRoleConfig, UserSession sess
) throws AccessDeniedException
{
return addUpdateRole
(viewRoleConfig, sess,
true);
}
public ReplaceRoleResult addUpdateRole
(UserRoleConfigImpl viewRoleConfig, UserSession sess,
boolean updateCourseRoles
)
throws AccessDeniedException
{
ReplaceRoleResult replaceRoleResult
;
//boolean isNew = userRoleConfig.getId() <= 0;
UserRoleConfig persistent
;
1.5.0/docs/api/java/lang/String.html">String newRoleStr = viewRoleConfig.
getRole().
trim();
if(viewRoleConfig.
getId() <= 0
)
{
replaceRoleResult = replaceOrCreateRoleKey
(null, newRoleStr, sess,updateCourseRoles
);
if(replaceRoleResult.
roleKeyAlreadyExist)
return replaceRoleResult
;
persistent = replaceRoleResult.
updatedUserRoleConfig;
}
else
{
persistent = DaoFactory.
getUserRoleConfigDaoImpl().
get(viewRoleConfig.
getId());
boolean chaveMudou =
!newRoleStr.
equals(persistent.
getRole());
if(chaveMudou
)
{
if(sess.
getUser().
isSuperuserOrAdmin())
{
replaceRoleResult = replaceOrCreateRoleKey
(persistent.
getRole(), newRoleStr, sess,updateCourseRoles
);
if(replaceRoleResult.
roleKeyAlreadyExist)
return replaceRoleResult
;
persistent = replaceRoleResult.
updatedUserRoleConfig;
}
else
{
throw new AccessDeniedException
("Nao pode alterar o código do papel porque não é administrador");
}
}
else
{
replaceRoleResult =
new ReplaceRoleResult
(newRoleStr
);
}
}
persistent.
setValue(viewRoleConfig.
getValue());
persistent.
setValid(viewRoleConfig.
isValid());
persistent.
setValueEn(viewRoleConfig.
getValueEn());
persistent.
setValueEs(viewRoleConfig.
getValueEs());
persistent.
setValueFr(viewRoleConfig.
getValueFr());
persistent.
setValuePt(viewRoleConfig.
getValuePt());
persistent.
setObs(viewRoleConfig.
getObs());
return replaceRoleResult
;
}
public static Set
<Class
<? extends RoleContainer
>> roleContainerClasses =
null;
private synchronized void init
()
{
if(roleContainerClasses ==
null)
{
Reflections reflections =
new Reflections
("pt.estgp.estgweb");
roleContainerClasses = reflections.
getSubTypesOf(RoleContainer.
class);
}
}
/**
* Serviço de nível SUPORTE
* Usado pelo update de Roles e Pela normalização de Roles de Comissões de Curso
* Substitui a presença de um ROLE por um NOVO
*
*
* @param oldRole if null does not find old users for replace
* @param newRole need to be filled
* @param sess
* @return ReplaceRoleResult if roleKeyAlreadyExist = true - nothing was done need to be a none existing new role key
* ReplaceRoleResult.updatedUserRoleConfig tem o role antigo atualizado ou o novo criado com o newRole
*/
public ReplaceRoleResult replaceOrCreateRoleKey
(1.5.0/docs/api/java/lang/String.html">String oldRole,
1.5.0/docs/api/java/lang/String.html">String newRole, UserSession sess,
boolean updateCourses
)
{
ReplaceRoleResult result =
new ReplaceRoleResult
(newRole
);
UserRoleConfig roleConfig = DaoFactory.
getUserRoleConfigDaoImpl().
findByRole(newRole
);
if(roleConfig
!=
null)
{
result.
roleKeyAlreadyExist =
true;
return result
;
}
else if(oldRole ==
null)
{
roleConfig = DomainObjectFactory.
createUserRoleConfigImpl();
roleConfig.
setRole(newRole
);
DaoFactory.
getUserRoleConfigDaoImpl().
save(roleConfig
);
result.
updatedUserRoleConfig = roleConfig
;
}
else
{
roleConfig = DaoFactory.
getUserRoleConfigDaoImpl().
findByRole(oldRole
);
roleConfig.
setRole(newRole
);
result.
updatedUserRoleConfig = roleConfig
;
replaceUserRoles
(oldRole, newRole, result
);
if(updateCourses
)
replaceCourseRoles
(oldRole, newRole, result
);
replaceSchoolAndDepartmentRoles
(oldRole, newRole, result
);
replaceEventClasseManagerRoles
(oldRole, newRole, result
);
init
();
for (1.5.0/docs/api/java/lang/Class.html">Class serviceClass : roleContainerClasses
) {
1.5.0/docs/api/java/lang/System.html">System.
out.
println("Replacing Roles Notification Found: " + serviceClass.
getName());
try {
((RoleContainer
)serviceClass.
newInstance()).
replaceRoleNotification(oldRole,newRole,result
);
} catch (1.5.0/docs/api/java/lang/InstantiationException.html">InstantiationException e
) {
logger.
error(e,e
);
} catch (1.5.0/docs/api/java/lang/IllegalAccessException.html">IllegalAccessException e
) {
logger.
error(e, e
);
}
}
//DaoFactory.getBpmnRoleSelectorDaoImpl().replaceRoleNotification(oldRole, newRole, result);
//replaceBpmnActorPoolRoles(oldRole, newRole, result);
}
return result
;
}
private void replaceEventClasseManagerRoles
(1.5.0/docs/api/java/lang/String.html">String oldRole,
1.5.0/docs/api/java/lang/String.html">String newRole, ReplaceRoleResult result
) {
List
<EventClass
> eventClasses = DaoFactory.
getEventClassDaoImpl().
findByManagerRole(oldRole
);
result.
afectedEventClassManagers = eventClasses.
size();
for(EventClass eventClass: eventClasses
)
{
eventClass.
setManagersRole(newRole
);
}
}
private void replaceUserRoles
(1.5.0/docs/api/java/lang/String.html">String oldRole,
1.5.0/docs/api/java/lang/String.html">String newRole, ReplaceRoleResult result
) {
List
<User
> users = DaoFactory.
getUserDaoImpl().
loadRoleUsers(oldRole
);
result.
afetectedUsers = users.
size();
for(User u : users
)
{
if(u.
hasRole(oldRole
))
{
u.
removeRole(oldRole
);
}
u.
addRole(newRole
);
}
}
private void replaceCourseRoles
(1.5.0/docs/api/java/lang/String.html">String oldRole,
1.5.0/docs/api/java/lang/String.html">String newRole, ReplaceRoleResult result
) {
List
<Course
> courses = DaoFactory.
getCourseDaoImpl().
findValidateRole(oldRole
);
result.
afetectedCoursesValidatePrograms = courses.
size();
for(Course c :courses
)
{
c.
setValidationRole(newRole
);
}
}
private void replaceSchoolAndDepartmentRoles
(1.5.0/docs/api/java/lang/String.html">String oldRole,
1.5.0/docs/api/java/lang/String.html">String newRole, ReplaceRoleResult result
) {
List
<CourseDepartment
> departments = DaoFactory.
getCourseDepartmentDaoImpl().
findByDirectorRole(oldRole
);
result.
afetectedDepartmentsDirectors = departments.
size();
for(CourseDepartment department: departments
)
{
department.
setDirectorRole(newRole
);
}
departments = DaoFactory.
getCourseDepartmentDaoImpl().
findByBoardRole(oldRole
);
result.
afetectedDepartmentsBoards = departments.
size();
for(CourseDepartment department: departments
)
{
department.
setBoardRole(newRole
);
}
List
<CourseSchool
> schools = DaoFactory.
getCourseSchoolDaoImpl().
findBySchoolDirector(oldRole
);
result.
afetectedSchoolsDirectors = schools.
size();
for(CourseSchool school: schools
)
{
school.
setSchoolDirectorRole(newRole
);
}
schools = DaoFactory.
getCourseSchoolDaoImpl().
findBySchoolBoard(oldRole
);
result.
afetectedSchoolsBoard = schools.
size();
for(CourseSchool school: schools
)
{
school.
setSchoolBoardRole(newRole
);
}
schools = DaoFactory.
getCourseSchoolDaoImpl().
findBySchoolSecretariado(oldRole
);
result.
afetectedSchoolsSecretario = schools.
size();
for(CourseSchool school: schools
)
{
school.
setSchoolSecretariadoRole(newRole
);
}
schools = DaoFactory.
getCourseSchoolDaoImpl().
findBySchoolPresidentCtc(oldRole
);
result.
afetectedSchoolsPresidentCtc = schools.
size();
for(CourseSchool school: schools
)
{
school.
setCtcPresidentRole(newRole
);
}
schools = DaoFactory.
getCourseSchoolDaoImpl().
findBySchoolMemberCtc(oldRole
);
result.
afetectedSchoolsMemberCtc = schools.
size();
for(CourseSchool school: schools
)
{
school.
setCtcMemberRole(newRole
);
}
schools = DaoFactory.
getCourseSchoolDaoImpl().
findBySchoolSecretariadoCtc(oldRole
);
result.
afetectedSchoolsSecretarioCtc = schools.
size();
for(CourseSchool school: schools
)
{
school.
setCtcSecretariadoRole(newRole
);
}
schools = DaoFactory.
getCourseSchoolDaoImpl().
findBySchoolPresidentPedagogico(oldRole
);
result.
afetectedSchoolsPresidentPedagogico = schools.
size();
for(CourseSchool school: schools
)
{
school.
setPedagogicoPresidentRole(newRole
);
}
schools = DaoFactory.
getCourseSchoolDaoImpl().
findBySchoolMemberPedagogico(oldRole
);
result.
afetectedSchoolsMemberPedagogico = schools.
size();
for(CourseSchool school: schools
)
{
school.
setPedagogicoMemberRole(newRole
);
}
schools = DaoFactory.
getCourseSchoolDaoImpl().
findBySchoolSecretariadoPedagogico(oldRole
);
result.
afetectedSchoolsSecretarioPedagogico = schools.
size();
for(CourseSchool school: schools
)
{
school.
setPedagogicoSecretariadoRole(newRole
);
}
}
private List
<UserRoleConfig
> initRoles
()
{
List
<UserRoleConfig
> roles =
new ArrayList
<UserRoleConfig
>();
1.5.0/docs/api/java/io/BufferedReader.html">BufferedReader reader =
new 1.5.0/docs/api/java/io/BufferedReader.html">BufferedReader(new 1.5.0/docs/api/java/io/StringReader.html">StringReader(INIT_ROLES
));
1.5.0/docs/api/java/lang/String.html">String roleSpec =
null;
try {
while((roleSpec = reader.
readLine()) !=
null)
{
1.5.0/docs/api/java/lang/String.html">String[] fields = roleSpec.
split("=");
1.5.0/docs/api/java/lang/String.html">String role = fields
[0].
substring("user.role.".
length());
1.5.0/docs/api/java/lang/String.html">String desc = fields
[1
];
UserRoleConfigImpl userRoleConfig = DomainObjectFactory.
createUserRoleConfigImpl();
userRoleConfig.
setRole(role.
trim());
userRoleConfig.
setValue(desc
);
userRoleConfig.
setValid(true);
roles.
add(userRoleConfig
);
DaoFactory.
getUserRoleConfigDaoImpl().
save(userRoleConfig
);
}
} catch (1.5.0/docs/api/java/io/IOException.html">IOException e
) {
logger.
error(e,e
);
}
return roles
;
}
public 1.5.0/docs/api/java/lang/Integer.html">Integer checkIfAreNewStandardRoles
(UserSession userSession
)
{
int totalNew =
0;
1.5.0/docs/api/java/io/BufferedReader.html">BufferedReader reader =
new 1.5.0/docs/api/java/io/BufferedReader.html">BufferedReader(new 1.5.0/docs/api/java/io/StringReader.html">StringReader(INIT_ROLES
));
1.5.0/docs/api/java/lang/String.html">String roleSpec =
null;
try {
while((roleSpec = reader.
readLine()) !=
null)
{
1.5.0/docs/api/java/lang/String.html">String[] fields = roleSpec.
split("=");
1.5.0/docs/api/java/lang/String.html">String role = fields
[0].
substring("user.role.".
length());
1.5.0/docs/api/java/lang/String.html">String desc = fields
[1
];
UserRoleConfigImpl userRoleConfig = DaoFactory.
getUserRoleConfigDaoImpl().
findByRole(role
);
if(userRoleConfig ==
null)
{
totalNew++
;
userRoleConfig = DomainObjectFactory.
createUserRoleConfigImpl();
userRoleConfig.
setRole(role.
trim());
userRoleConfig.
setValue(desc
);
userRoleConfig.
setValid(true);
DaoFactory.
getUserRoleConfigDaoImpl().
save(userRoleConfig
);
}
}
} catch (1.5.0/docs/api/java/io/IOException.html">IOException e
) {
logger.
error(e,e
);
}
return totalNew
;
}
private static final 1.5.0/docs/api/java/lang/String.html">String INIT_ROLES =
"user.role.all=Todos\n" +
"user.role.admin=Administrador\n" +
"user.role.student=Estudante\n" +
"user.role.comissao.avaliacao.desempenho.docente=Comissão de Avaliação de Desempenho Docente\n" +
"user.role.erasmusStudent=Estudante de Erasmus\n" +
"user.role.teacher=Professor\n" +
"user.role.teacher.eg=Professor da Área de Engenharia\n" +
"user.role.teacher.dg=Professor da Área de Design\n" +
"user.role.teacher.ce=Professor da Área de Ciencias Empresariais\n" +
"user.role.teacher.ch=Professor da Área de Ciencias Humanas\n" +
"user.role.teacher.td=Professor do DTD\n" +
"user.role.teacher.cesh=Professor do DCESH\n" +
"user.role.student.eg=Aluno da Área de Engenharia\n" +
"user.role.student.dg=Aluno da Área de Design\n" +
"user.role.student.ce=Aluno da Área de Ciencias Empresariais\n" +
"user.role.student.ch=Aluno da Área de Ciencias Humanas\n" +
"user.role.student.td=Aluno do DTD\n" +
"user.role.student.cesh=Aluno do DCESH\n" +
"user.role.ci=Centro Informático\n" +
"user.role.worker=Funcionário\n" +
"user.role.invited=Convidado\n" +
"user.role.services=Serviços\n" +
"user.role.questionarios.tipologias.admin=Questionarios - Verificação de Tipologias\n" +
"user.role.questionarios.atribuicoes.admin=Questionarios - Atribuições de Cursos\n" +
"user.role.questionarios.atribuicoes.check_teachers=Questionarios - Verificação de Professores\n" +
"user.role.questionarios.admin=Questionários - Super Administrador\n" +
"user.role.questionarios.gerais=Questionários - Permissões Básicas (necessário)\n" +
"user.role.servicesPrograms=Gestão de Programas Curriculares\n" +
"user.role.servicesStudiesPlans=Gestão de Planos de Estudos\n" +
"user.role.servicesCoursesManagement=Gestão de Cursos\n" +
"user.role.servicesRolesManagement=Gestão de Papeis Institucionais\n" +
"user.role.event_class_manager=Gestão de Classes de Eventos\n" +
"user.role.event_manager_nfc=Gestão de Eventos do Nucleo de Formacao Continua\n" +
"user.role.administrativeCouncil=Membro da Direcção\n" +
"user.role.administrativeCouncil.director=Director\n" +
"user.role.administrativeCouncil.vice=Vice Director\n" +
"user.role.schoolSecretary=Secretário da Escola\n" +
"user.role.administrativeCouncilSecretariat=Secretaria da Direcção\n" +
"user.role.teachersSecretariat=Secretaria de Pessoal Docente\n" +
"user.role.dtd.president=Presidente do DTD\n" +
"user.role.cesh.president=Presidente do DCESH\n" +
"user.role.dtd.presidency=Membro da Presidencia do DTD\n" +
"user.role.cesh.presidency=Membro da Presidencia do DCESH\n" +
"user.role.scientificCouncil.president=CTC Presidente (Não utilizado)\n" +
"user.role.representativeCouncil.president=Presidente do Conselho de Representantes\n" +
"user.role.pedagogicCouncil.president=Presidente do Conselho Pedagógico\n" +
"user.role.representativeCouncil=Conselho de Representantes\n" +
"user.role.scientificCouncil=CTC Membro (Não utilizado)\n" +
"user.role.erasmusCouncil=Conselho Erasmus\n" +
"user.role.pedagogicCouncil=Conselho Pedagógico\n" +
"user.role.courseCoordinator=Coordenadores\n" +
"user.role.futureStudent=Futuros Alunos\n" +
"user.role.oldStudent=Antigos Alunos\n" +
"user.role.studentAssociation=Associação de Estudantes\n" +
"user.role.computerCenter=Centro Informático\n" +
"user.role.courseDirector=Presidente de Departamento\n" +
"user.role.identifiersManager=Utilizador de Gestão de Identificadores\n" +
"user.role.identifiersCollectionCreator=Administrador de Colecções de Identificadores\n" +
"user.role.studentsID=Alunos de Informação e Documentação\n" +
"user.role.studentsFSIR=Alunos de Fontes de Informação e Serviço de Referência\n" +
"user.role.sendMailMessages=Enviar Mensagens de Correio Electronico\n" +
"user.role.pedagogicCouncilSecretariat=Secretariado do Conselho Pedagógico\n" +
"user.role.directionSecretariat=Secretariado da Direcção\n" +
"user.role.studentsSecretariat=Secretaria de Alunos\n" +
"user.role.assessementsTester=Testador de Provas de Avaliação\n" +
"user.role.processes.admin=Inspector de Processos" +
"user.role.validate.ei=Comissão de Curso de Engenharia Informática\n" +
"user.role.courseValidateProgramGPME=Comissão de Curso de Gestão de PME\n" +
"user.role.courseValidateProgramCET_TD=Comissão de Curso de CETS de TD\n" +
"user.role.courseValidateProgramEI=Comissão de Curso de EI\n" +
"user.role.courseValidateProgramEC=Comissão de Curso de EC\n" +
"user.role.courseValidateProgramBioEng=Comissão de Curso de BioEng\n" +
"user.role.courseValidateProgramEGI=Comissão de Curso de EGI\n" +
"user.role.courseValidateProgramEERA=Comissão de Curso de EERA\n" +
"user.role.courseValidateProgramDC=Comissão de Curso de DC\n" +
"user.role.courseValidateProgramDA=Comissão de Curso de DA\n" +
"user.role.courseValidateProgramTVAPE=Comissão de Curso de TVAPE\n" +
"user.role.courseValidateProgramMI=Comissão de Curso de MI\n" +
"user.role.courseValidateProgramEGPMEestranho=Comissão de Curso de EPGME\n" +
"user.role.courseValidatePrograms=Validação de Programas\n" +
"user.role.courseValidateProgramCET_CESH=Comissão de Curso de CETS de CESH\n" +
"user.role.courseValidateProgramAPM=Comissão de Curso de APM\n" +
"user.role.courseValidateProgramAA=Comissão de Curso de AA\n" +
"user.role.courseValidateProgramG=Comissão de Curso de G\n" +
"user.role.courseValidateProgramID=Comissão de Curso de ID\n" +
"user.role.courseValidateProgramRPS=Comissão de Curso de RPS\n" +
"user.role.courseValidateProgramTGI=Comissão de Curso de TGI\n" +
"user.role.courseValidateProgramRU=Comissão de Curso de RU\n" +
"user.role.courseValidateProgramCF=Comissão de Curso de Contabilidade e Finanças\n" +
"user.role.courseValidateProgramNONE=Nenhuma\n" +
"user.role.courseValidateProgramTPB=Comissão de Curso de Tecnologias de Produção de Biocombustíveis\n"+
"user.role.board.institution=Board de Direcção do Instituto Politecnico\n"+
"user.role.repositoryDocs=Administração do Repositório Digital\n"+
"user.role.repositoryDeposit=Depositante do Repositório Digital\n"+
//ESCOLAS
//ESTG
"user.role.school.president.estg=Escola Director da ESTG\n"+
"user.role.school.board.estg=Escola Board de Direcção da ESTG\n"+
"user.role.school.secretariado.estg=Escola Secretariado da ESTG\n"+
//CTC
"user.role.scientificCouncil.president.estg=CTC ESTG Presidente\n" +
"user.role.scientificCouncil.board.estg=CTC ESTG Membro\n" +
"user.role.scientificCouncil.secretariado.estg=CTC ESTG Secretariado\n" +
//Pedagogico
"user.role.pedagogicCouncil.president.estg=Pedagógico ESTG Presidente\n" +
"user.role.pedagogicCouncil.board.estg=Pedagógico ESTG Membro\n" +
"user.role.pedagogicCouncil.secretariado.estg=Pedagógico ESTG Secretariado\n" +
//MEMBROS ESCOLAS
"user.role.worker.estg=Funcionário ESTG\n" +
"user.role.worker.esae=Funcionário ESAE\n" +
"user.role.worker.esecs=Funcionário ESECS\n" +
"user.role.worker.ess=Funcionário ESS\n" +
"user.role.teacher.estg=Docentes ESTG\n" +
"user.role.teacher.esae=Docentes ESAE\n" +
"user.role.teacher.esecs=Docentes ESECS\n" +
"user.role.teacher.ess=Docentes ESS\n" +
"user.role.student.estg=Estudantes ESTG\n" +
"user.role.student.esae=Estudantes ESAE\n" +
"user.role.student.esecs=Estudantes ESECS\n" +
"user.role.student.ess=Estudantes ESS\n" +
//ESAE
"user.role.school.president.asae=Escola Director da ESAE\n"+
"user.role.school.board.esae=Escola Board de Direcção da ESAE\n"+
"user.role.school.secretariado.esae=Escola Secretariado da ESAE\n"+
//CTC
"user.role.scientificCouncil.president.esae=CTC ESAE Presidente\n" +
"user.role.scientificCouncil.board.esae=CTC ESAE Membro\n" +
"user.role.scientificCouncil.secretariado.esae=CTC ESAE Secretariado\n" +
//Pedagogico
"user.role.pedagogicCouncil.president.esae=Pedagógico ESAE Presidente\n" +
"user.role.pedagogicCouncil.board.esae=Pedagógico ESAE Membro\n" +
"user.role.pedagogicCouncil.secretariado.esae=Pedagógico ESAE Secretariado\n" +
//ESECS
"user.role.school.president.esecs=Escola Director da ESECS\n"+
"user.role.school.board.esecs=Escola Board de Direcção da ESECS\n"+
"user.role.school.secretariado.esecs=Escola Secretariado da ESECS\n"+
//CTC
"user.role.scientificCouncil.president.esecs=CTC ESECS Presidente\n" +
"user.role.scientificCouncil.board.esecs=CTC ESECS Membro\n" +
"user.role.scientificCouncil.secretariado.esecs=CTC ESECS Secretariado\n" +
//Pedagogico
"user.role.pedagogicCouncil.president.esecs=Pedagógico ESECS Presidente\n" +
"user.role.pedagogicCouncil.board.esecs=Pedagógico ESECS Membro\n" +
"user.role.pedagogicCouncil.secretariado.esecs=Pedagógico ESECS Secretariado\n" +
//ESS
"user.role.school.president.ess=Escola Director da ESS\n"+
"user.role.school.board.ess=Escola Board de Direcção da ESS\n"+
"user.role.school.secretariado.ess=Escola Secretariado da ESS\n"+
//CTC
"user.role.scientificCouncil.president.ess=CTC ESS Presidente\n" +
"user.role.scientificCouncil.board.ess=CTC ESS Membro\n" +
"user.role.scientificCouncil.secretariado.ess=CTC ESS Secretariado\n" +
//Pedagogico
"user.role.pedagogicCouncil.president.ess=Pedagógico ESS Presidente\n" +
"user.role.pedagogicCouncil.board.ess=Pedagógico ESS Membro\n" +
"user.role.pedagogicCouncil.secretariado.ess=Pedagógico ESS Secretariado\n" +
//ESCOLAS ANTIGOS NAO USAR
"user.role.board.school.estg=Board de Direcção da ESTG\n"+
"user.role.board.school.esae=Board de Direcção da ESAE\n"+
"user.role.board.school.esecs=Board de Direcção da ESECS\n"+
"user.role.board.school.ess=Board de Direcção da ESS\n"+
//ESAE
"user.role.department.board.agric.recurs.nat=Departamento Direção - Agricultura e Recursos Naturais\n" +
"user.role.department.board.cienc.tecnol.ani=Departamento Direção - Ciência e Tecnologia Animal\n" +
"user.role.department.diretor.agric.recurs.nat=Departamento Diretor - Agricultura e Recursos Naturais\n" +
"user.role.department.diretor.cienc.tecnol.ani=Departamento Diretor - Ciência e Tecnologia Animal\n" +
//ESECS
"user.role.department.board.comun.artes.tecn=Departamento Direção - Comunicação, Artes e Tecnologias\n" +
"user.role.department.board.educac.formac=Departamento Direção - Educação e Formação\n" +
"user.role.department.board.inter.des.soc=Departamento Direção - Intervenção e Desenvolvimento Social\n" +
"user.role.department.diretor.comun.artes.tecn=Departamento Diretor - Comunicação, Artes e Tecnologias\n" +
"user.role.department.diretor.educac.formac=Departamento Diretor - Educação e Formação\n" +
"user.role.department.diretor.inter.des.soc=Departamento Diretor - Intervenção e Desenvolvimento Social\n" +
//ESS
"user.role.department.board.cienc.tec.saude=Departamento Direção - Ciências e Tecnologias da Saúde\n" +
"user.role.department.diretor.cienc.tec.saude=Departamento Diretor - Ciências e Tecnologias da Saúde\n" +
//ESTG
"user.role.department.board.cienc.empre.sh=Departamento Direção - Ciências Empresariais, Sociais e Humanas\n" +
"user.role.department.board.tecnolo.design=Departamento Direção - Tecnologias e Design\n" +
"user.role.department.diretor.cienc.empre.sh=Departamento Diretor - Ciências Empresariais, Sociais e Humanas\n" +
"user.role.department.diretor.tecnolo.design=Departamento Diretor - Tecnologias e Design\n"
;
}