diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml
index 9dc3be17..62185e49 100644
--- a/docker-compose-dev.yml
+++ b/docker-compose-dev.yml
@@ -27,7 +27,7 @@ services:
- HARENA_LOGGER_URL=http://localhost:10030
- HARENA_LOGGER_API_VERSION=v1
- restart: always
+ restart: on-failure:5
networks:
- harena-space
volumes:
@@ -57,7 +57,7 @@ services:
- HASH_DRIVER=bcrypt
depends_on:
- harena-manager-database
- restart: always
+ restart: on-failure:5
networks:
- harena-space
volumes:
@@ -78,7 +78,7 @@ services:
- MYSQL_PASSWORD=jacinto
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_ROOT_PASSWORD=root
- restart: always
+ restart: on-failure:5
networks:
- harena-space
diff --git a/src/adonisjs/public/author/drafts/index.html b/src/adonisjs/public/author/drafts/index.html
index 0e9ac682..2e6e5191 100644
--- a/src/adonisjs/public/author/drafts/index.html
+++ b/src/adonisjs/public/author/drafts/index.html
@@ -173,9 +173,22 @@
diff --git a/src/adonisjs/public/author/js/author.js b/src/adonisjs/public/author/js/author.js
index 22640f16..3f94bb39 100644
--- a/src/adonisjs/public/author/js/author.js
+++ b/src/adonisjs/public/author/js/author.js
@@ -430,7 +430,7 @@ class AuthorManager {
source: md
}, null, true)
- if(status.message && !status.message.includes('Error') ){
+ if(status.message && (!status.message.includes('Error') && !status.message.includes('Forbidden')) ){
Basic.service.authorPropertyStore('caseId', Basic.service.currentCaseId)
this.noticeModalContent('text-white','bg-success','SAVED!', 900)
@@ -448,9 +448,9 @@ class AuthorManager {
})
let dummy = await promise
this._messageSpace.classList.add('invisible')
- document.getElementById('btn-save-draft').innerHTML = 'SAVE'
+ // document.getElementById('btn-save-draft').innerHTML = 'SAVE'
}else {
- this.noticeModalContent('text-white','bg-danger',`${status.message}. Please try again.
If it persists, contact the support.`, 15000)
+ this.noticeModalContent('text-white','bg-danger',`${status.message}.. Please try again.
If it persists, contact the support.`, 15000)
// this._messageSpace.firstElementChild.innerHTML = status.message
// this._messageSpace.firstElementChild.style.backgroundColor = '#f21313b5'
// this._messageSpace.firstElementChild.style.borderRadius = '50px'
@@ -471,12 +471,12 @@ class AuthorManager {
this._messageSpace.firstElementChild.style.backgroundColor = null
this._messageSpace.firstElementChild.style.borderRadius = null
this._messageSpace.firstElementChild.style.right = null
- document.getElementById('btn-save-draft').innerHTML = 'SAVE'
+ // document.getElementById('btn-save-draft').innerHTML = 'SAVE'
}
} else{
this._messageSpace.firstElementChild.innerHTML = 'Error...try again.'
setTimeout(this._messageSpace.classList.add('invisible'), 1500)
- document.getElementById('btn-save-draft').innerHTML = 'SAVE'
+ // document.getElementById('btn-save-draft').innerHTML = 'SAVE'
}
}
diff --git a/src/adonisjs/public/author/js/dcc-author-server-proxy.js b/src/adonisjs/public/author/js/dcc-author-server-proxy.js
index 16e55504..02e6f2c8 100644
--- a/src/adonisjs/public/author/js/dcc-author-server-proxy.js
+++ b/src/adonisjs/public/author/js/dcc-author-server-proxy.js
@@ -295,9 +295,11 @@ class DCCAuthorServer {
serviceResponse = endpointResponse.data
})
.catch(function (error) {
+ error.code = JSON.stringify(error.message).includes('404')?404:'undefined error'
console.log('=== load ' + sd + ' template error')
console.log(error)
console.log(error.code)
+ serviceResponse = error
})
if (serviceResponse != null)
diff --git a/src/adonisjs/public/author/js/template-case.js b/src/adonisjs/public/author/js/template-case.js
index d37501cd..aadcc1fd 100644
--- a/src/adonisjs/public/author/js/template-case.js
+++ b/src/adonisjs/public/author/js/template-case.js
@@ -17,36 +17,6 @@ class TemplateToCase {
document.querySelector('#category').value = _url.searchParams.get('category')
const params = new FormData(document.querySelector('#create-case-form'))
- // console.log(params);
- // console.log(params.get('template'));
- /*
- // params.set('template', _url.searchParams.get('template').replace(/__/ig, "/"))
- // params.set('quest', _url.searchParams.get('quest'))
- // for (var pair of params.entries()) {
- // console.log(pair[0] + ': ' + pair[1])
- // }
- // console.log(params)
-
- // load template
- */
- /*
- const templateRequest = {
- method: 'GET',
- url: '/templates/' +
- params.get('template') + '.md'
- }
-
- let markdown = null
- await axios(templateRequest)
- .then(function (endpointResponse) {
- markdown = endpointResponse.data
- })
- .catch(function (error) {
- console.log(error)
- console.log(error.code)
- })
- */
-
const templateMd =
await MessageBus.i.request(
'data/template/' + params.get('template').replace(/\//g, '.') +
@@ -106,7 +76,75 @@ class TemplateToCase {
}
)
}
-}
+
+ //Object containing key 'params'.
+ //Inside it, needs to contain 'title','description','language','domain','keywords','creationDate','complexity'
+ //'category','template'
+ async storeCaseNoUi (incoming) {
+ let _caseId
+ try {
+ const _url = new URL(document.location)
+
+ const params = incoming['params']
+ const templateMd =
+ await MessageBus.i.request(
+ 'data/template/' + params['template'].replace(/\//g, '.') +
+ '/get', {static: false}, null, true)
+ let markdown = templateMd.message
+
+ if (markdown != null) {
+ const config = {
+ method: 'POST',
+ url: DCCCommonServer.managerAddressAPI + 'case',
+ data: {
+ title: params['title'],
+ description: params['description'],
+ language: params['language'],
+ domain: params['domain'],
+ specialty: params['specialty'],
+ keywords: params['keywords'],
+ source: markdown,
+ original_date: params['creationDate'],
+ complexity: params['complexity'],
+ },
+ withCredentials: true
+ }
+
+
+ await axios(config)
+ .then(function (endpointResponse) {
+ _caseId = endpointResponse.data.id
+ })
+ .catch(function (error) {
+ console.log(error)
+ })
+
+ const linkCase = {
+ method: 'POST',
+ url: DCCCommonServer.managerAddressAPI + 'category/link/case',
+ data: {
+ categoryId: params['category'],
+ caseId: _caseId,
+ orderPosition: 0
+ },
+ withCredentials: true
+ }
+ await axios(linkCase)
+ .then(function (endpointResponse) {
+ // window.location.href = '/author/?id=' + _caseId
+ })
+ .catch(function (error) {
+ console.log(error)
+ // window.location.href = '/author/?id=' + _caseId
+ })
+ }
+ return {'data':_caseId,'message':'Case created successfully!','status':200}
+ } catch (e) {
+ console.log(e)
+ }
+ }
+ }
+
(function () {
TemplateToCase.s = new TemplateToCase()
diff --git a/src/adonisjs/public/editor/annotate/js/annotator.js b/src/adonisjs/public/editor/annotate/js/annotator.js
index 259e93c9..dffa3361 100644
--- a/src/adonisjs/public/editor/annotate/js/annotator.js
+++ b/src/adonisjs/public/editor/annotate/js/annotator.js
@@ -122,12 +122,12 @@ class Annotator {
this._year = c.property_value; break
default:
let slot
- const ifr = c.fragment + '_' + c.range
+ const ifr = c.fragment.toLowerCase() + '_' + c.range
let mem = 0
if (ifrag[ifr])
slot = ifrag[ifr]
else {
- let frag = c.fragment
+ let frag = c.fragment.toLowerCase()
const fs = c.range.split(';')
const fragments = []
for (const f of fs) {
@@ -175,21 +175,23 @@ class Annotator {
if (questAnn != null && questAnn.message != null) {
questAnn = questAnn.message
+ const doclc = doc.toLowerCase()
const annotations = []
const ifrag = {}
for (const c of questAnn) {
let slot = null
- if (ifrag[c.fragment])
- slot = ifrag[c.fragment]
+ const fraglc = c.fragment.toLowerCase()
+ if (ifrag[fraglc])
+ slot = ifrag[fraglc]
else {
- const pos = doc.indexOf(c.fragment)
+ const pos = doclc.indexOf(fraglc)
if (pos > -1) {
slot = {
fragments: [
- {fragment: c.fragment, start: pos, size: c.fragment.length}],
+ {fragment: fraglc, start: pos, size: fraglc.length}],
categories: []}
annotations.push(slot)
- ifrag[c.fragment] = slot
+ ifrag[fraglc] = slot
}
}
const cat = c.property_id.substring(4)
diff --git a/src/adonisjs/public/infra/conditional-layout.js b/src/adonisjs/public/infra/conditional-layout.js
index 2125c32e..a8e8a31d 100644
--- a/src/adonisjs/public/infra/conditional-layout.js
+++ b/src/adonisjs/public/infra/conditional-layout.js
@@ -36,7 +36,10 @@ class LayoutController {
if(new URL(document.location).pathname == '/author/'){
this.dynamicAuthor()
+ }else if(new URL(document.location).pathname.includes('/author/env/inf331_2023/lab')){
+ this.dynamicLab()
}
+
if(new URL(document.location).pathname == '/author/home/'){
this.dynamicMenu()
}else if(new URL(document.location).pathname == '/author/drafts/feedback/'){
@@ -60,9 +63,10 @@ class LayoutController {
async busMessages(){
// console.log('======= starting conditional-layout')
LayoutController.user = await MessageBus.i.waitMessage('user/login/+')
- if(new URL(document.location).pathname == '/author/'){
+ if(new URL(document.location).pathname == '/author/' || new URL(document.location).pathname.includes('/author/env/inf331_2023/lab')){
LayoutController.case = await MessageBus.i.waitMessage('service/response/get/harena-case')
}
+
// console.log('============ starting controller dynamic')
this.startController()
@@ -174,9 +178,74 @@ class LayoutController {
}
}
-
}
+ async dynamicLab (){
+ const toolbarDiv = document.querySelector('#div-toolbar-rightside')
+ toolbarDiv.innerHTML =
+ `
Entregar Laboratório:
+
+
+
`
+ // ------------------------------------------------------------------------------- //
+
+
+
+ const dccSubmitProp = document.createElement('dcc-submit')
+ const userGrade = LayoutController.user.message.grade
+ const formProp = document.querySelector('#form-case-property')
+ const inputPropertyValue = document.querySelector('#property_value')
+
+ if(userGrade === 'student'){
+
+ dccSubmitProp.setAttribute('id','dcc-submit-feedback')
+ dccSubmitProp.setAttribute('bind','submit-case-property')
+ dccSubmitProp.setAttribute('xstyle','btn btn-secondary m-1')
+ dccSubmitProp.setAttribute('label', "Entregar")
+ dccSubmitProp.setAttribute('topic','service/request/post')
+ dccSubmitProp.setAttribute('data-toggle','tooltip')
+ dccSubmitProp.setAttribute('data-placement','top')
+ dccSubmitProp.setAttribute('title',"Entregar laboratório para o/a professor/a.")
+ await formProp.appendChild(dccSubmitProp)
+
+ inputPropertyValue.value = '0'
+
+ //Disable save button if expiration date is met
+ }
+ // else if(userGrade === 'professor' || userGrade === 'coordinator'){
+ // dccSubmitProp.setAttribute('id','dcc-submit-feedback')
+ // dccSubmitProp.setAttribute('bind','submit-case-property')
+ // dccSubmitProp.setAttribute('xstyle','btn btn-secondary m-1')
+ // dccSubmitProp.setAttribute('label','Set Feedback Complete')
+ // dccSubmitProp.setAttribute('topic','service/request/put')
+ // dccSubmitProp.setAttribute('connect','submit:harena-case-property:service/request/put')
+ // dccSubmitProp.setAttribute('data-toggle','tooltip')
+ // dccSubmitProp.setAttribute('data-placement','top')
+ // dccSubmitProp.setAttribute('title',"Sets feedback as finished (for your student's knowlegde)")
+
+ // await formProp.appendChild(dccSubmitProp)
+
+ // inputPropertyValue.value = '1'
+ // }
+
+ this.labDeliverButtonCaseState()
+
+ // if(new URL(document.location).searchParams.get('fdbk')){
+ // setTimeout(function(){
+ // // document.querySelector('#button-comments-nav').click()
+ // // MessageBus.i.publish('control/properties/expand')
+ // MessageBus.i.publish('control/comments/expand')
+ // // MessageBus.i.publish('control/comments/editor')
+ // }, 500)
+ // }
+
+ }
+
async dynamicMenu (){
if((LayoutController.user.message.institution === 'hcpa' || LayoutController.user.message.institution === 'unisinos')
@@ -216,6 +285,88 @@ class LayoutController {
}
}
+ async labDeliverButtonCaseState (propValue){
+ const userGrade = LayoutController.user.message.grade
+ const btnLabDelivered = document.querySelector('#dcc-submit-feedback')
+ if(propValue){
+ LayoutController.case.message.property.complete = propValue
+ }
+ if(userGrade === 'student'){
+ let labN = LayoutController.case.message.keywords
+ labN = labN.substring(labN.length-1)
+ const expirationDate = labProgressManager.i.labExpiration[labN]
+ //Verifies property 'feedback' to disable button and change layout
+ if(LayoutController.case.message.property.complete){
+ if(LayoutController.case.message.property.complete == 0){
+
+ btnLabDelivered.firstElementChild.innerHTML = 'Entregue'
+ }
+ // else {
+ // btnLabDelivered.firstElementChild.innerHTML = 'Recieved'
+ // }
+
+ btnLabDelivered.firstElementChild.classList.add('disabled')
+ btnLabDelivered.style.pointerEvents = 'none'
+ document.querySelector('#dcc-submit-feedback').removeAttribute('topic')
+ document.querySelector('#dcc-submit-feedback').removeAttribute('connect')
+ try {
+ document.querySelector('#property_value').remove()
+ document.querySelector('#property_title').remove()
+ document.querySelector('#harena-case-property').remove()
+ document.querySelector('#harena-inf331-complete-lab').remove()
+ } catch (e) {
+ console.log(e)
+ }
+ }
+ btnLabDelivered.addEventListener("click", function(event) {
+ btnLabDelivered.firstElementChild.innerHTML = 'Entregue'
+ btnLabDelivered.firstElementChild.classList.add('disabled')
+ btnLabDelivered.style.pointerEvents = 'none'
+ document.querySelector('#dcc-submit-feedback').removeAttribute('topic')
+ document.querySelector('#dcc-submit-feedback').removeAttribute('connect')
+ document.querySelector('#harena-case-property').remove()
+ document.querySelector('#harena-inf331-complete-lab').remove()
+ })
+ if (expirationDate < new Date()){
+ const saveBtn = document.querySelector('#btn-save-draft')
+ saveBtn.innerHTML = 'Data da entrega expirada'
+ btnLabDelivered.firstElementChild.innerHTML = btnLabDelivered.firstElementChild.innerHTML == 'Entregar'?'Não entregue':'Entregue'
+ saveBtn.classList.add('disabled')
+ saveBtn.nextElementSibling.remove()
+ }
+ }
+ /*else if(userGrade === 'professor' || userGrade === 'coordinator'){
+ if(document.querySelector('#harena-inf331-complete-lab'))
+ document.querySelector('#harena-inf331-complete-lab').remove()
+
+ let casePropertyRest = document.querySelector('#harena-case-property')
+ let caseDccSubmit = document.querySelector('#dcc-submit-feedback')
+
+ if(LayoutController.case.message.property.feedback){
+ btnLabDelivered.firstElementChild.innerHTML = 'Notify as Complete'
+
+ if(LayoutController.case.message.property.feedback == 1){
+ casePropertyRest.remove()
+ btnLabDelivered.firstElementChild.innerHTML = 'Notified as Complete'
+ btnLabDelivered.firstElementChild.classList.add('disabled')
+ btnLabDelivered.style.pointerEvents = 'none'
+ caseDccSubmit.removeAttribute('topic')
+ caseDccSubmit.removeAttribute('connect')
+ try {
+ document.querySelector('#property_value').remove()
+ document.querySelector('#property_title').remove()
+ } catch (e) {
+ console.log(e)
+ }
+
+ }
+ btnLabDelivered.addEventListener("click", function(event) {
+ btnLabDelivered.firstElementChild.innerHTML = 'Notified as Complete'
+ })
+ }
+ }*/
+ }
+
async feedbackButtonCaseState (propValue){
const userGrade = LayoutController.user.message.grade
const btnFeedback = document.querySelector('#dcc-submit-feedback')
@@ -295,7 +446,7 @@ class LayoutController {
// console.log('============ entered dynamic modal')
const selEntity = document.querySelector('#entity')
const wrapperSelEntity = document.querySelector('#wrapper-entity')
- const selSubject = document.querySelector('#wrapper-subject .sel-institution')
+ const selSubject = document.querySelector('#wrapper-subject #subject')
const inputSubject = document.querySelector('#wrapper-input-subject')
const wrapperSelSubject = document.querySelector('#wrapper-subject')
const selSubjectGrade = document.querySelector('#subject_grade')
diff --git a/src/adonisjs/public/infra/dcc-rest-proxy.js b/src/adonisjs/public/infra/dcc-rest-proxy.js
index 7fba66d4..2f1ba4b8 100644
--- a/src/adonisjs/public/infra/dcc-rest-proxy.js
+++ b/src/adonisjs/public/infra/dcc-rest-proxy.js
@@ -262,6 +262,7 @@
'fSpecialty': new URL(document.location).searchParams.get('fSpecialty'),
'fPropertyValue': new URL(document.location).searchParams.get('fPropertyValue'),
'fSearchStr': new URL(document.location).searchParams.get('fSearchStr'),
+ 'fGroup': new URL(document.location).searchParams.get('fGroup'),
'page': new URL(document.location).searchParams.get('page'),
'nItems': new URL(document.location).searchParams.get('limit'),
},
@@ -287,6 +288,8 @@
in: 'query'},
{name: 'fSearchStr',
in: 'query'},
+ {name: 'fGroup',
+ in: 'query'},
{name: 'page',
in: 'query'},
{name: 'nItems',
@@ -430,6 +433,30 @@
}
)
+ //Retrieves groups that user is a part of
+ DCC.component(
+ 'harena-user-groups',
+ 'dcc-rest',
+ {
+ environment: {
+ 'url-manager': HarenaConfig.manager.url + HarenaConfig.manager.api,
+ },
+ oas: {
+ paths: {
+ '{url-manager}/group': {
+ 'get': {
+ operationId: 'user-group-list',
+ parameters: [
+ {name: 'url-manager',
+ in: 'path'}
+ ]
+ }
+ }
+ }
+ }
+ }
+ )
+
DCC.component(
'harena-ask-feedback',
'dcc-rest',
@@ -800,4 +827,39 @@
}
)
+ DCC.component(
+ 'harena-cases-inf331',
+ 'dcc-rest',
+ {
+ environment: {
+ 'url-manager': HarenaConfig.manager.url + HarenaConfig.manager.api,
+ 'clearance': 5,
+ 'fSearchStr': 'INF 331 - Laboratório',
+ 'page': 1,
+ 'nItems': 30,
+ },
+ oas: {
+ paths: {
+ '{url-manager}/user/cases': {
+ 'get': {
+ operationId: 'cases-list',
+ parameters: [
+ {name: 'url-manager',
+ in: 'path'},
+ {name: 'clearance',
+ in: 'query'},
+ {name: 'fSearchStr',
+ in: 'query'},
+ {name: 'page',
+ in: 'query'},
+ {name: 'nItems',
+ in: 'query'},
+ ]
+ }
+ }
+ }
+ }
+ }
+ )
+
})()
diff --git a/src/adonisjs/public/templates/labs/lab1/how-to-present.png b/src/adonisjs/public/templates/labs/lab1/how-to-present.png
new file mode 100644
index 00000000..4595cacd
Binary files /dev/null and b/src/adonisjs/public/templates/labs/lab1/how-to-present.png differ
diff --git a/src/adonisjs/public/templates/labs/lab2/orange-diagram.png b/src/adonisjs/public/templates/labs/lab2/orange-diagram.png
new file mode 100644
index 00000000..2f4dafbd
Binary files /dev/null and b/src/adonisjs/public/templates/labs/lab2/orange-diagram.png differ
diff --git a/src/adonisjs/public/templates/labs/lab_1-dynamic.md b/src/adonisjs/public/templates/labs/lab_1-dynamic.md
new file mode 100644
index 00000000..cfc1ae2f
--- /dev/null
+++ b/src/adonisjs/public/templates/labs/lab_1-dynamic.md
@@ -0,0 +1,55 @@
+# Tarefa 1 #
+
+
Componentes Intercambiáveis no Orange
+
Tarefa 1
+
+{{explica
+* Modifique o workflow do passo 2 para ler dados de uma planilha Excel (`computed/commodity-profile.xlsx`).
+* Sugestão: troque o leitor de CSV pelo leitor genérico de arquivos.
+* Veja no terceiro quadro como apresentar o resultado da tarefa.
+}}
+
+{{figura
+
Coloque a figura com a resolução da tarefa aqui.
+}}
+
+# Tarefa 2 #
+
+
Componentes Intercambiáveis no Orange
+
Tarefa 2
+
+{{explica
+* Escreva uma pergunta de pesquisa de algo que você quer investigar sobre a tabela de receitas. A pergunta de pesquisa deve aparecer no workflow, tal como está feito no exemplo de Apresentação do Resultado das Tarefas.
+* Elabore um workflow que leia o arquivo de receitas (`recipes/Recipes_WWEIA_FCID_0510.csv`) e apresente uma visualização relacionada a sua pergunta.
+* Use um outro tipo de gráfico que não seja o de dispersão.
+}}
+
+{{figura
+
Coloque a figura com a resolução da tarefa aqui.
+}}
+
+# Tarefa 3 #
+
+
Componentes e Simetria no Orange
+
Tarefa
+
+{{explica
+* Modifique o último workflow apresentado, acrescentando a descrição do método de cozimento (cooking method) no resultado.
+* O método de cozimento está na tabela `Cooking_Method_Description.csv` na pasta basics.
+}}
+
+{{figura
+
Coloque a figura com a resolução da tarefa aqui.
+}}
+
+# Apresenta #
+
+
Apresentação do Resultado das Tarefas
+
+Você deve capturar a tela do workflow onde deve aparecer o workflow completo e a janela de resultados, tal como ilustra este exemplo:
+
+![How to Present](template_fix/labs/lab1/how-to-present.png)
+
+___ Template ___
+
+* template: labs/lab_1
diff --git a/src/adonisjs/public/templates/labs/lab_1-static.md b/src/adonisjs/public/templates/labs/lab_1-static.md
new file mode 100644
index 00000000..9026b7b4
--- /dev/null
+++ b/src/adonisjs/public/templates/labs/lab_1-static.md
@@ -0,0 +1,8 @@
+___ Flow ___
+
+* Sequential:
+ * _sequential_
+
+___ Data ___
+
+* theme: simple(blue)
diff --git a/src/adonisjs/public/templates/labs/lab_2-dynamic.md b/src/adonisjs/public/templates/labs/lab_2-dynamic.md
new file mode 100644
index 00000000..0cb2977c
--- /dev/null
+++ b/src/adonisjs/public/templates/labs/lab_2-dynamic.md
@@ -0,0 +1,42 @@
+# Referência #
+
+
Diagrama de Referência
+
+Para as suas tarefas a seguir, considere o diagrama de referência abaixo:
+
+![How to Present](template_fix/labs/lab2/orange-diagram.png)
+
+# Tarefa 1 #
+
+
Comunicação orientada a Conexões
+
Tarefa
+
+{{explica
+* Considere o workflow do diagrama de referência em Orange.
+* Construa dois diagramas conectando componentes com interfaces providas e requeridas, bem como atributos usando: padrão push e padrão pull.
+* Apresente o detalhamento da interface em UML.
+}}
+
+{{figura
+
Coloque o primeiro diagrama (padrão push) com a resolução da tarefa aqui.
+
Coloque o segundo diagrama (padrão pull) com a resolução da tarefa aqui.
+}}
+
+# Tarefa 2 #
+
+
Comunicação orientada a Mensagens ou Documentos
+
Tarefa
+
+{{explica
+* Considere o workflow do diagrama de referência em Orange.
+* Construa um diagrama conectando componentes baseado em mensagens.
+* Apresente o detalhamento da mensagens/documentos trocados.
+}}
+
+{{figura
+
Coloque o diagrama com a resolução da tarefa aqui.
+}}
+
+___ Template ___
+
+* template: labs/lab_1
diff --git a/src/adonisjs/public/templates/labs/lab_2-static.md b/src/adonisjs/public/templates/labs/lab_2-static.md
new file mode 100644
index 00000000..849086fb
--- /dev/null
+++ b/src/adonisjs/public/templates/labs/lab_2-static.md
@@ -0,0 +1,8 @@
+___ Flow ___
+
+* Sequential:
+ * _sequential_
+
+___ Data ___
+
+* theme: simple(purple)
diff --git a/src/adonisjs/public/templates/labs/labs.png b/src/adonisjs/public/templates/labs/labs.png
new file mode 100644
index 00000000..b86b96e2
Binary files /dev/null and b/src/adonisjs/public/templates/labs/labs.png differ
diff --git a/src/adonisjs/public/templates/templates.json b/src/adonisjs/public/templates/templates.json
index 70ccc6d8..5b9efc43 100644
--- a/src/adonisjs/public/templates/templates.json
+++ b/src/adonisjs/public/templates/templates.json
@@ -4,7 +4,21 @@
"path": "plain/case/empty",
"icon": "plain/case/plain.png",
"scope": "case",
- "environment": "development"},
+ "environment": "jacinto"},
+"Lab 1":
+ {"questId": "labs",
+ "description": "Lab 1.",
+ "path": "labs/lab_1",
+ "icon": "labs/labs.png",
+ "scope": "case",
+ "environment": "jacinto"},
+"Lab 2":
+ {"questId": "labs",
+ "description": "Lab 2.",
+ "path": "labs/lab_2",
+ "icon": "labs/labs.png",
+ "scope": "case",
+ "environment": "jacinto"},
"Zombie":
{"questId": "zombie",
"description": "Zombie Venom.",
diff --git a/src/adonisjs/public/user/js/user-signup.js b/src/adonisjs/public/user/js/user-signup.js
index 54bfdb5c..6c30a431 100644
--- a/src/adonisjs/public/user/js/user-signup.js
+++ b/src/adonisjs/public/user/js/user-signup.js
@@ -15,7 +15,7 @@ class UserSignup {
document.querySelector('#date_agree_2').innerHTML = sdate
}
- // TCLE of the Experiment Illness Script Components (ISC)
+ // TCLE of the Zombie Venom for 18+ years old
startAdultMuseum () {
this._experimentStartAdultMuseum = this._experimentStartAdultMuseum.bind(this)
MessageBus.i.subscribe('control/experiment/start', this._experimentStartAdultMuseum)
@@ -27,6 +27,17 @@ class UserSignup {
this._startPrognosisISC()
}
+ // TCLE of the Software Engineering for 18+ years old
+ startAdultSWE () {
+ MessageBus.i.subscribe('control/experiment/start', this._experimentStartSWE.bind(this))
+
+ this.finalMessage =
+`
Bem-vindo(a)! Você foi convidado(a) a participar de um estudo científico no ambiente Harena.
+
Nas próximas telas, você será conduzido a um ambiente de resolução de laboratórios.
+
`
+ this._startPrognosisISC()
+ }
+
// TCLE of the Prognosis Game
startPrognosis () {
this.finalMessage =
@@ -319,6 +330,15 @@ class UserSignup {
// window.location.href = "/player/case/?id=8b969606-ad6b-4772-a8e8-f15ae8033e0e&room=f2ef57a5-7c71-4fd9-9fd5-69448020c981"
window.location.href = "/player/case/?id=164e49f9-fee2-49dc-aa16-53bf7cf3ea97&room=2dcc1f39-85e6-4cfe-9539-58145f6cc98b"
}
+
+ async _experimentStartSWE () {
+ const userLogin = {
+ username: this.current.username,
+ eventId: this.current.eventId
+ }
+ let user = await MessageBus.i.request('user/login/post', userLogin)
+ window.location.href = '/author/env/inf331_2023'
+ }
}
(function () {
diff --git a/src/adonisjs/public/user/signup/tcle-swe/index.html b/src/adonisjs/public/user/signup/tcle-swe/index.html
new file mode 100644
index 00000000..236feb2a
--- /dev/null
+++ b/src/adonisjs/public/user/signup/tcle-swe/index.html
@@ -0,0 +1,226 @@
+
+
+
+
+
Cadastro de Usuário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+