Modificado a rotina de Lançamento de Faltas/Notas para:

1) Agrupar os Componentes Curriculares por Área de Conhecimento. O
agrupamento é feito de duas formas, de acordo com o modo de
preenchimento que o usuário escolher:
   * Caso selecione o Componente Curricular: Já no menu de seleção foram
criados grupos (<optgroup/>) para cada Área de Conhecimento. No
carregamento da tela de preenchimento das faltas/notas, é inserido uma
nova coluna (<td/>) na primeira posição da tabela superior, informando a
Área de Conhecimento do Componente Curricular selecionado.
   * Caso não selecione o Componente Curricular: É inserido uma nova
linha (<tr/>) na listagem, antes do primeiro Componente Curricular de
cada Área de Conhecimento.

2) Ordenar os Componentes Curriculares alfabeticamente por:
   * Nome da Área de Conhecimento, e;
   * Nome do Componente Curricular.

/*
 * Modificações por arquivo
 */

[1] File: /ieducar/modules/Avaliacao/Views/DiarioApiController.php
    - Adicionado a função "strtoupper()" no conteúdo da variável
"$componente['nome']"
    - Adicionado segundo parâmetro como "false", no método
"safeString()" utilizado no conteúdo da variável "$componente['nome']"
    - Criado novo método "getAreaConhecimento($componenteCurricularId)"
com visibilidade "protected", para retornar uma classe com o Id e o Nome
da Área de Conhecimento do Componente Curricular cujo Id foi passado
pelo parâmetro
    - Criado nova posição "area_id" no array "$componente" para gravar o
Id da Área de Conhecimento
    - Criado nova posição "area_nome" no array "$componente" para gravar
o Nome da Área de Conhecimento
    - Criado nova posição temporária "my_order" no array "$componente"
para ordenar alfabeticamente através do método "sortByKey" os
Componentes Curriculares pelo Nome da Área de Conhecimento e pelo Nome
do Componente Curricular, respectivamente e sem acentos. Esta posição é
removida após a ordenação para que não seja enviada na requisição.


[2] File: /ieducar/modules/Avaliacao/Assets/Diario.js
    - Criado na função "setTableSearchDetails()" um novo elemento <th/>
com o conteúdo "Área de Conhecimento"
    - Criado na função "setTableSearchDetails()" um novo elemento <td/>
com o Nome da Área de Conhecimento, recuperado através do atributo
"label" do elemento pai (<optgroup/> criado no arquivo [7]) do <option/>
selecionado
    - Adicionado seletor "optgroup" na função "setTableSearchDetails()",
no jQuery que busca o Nome do Componente Curricular selecionado, para
considerar a existência do(s) <optgroup/> criado(s) no arquivo [7]
    - Adicionado seletor ":not(.area-conhecimento)" na função
"handleSearch()", no jQuery que busca os elementos que possuem o
atributo "colspan"
    - Criado na função "updateComponenteCurriculares()" array de
controle "areas" para salvar o Id das Áreas de Conhecimento já exibidas,
obtidas no arquivo [1]
    - Criado na função "updateComponenteCurriculares()" variável
"areaColspan" para salvar a quantidade de colunas da linha do cabeçalho
    - Criado na função "updateComponenteCurriculares()" novo elemento
<tr/> referente a linha da Área de Conhecimento
    - Criado na função "updateComponenteCurriculares()" novo elemento
<td/> referente ao Nome da Área de Conhecimento obtido no arquivo [1], e
atribuído a classe "area-conhecimento" criada no arquivo [3]
    - Criado nova função "myNextValid($selectElement)", para ir para o
próximo <option/> após o selecionado, considerando agora a existência
do(s) <optgroup/> criado(s) no arquivo [7]
    - Alterado conteúdo da variável $nextOption na função
"selectNextOption()" para realizar chamada a nova função "myNextValid()"
mencionada acima


[3] File: /ieducar/intranet/styles/mytdt.css
    - Novo arquivo criado para contemplar o CSS das contribuições da
MyTDT Corp. para o i-Educar
    - Adicionado estilo para a classe "area-conhecimento" utilizada no
<td/> do arquivo [2]


[4] File: /ieducar/intranet/templates/nvp_htmlhead.tpl
    - Adicionado novo elemento <link/> para incluir o novo arquivo de
estilo (CSS) criado [3]


[5] File: /ieducar/lib/Portabilis/Business/Professor.php
    - Modificado as queries dos métodos
"componentesCurricularesTurmaAlocado()" e
"componentesCurricularesCursoAlocado()":
      * Adicionado campo (SELECT) "ac.nome as area_conhecimento"
      * Adicionado tabela (FROM) "modules.area_conhecimento as ac"
      * Adicionado condição (WHERE) "and cc.area_conhecimento_id =
ac.id"
      * Adicionado ordenamento (ORDER) "order by ac.nome, cc.nome"


[6] File:
/ieducar/modules/DynamicInput/Views/ComponenteCurricularController.php
    - Modificado as duas queries do método
"getComponentesCurriculares()":
      * Adicionado campo (SELECT) "ac.nome as area_conhecimento"
      * Adicionado tabela (FROM) "modules.area_conhecimento as ac"
      * Adicionado condição (WHERE) "and cc.area_conhecimento_id =
ac.id"
      * Adicionado ordenamento (ORDER) "order by ac.nome, cc.nome"
    - Alterado conteúdo da variável "$options[]" para um array
associativo (que será convertido para um objeto JSON), conforme segue:
      * Chave "value": Se utilizado um array associativo a mesma deve
existir, pois será o conteúdo do <option/> a ser gerado
      * Chave "group": Criada com intuito de salvar o conteúdo do campo
"area_conhecimento" retornado por uma das queries mencionada acima ou no
arquivo [5], que será utilizada no arquivo [7]
      * OBS: Assim como a chave "group", poderá ser criado qualquer
outra chave no array associativo que o conteúdo da mesma estará
acessível no <option/> através do atributo "data-*" onde "*" é o nome da
chave criada


[7] File:
/ieducar/modules/DynamicInput/Assets/Javascripts/DynamicInput.js
    - Criado na função "updateSelect()" array de controle "groups" para
salvar o Nome das Áreas de Conhecimento que já possuem <optgroup/>,
obtidas no arquivo [6]
    - Criado na função "updateSelect()" variável "optgroup" para salvar
o último elemento <optgroup/> criado
    - Modificado a função "updateSelect()" para verificar se existe o
atributo "data-group" no elemento <option/>, onde, caso exista:
      * Irá gerar um novo elemento <optgroup/> com o atributo "label"
preenchido com o conteúdo do "data-group" obtido no arquivo [6] e
definido pela função "jsonResourcesToSelectOptions()" neste mesmo
arquivo [7]
      * O elemento <option/> será adicionado como filho do novo elemento
<optgroup/> acima citado
      * O elemento <optgroup/> por sua vez, que será adicionado ao
<select/>
    - Modificado a função "jsonResourcesToSelectOptions()" para
verificar se o atributo "value" retornado pela requisição é do tipo
objeto, onde, caso seja:
      * Irá adicionar ao elemento <option/> o(s) atributo(s) "data-*"
com o conteúdo extraído conforme modificação realizada no item [6]
      * Irá adicionar ao contéudo do <option/> conforme mencionado em
[6] a chave "value", referente ao Nome do Componente Curricular

Change-Id: Ie93c75ef7fe1d6e390a7e0e14de69b991be902c9
Signed-off-by: Thieres Tembra <tdt@mytdt.com.br>
Merge pull request #58 from mytdt/master

Modificado a rotina de Lançamento de Faltas/Notas