0012044: Update ExpressoLite client for 20160518 release
authorFlávio Gomes da Silva Lisboa <flavio.lisboa@serpro.gov.br>
Wed, 13 Jul 2016 14:57:43 +0000 (11:57 -0300)
committerPhilipp Schüle <p.schuele@metaways.de>
Thu, 21 Jul 2016 14:50:26 +0000 (16:50 +0200)
-Auto. Test: check the schedules view
-Adjust recommendations of accessible validators
-Improve app behavior when offline
-Auto. Test: Checks contacts details
-Auto. Test: Other modules Access
-Auto. test: List corporate contact
-Define Samsung Browser compatibility
-Allow attendee to confirm participation in events
-Test: Change test target environment
-Auto. test: List personal contact
-Updated RequireJS from 2.1.15 to 2.2.0
-App: Updates for new environments
-Remove 'Serpro 50 Anos' commemorative logo
-Fix accessible calendar module loading
-Test: Improve wait mechanism
-Auto. test: Save new recipient
-Auto. test: Send email - cc and bcc
-Test: Send using contacts catalog
-Auto. test: Forward and reply email
-Empty trash folder on accessible
-Fix intermitent errors during tests
-Delete multiples messages on accessible
-Better description to aria-hidden links
-Select other calendars on accessible
-Allow users to confirm calendar events
-Alter position of delete message action
-View information about a particular event
-Auto. test: Important draft flag
-Incorporate Velocity.js library
-Fix null description on calendar events
-Standardize App method names
-Add date/time picker to calendar
-View events of the previous month and next
-Show calendar module to user
-Auto test: update e-mail draft
-Auto. test: Change methods name
-Auto. test: Search text
-Create accessible calendar module
-Auto. test: E-mail save draft
-Auto. test: E-mail move to folder
-Auto. test: E-mail mark read/unread
-Auto. test: E-mail toggle highlight
-Auto. test: E-mail reading
-Auto. test: E-mail deletion
-Remove calendar event
-Keep user logged in mobile App
-Functional Tests for Expresso Lite
-Fix view on calendar overlayed events
-Create new calendar event
-Added Chrome/Android bar color
-Allow search to be cancelled
-Sanitize localStorage calls
-Better view on calendar overlayed events
-Remove duplicated slash from api URL
-Make addressbook fields readonly
-Simplified JS callback calls
-Better view on calendar whole-day events
-Added calendar choosing
-Improved logoff transition
-Use email input field for login
-Remove mail/Contacts.js
-Remove duplicated slash from api URL
-Added new debugger module
-Fixed headline selection after mark read
-Create back to the top page anchor

Change-Id: Ie92eeeeb202c9be8c9848ca3635bb96ba485a890
Reviewed-on: https://gerrit.tine20.org/tine20/3365
Tested-by: jenkins user
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
147 files changed:
clients/ExpressoLite/ExpressoLite.git.log [new file with mode: 0644]
clients/ExpressoLite/build/build_cordova.sh
clients/ExpressoLite/build/cordova/config.xml
clients/ExpressoLite/build/cordova/cordova-build-src/platforms/android/res/xml/authenticator.xml [new file with mode: 0644]
clients/ExpressoLite/build/cordova/cordova-build-src/www/common-js/CordovaConfig.js [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Calendar/EventConfirmation.php [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Calendar/Main.php [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Calendar/OpenCalendar.php [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Calendar/OpenEvent.php [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/MainTemplate.css [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/MainTemplate.php [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/OpenCalendarTemplate.css [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/OpenCalendarTemplate.php [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/OpenEventTemplate.css [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/OpenEventTemplate.php [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Core/DateUtils.php
clients/ExpressoLite/src/accessible/Accessible/Core/EventUtils.php [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Core/MessageUtils.php [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Core/Template/ShowFeedbackTemplate.php
clients/ExpressoLite/src/accessible/Accessible/Handler.php
clients/ExpressoLite/src/accessible/Accessible/Login/Template/MainTemplate.php
clients/ExpressoLite/src/accessible/Accessible/Mail/ComposeMessage.php
clients/ExpressoLite/src/accessible/Accessible/Mail/DeleteMessage.php
clients/ExpressoLite/src/accessible/Accessible/Mail/EmptyTrash.php [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Mail/EmptyTrashConfirm.php [new file with mode: 0644]
clients/ExpressoLite/src/accessible/Accessible/Mail/Main.php
clients/ExpressoLite/src/accessible/Accessible/Mail/OpenMessage.php
clients/ExpressoLite/src/accessible/Accessible/Mail/ProcessMessageAction.php
clients/ExpressoLite/src/accessible/Accessible/Mail/Template/ComposeMessageTemplate.php
clients/ExpressoLite/src/accessible/Accessible/Mail/Template/MainTemplate.css
clients/ExpressoLite/src/accessible/Accessible/Mail/Template/MainTemplate.php
clients/ExpressoLite/src/accessible/Accessible/Mail/Template/OpenFolderTemplate.php
clients/ExpressoLite/src/accessible/Accessible/Mail/Template/OpenMessageTemplate.php
clients/ExpressoLite/src/addressbook/WidgetContactDetails.js
clients/ExpressoLite/src/addressbook/WidgetContactList.js
clients/ExpressoLite/src/addressbook/WidgetLetterIndex.js
clients/ExpressoLite/src/addressbook/addressbook.js
clients/ExpressoLite/src/addressbook/index.html
clients/ExpressoLite/src/api/ExpressoLite/Backend/Request/DeleteEvent.php [new file with mode: 0644]
clients/ExpressoLite/src/api/ExpressoLite/Backend/Request/EmptyTrash.php [new file with mode: 0644]
clients/ExpressoLite/src/api/ExpressoLite/Backend/Request/GetCalendars.php
clients/ExpressoLite/src/api/ExpressoLite/Backend/Request/SearchEvents.php
clients/ExpressoLite/src/api/ExpressoLite/Backend/Request/SetEventConfirmation.php
clients/ExpressoLite/src/api/ExpressoLite/TineTunnel/TineSession.php
clients/ExpressoLite/src/api/bootstrap.php
clients/ExpressoLite/src/calendar/DateCalc.js
clients/ExpressoLite/src/calendar/Events.js
clients/ExpressoLite/src/calendar/WidgetChooseDate.css [new file with mode: 0644]
clients/ExpressoLite/src/calendar/WidgetChooseDate.html [new file with mode: 0644]
clients/ExpressoLite/src/calendar/WidgetChooseDate.js [new file with mode: 0644]
clients/ExpressoLite/src/calendar/WidgetEditEvent.css
clients/ExpressoLite/src/calendar/WidgetEditEvent.html
clients/ExpressoLite/src/calendar/WidgetEditEvent.js
clients/ExpressoLite/src/calendar/WidgetEvents.css
clients/ExpressoLite/src/calendar/WidgetEvents.html
clients/ExpressoLite/src/calendar/WidgetEvents.js
clients/ExpressoLite/src/calendar/WidgetMonth.js
clients/ExpressoLite/src/calendar/WidgetWeek.js
clients/ExpressoLite/src/calendar/calendar.js
clients/ExpressoLite/src/calendar/index.html
clients/ExpressoLite/src/common-js/AccountManager.js [new file with mode: 0644]
clients/ExpressoLite/src/common-js/App.js
clients/ExpressoLite/src/common-js/Contacts.js
clients/ExpressoLite/src/common-js/ContactsAutocomplete.js
clients/ExpressoLite/src/common-js/ContextMenu.js
clients/ExpressoLite/src/common-js/Cordova.js
clients/ExpressoLite/src/common-js/Dialog.js
clients/ExpressoLite/src/common-js/Layout.html
clients/ExpressoLite/src/common-js/Layout.js
clients/ExpressoLite/src/common-js/SimpleMenu.js
clients/ExpressoLite/src/common-js/SplashScreen.css [new file with mode: 0644]
clients/ExpressoLite/src/common-js/SplashScreen.html [new file with mode: 0644]
clients/ExpressoLite/src/common-js/SplashScreen.js [new file with mode: 0644]
clients/ExpressoLite/src/common-js/TextBadges.js
clients/ExpressoLite/src/common-js/UploadFile.js
clients/ExpressoLite/src/common-js/external/jquery.min.js [new file with mode: 0644]
clients/ExpressoLite/src/common-js/external/require.min.js [new file with mode: 0644]
clients/ExpressoLite/src/common-js/external/velocity.min.js [new file with mode: 0644]
clients/ExpressoLite/src/common-js/jQuery.js [new file with mode: 0644]
clients/ExpressoLite/src/conf.php.dist [new file with mode: 0644]
clients/ExpressoLite/src/debugger/WidgetComponentTest.js
clients/ExpressoLite/src/debugger/WidgetTineCookies.js
clients/ExpressoLite/src/debugger/debugger.js
clients/ExpressoLite/src/debugger/index.html
clients/ExpressoLite/src/img/logo-expressobr-bottom.png
clients/ExpressoLite/src/index.html
clients/ExpressoLite/src/login.css
clients/ExpressoLite/src/login.js
clients/ExpressoLite/src/mail/WidgetAttacher.js
clients/ExpressoLite/src/mail/WidgetCompose.js
clients/ExpressoLite/src/mail/WidgetFolders.js
clients/ExpressoLite/src/mail/WidgetHeadlines.js
clients/ExpressoLite/src/mail/WidgetMessages.js
clients/ExpressoLite/src/mail/index.html
clients/ExpressoLite/src/mail/mail.js
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Addressbook/AddressbookPage.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Addressbook/ContactListItem.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Addressbook/ContactListTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Addressbook/WidgetContactDetails.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Calendar/CalendarPage.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Calendar/ListEventTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Generic/DateUtils.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Generic/ExpressoLiteTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Generic/GenericPage.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Generic/SingleLoginTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Generic/TestData.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Generic/TestScenarios.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Login/LoginPage.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Login/LoginTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/ComposeMailTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/ContactsAutoComplete.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/DeleteMailTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/HeadlinesEntry.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/MailPage.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/MarkReadUnreadTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/MarkReadUnreadThreadTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/MessageUnit.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/MoveMailSingleLoginTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/MoveMailTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/ReadMailTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/SaveDraftTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/SearchTextMessageTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/SendReceiveMailTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/ToggleHighlightTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/UpdateDraftTest.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/WidgetCompose.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/ExpressoLiteTest/Functional/Mail/WidgetMessages.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/README [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/ComposeMailTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/ContactListTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/DeleteMailTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/ListEventTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/LoginTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/MarkReadUnreadTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/MarkReadUnreadThreadTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/MoveMailSingleLoginTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/MoveMailTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/ReadMailTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/SaveDraftTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/SearchTextMessageTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/SendReceiveMailTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/ToggleHighlightTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/UpdateDraftTest.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/data/global_test_data.ini [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/functional_tests.xml [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/test_bootstrap.php [new file with mode: 0644]
clients/ExpressoLite/tests/functional_tests/test_conf.php.dist [new file with mode: 0644]

diff --git a/clients/ExpressoLite/ExpressoLite.git.log b/clients/ExpressoLite/ExpressoLite.git.log
new file mode 100644 (file)
index 0000000..c8b3f37
--- /dev/null
@@ -0,0 +1,5207 @@
+commit e2cc1e6adc1e61bdc0c44f040c2a6b0bc29e7e84
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Tue Jun 28 10:27:47 2016 -0300
+
+    Task #17245 - Auto. Test: check the schedules view
+    
+    - Checks the schedule view in a particular month or week;
+    - Create a class to retrieve the current day's date and present
+      in the requested format;
+    
+    Change-Id: I84dc96ea6dffe8df27be971161712aa88068c851
+
+ .../Functional/Calendar/CalendarPage.php           |  120 +++++++++++++++
+ .../Functional/Calendar/ListEventTest.php          |   93 +++++++++++
+ .../Functional/Generic/DateUtils.php               |  161 ++++++++++++++++++++
+ .../Functional/Generic/GenericPage.php             |   13 ++
+ tests/functional_tests/data/ListEventTest.ini      |    6 +
+ 5 files changed, 393 insertions(+)
+
+commit ffbaf83f1f468b6a5bfb510395ee68887f9f9d82
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Mon Jul 4 10:43:24 2016 -0300
+
+    Task #17421 - Adjust recommendations of accessible validators
+    
+    - Remove attribute 'name' of the <div> html elements.
+    - Remove attribute 'name' of the <img> element at login page.
+    - Add header '<h2>' at login page.
+    - Add an anchor to the 'content' area of the login page.
+    - Fix illegal character warning at text's links.
+    - Remove duplicated <title> element at composeMessageTemplate.php.
+    - Fix duplicated <table> element at the main page of calendar module.
+    - Remove attribute 'border:1' of the <table> elements.
+    - Prevent css style rules of dynamic message content to broke others
+      template html elements (Core/MessageUtils.php).
+    
+    Change-Id: Id3e660b0983fb6bd83819b59de1e2f47cf65ea3a
+
+ .../Accessible/Calendar/Template/MainTemplate.css  |   14 ++++-----
+ .../Accessible/Calendar/Template/MainTemplate.php  |    4 +--
+ .../Calendar/Template/OpenCalendarTemplate.php     |    6 ++--
+ .../Calendar/Template/OpenEventTemplate.php        |   12 ++++----
+ src/accessible/Accessible/Core/MessageUtils.php    |   32 ++++++++++++++++++++
+ .../Core/Template/ShowFeedbackTemplate.php         |    8 ++---
+ src/accessible/Accessible/Handler.php              |    2 +-
+ .../Accessible/Login/Template/MainTemplate.php     |   18 ++++++++---
+ src/accessible/Accessible/Mail/ComposeMessage.php  |   11 ++++---
+ src/accessible/Accessible/Mail/OpenMessage.php     |    3 ++
+ .../Mail/Template/ComposeMessageTemplate.php       |   21 +++++++------
+ .../Accessible/Mail/Template/MainTemplate.css      |    2 +-
+ .../Accessible/Mail/Template/MainTemplate.php      |   14 ++++-----
+ .../Mail/Template/OpenFolderTemplate.php           |    6 ++--
+ .../Mail/Template/OpenMessageTemplate.php          |   20 ++++++------
+ 15 files changed, 111 insertions(+), 62 deletions(-)
+
+commit 6ab890fe9b0993fcf0d0cbfbbe23016d6457e61e
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Wed Jun 8 15:55:06 2016 -0300
+
+    Task #16405 - Improve app behavior when offline
+    
+    - Added cordova-plugin-network-information to allow detection of
+      online/offline states in mobile devices
+    - App.post now gives a specific error msg when device is offline
+    - Created App.errorMessage to display error messages in an appropriate
+      format on both desktop and mobile devices
+    - Refactored login screen init steps to make them easier to understand
+    - Created SplashScreen widget
+    - Modified mail and calendar module init steps to display an
+      appropriate message when offline
+    - Made adjustments here and there to handle better errors that happen
+      when the user gets offline
+    
+    Change-Id: I07b24d9b4b5344e040e358ed0c4399e9153725e0
+
+ build/build_cordova.sh                |    2 +
+ src/calendar/Events.js                |   10 +--
+ src/calendar/WidgetEditEvent.js       |    3 +-
+ src/calendar/WidgetMonth.js           |    8 ++
+ src/calendar/calendar.js              |   18 ++--
+ src/common-js/App.js                  |   35 +++++++-
+ src/common-js/Contacts.js             |    2 +-
+ src/common-js/ContactsAutocomplete.js |    2 +-
+ src/common-js/Cordova.js              |   12 ++-
+ src/common-js/Layout.js               |    4 +
+ src/common-js/SplashScreen.css        |   21 +++++
+ src/common-js/SplashScreen.html       |   20 +++++
+ src/common-js/SplashScreen.js         |   93 ++++++++++++++++++++
+ src/index.html                        |    4 -
+ src/login.css                         |    4 -
+ src/login.js                          |  154 +++++++++++++++++++--------------
+ src/mail/WidgetCompose.js             |    9 +-
+ src/mail/WidgetFolders.js             |   12 +--
+ src/mail/WidgetHeadlines.js           |   26 +++---
+ src/mail/WidgetMessages.js            |   12 +--
+ src/mail/mail.js                      |   15 +++-
+ 21 files changed, 331 insertions(+), 135 deletions(-)
+
+commit 09789f8dea65da6b209c64b73cdbb8de9917b403
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Fri Jun 17 09:28:38 2016 -0300
+
+    Task #16867 - Auto. Test: Checks contacts details
+    
+    - Check if personal and corporate catalog have information about
+      contacts.
+    - Created WidgetContactDetails that models the behavior of the
+      contact details screen.
+    - The click method was moved to the GenericPage class so that all
+      subclasses can use the same method.
+    
+    Change-Id: Ib0a72897f4dbafe74d19cade89eff1317322cdcb
+
+ .../Functional/Addressbook/AddressbookPage.php     |   11 +
+ .../Functional/Addressbook/ContactListTest.php     |  221 +++++++++++++++++++-
+ .../Addressbook/WidgetContactDetails.php           |  109 ++++++++++
+ .../Functional/Generic/GenericPage.php             |    8 +
+ .../Functional/Mail/HeadlinesEntry.php             |    8 -
+ tests/functional_tests/data/ContactListTest.ini    |   37 ++++
+ 6 files changed, 384 insertions(+), 10 deletions(-)
+
+commit 5fd0e5d44757466a06cd1e593efccd22734428b3
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Mon Jun 13 11:02:56 2016 -0300
+
+    Task #17244 - Auto. Test: Other modules Access
+    
+    - Checks if appears the first screen of module was displayed when
+      clicks on the icon of screen email
+    
+    Change-Id: I8e8099a16ca27764722d80d8537c6e3816d76eb6
+
+ .../Functional/Addressbook/AddressbookPage.php     |   12 +++++
+ .../Functional/Calendar/CalendarPage.php           |   36 ++++++++++++++
+ .../Functional/Calendar/ListEventTest.php          |   52 ++++++++++++++++++++
+ .../ExpressoLiteTest/Functional/Mail/MailPage.php  |   19 +++++++
+ tests/functional_tests/data/ListEventTest.ini      |    2 +
+ 5 files changed, 121 insertions(+)
+
+commit f826e53c4ffa248dbeb5bc1852ab23b7a70a2952
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Fri Jun 10 14:29:08 2016 -0300
+
+    Task #16864 - Auto. test: List corporate contact
+    
+    - Checks the corporate contact list in contact's module
+    
+    Change-Id: I09e261e6265d43096b6393579c22a4b91dea76b0
+
+ .../Functional/Addressbook/AddressbookPage.php     |   28 +++++++++
+ .../Functional/Addressbook/ContactListTest.php     |   60 ++++++++++++++++++++
+ .../ExpressoLiteTest/Functional/Mail/MailPage.php  |   13 ++++-
+ tests/functional_tests/data/ContactListTest.ini    |    5 ++
+ 4 files changed, 105 insertions(+), 1 deletion(-)
+
+commit 10340d66a9d261dd556165b3cd83db23d41273ab
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Jun 15 14:44:02 2016 -0300
+
+    Task #16798 - Define Samsung Browser compatibility
+    
+    - Browser version detection now based on whitelist instead of blacklist
+    - Samsung Android browser explicitly added
+    - Fixed iOS browser names
+    - Better "unsupported browser" text
+    
+    Change-Id: I225b540988f85445b14db76df46037a8c0034d2b
+
+ src/index.html |   10 ++++++----
+ src/login.css  |    2 +-
+ src/login.js   |   44 ++++++++++++--------------------------------
+ 3 files changed, 19 insertions(+), 37 deletions(-)
+
+commit d66cda5376ecef2d3c0cbc9b22691eaa056836f8
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Tue Jun 14 09:32:41 2016 -0300
+
+    Task #17274 - Allow attendee to confirm participation in events
+    
+    - Change the method 'getRawEventById' at 'SetEventConfirmation.php' to
+      use 'Calendar.getEvent' instead of 'Calendar.searchEvents' method
+      avaliable by a tine jsonRpc callee.
+    - Validates correctly the 'owner' information in 'getCalendarsOf'
+      method at 'Backend\Request\GetCalendars.php' to prevent errors
+      observed in error.log, when this method is invoked with 'shared'
+      parameter.
+    
+    Change-Id: Ia8b4020cb91e20a3ca3276267936e9cf64c422df
+
+ .../ExpressoLite/Backend/Request/GetCalendars.php  |    2 +-
+ .../Backend/Request/SetEventConfirmation.php       |   19 ++++---------------
+ 2 files changed, 5 insertions(+), 16 deletions(-)
+
+commit c3b67620dc386688a847cba08b7cbde61617cbd5
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue Jun 14 11:11:34 2016 -0300
+
+    Task #16217 - Test: Change test target environment
+    
+    - Added .dist extension to conf.php and test_conf.php to enforce users
+      to create their own files directing to a proper testing environment
+    - Added checkings to verify if conf.php and test_conf.php are available
+    - Added a global test data file with data that is shared among all
+      tests. This file currently hold all information regarding test users
+    - Created a feature in MailPage to ensure that a specific e-mail has
+      already arrived. This is specially useful in slower test environments
+    - Fixed some test data entries names
+    - Changed test data to reflect new users based on the default Tine
+      Personas
+    
+    Change-Id: I2d75561576ad2ebaf404a4a0d735b5966299ef82
+
+ .gitignore                                         |    5 +-
+ src/api/bootstrap.php                              |   19 ++-
+ src/common-js/App.js                               |    3 +
+ src/conf.php                                       |   43 ------
+ src/conf.php.dist                                  |   43 ++++++
+ .../Functional/Addressbook/ContactListTest.php     |   52 ++++---
+ .../Functional/Generic/ExpressoLiteTest.php        |   12 ++
+ .../Functional/Generic/SingleLoginTest.php         |   19 ++-
+ .../Functional/Generic/TestData.php                |   30 ++++
+ .../Functional/Generic/TestScenarios.php           |    5 +-
+ .../Functional/Login/LoginTest.php                 |   12 +-
+ .../Functional/Mail/ComposeMailTest.php            |  146 +++++++++-----------
+ .../Functional/Mail/DeleteMailTest.php             |   25 ++--
+ .../ExpressoLiteTest/Functional/Mail/MailPage.php  |   24 ++++
+ .../Functional/Mail/MarkReadUnreadTest.php         |    9 +-
+ .../Functional/Mail/MarkReadUnreadThreadTest.php   |   22 +--
+ .../Functional/Mail/MoveMailSingleLoginTest.php    |    6 +-
+ .../Functional/Mail/MoveMailTest.php               |   11 +-
+ .../Functional/Mail/ReadMailTest.php               |   38 ++---
+ .../Functional/Mail/SaveDraftTest.php              |   21 ++-
+ .../Functional/Mail/SearchTextMessageTest.php      |    8 +-
+ .../Functional/Mail/SendReceiveMailTest.php        |  105 +++++---------
+ .../Functional/Mail/ToggleHighlightTest.php        |    5 +-
+ .../Functional/Mail/UpdateDraftTest.php            |   40 +++---
+ tests/functional_tests/data/ComposeMailTest.ini    |   51 +------
+ tests/functional_tests/data/ContactListTest.ini    |   20 +--
+ tests/functional_tests/data/DeleteMailTest.ini     |   15 --
+ tests/functional_tests/data/LoginTest.ini          |   13 +-
+ tests/functional_tests/data/MarkReadUnreadTest.ini |    7 -
+ .../data/MarkReadUnreadThreadTest.ini              |   10 --
+ .../data/MoveMailSingleLoginTest.ini               |    8 +-
+ tests/functional_tests/data/MoveMailTest.ini       |    9 +-
+ tests/functional_tests/data/ReadMailTest.ini       |   27 +---
+ tests/functional_tests/data/SaveDraftTest.ini      |   10 +-
+ .../data/SearchTextMessageTest.ini                 |    7 +-
+ .../functional_tests/data/SendReceiveMailTest.ini  |   40 +-----
+ .../functional_tests/data/ToggleHighlightTest.ini  |    5 -
+ tests/functional_tests/data/UpdateDraftTest.ini    |   14 --
+ tests/functional_tests/data/global_test_data.ini   |   25 ++++
+ tests/functional_tests/functional_tests.xml        |    5 +-
+ tests/functional_tests/test_bootstrap.php          |    8 +-
+ tests/functional_tests/test_conf.php               |    2 -
+ tests/functional_tests/test_conf.php.dist          |    5 +
+ 43 files changed, 452 insertions(+), 532 deletions(-)
+
+commit 4026418214067cfe6060bb456ae9fb80fde0ced7
+Author: Charles Ivan Wust <charles.wust@serpro.gov.br>
+Date:   Mon Jun 13 14:43:17 2016 -0300
+
+    Revert "Task #16217 - Test: Change test target environment"
+    
+    This reverts commit 8ba76b1a9289310b8a91ea6ab10c30bf249cc77a.
+    
+    Change-Id: I2453555776897b117fd1b4745e3df1b0895fe036
+
+ .gitignore                                         |    5 +-
+ src/api/bootstrap.php                              |   20 +--
+ src/common-js/App.js                               |    3 -
+ src/conf.php                                       |   43 ++++++
+ src/conf.php.dist                                  |   43 ------
+ .../Functional/Generic/ExpressoLiteTest.php        |   12 --
+ .../Functional/Generic/SingleLoginTest.php         |   19 +--
+ .../Functional/Generic/TestData.php                |   23 ---
+ .../Functional/Generic/TestScenarios.php           |    5 +-
+ .../Functional/Login/LoginTest.php                 |   12 +-
+ .../Functional/Mail/ComposeMailTest.php            |  146 +++++++++++---------
+ .../Functional/Mail/DeleteMailTest.php             |   25 ++--
+ .../ExpressoLiteTest/Functional/Mail/MailPage.php  |   23 ---
+ .../Functional/Mail/MarkReadUnreadTest.php         |    9 +-
+ .../Functional/Mail/MarkReadUnreadThreadTest.php   |   22 ++-
+ .../Functional/Mail/MoveMailSingleLoginTest.php    |    6 +-
+ .../Functional/Mail/MoveMailTest.php               |   11 +-
+ .../Functional/Mail/ReadMailTest.php               |   38 +++--
+ .../Functional/Mail/SaveDraftTest.php              |   19 +--
+ .../Functional/Mail/SearchTextMessageTest.php      |    6 +-
+ .../Functional/Mail/SendReceiveMailTest.php        |  105 +++++++++-----
+ .../Functional/Mail/ToggleHighlightTest.php        |    3 +-
+ .../Functional/Mail/UpdateDraftTest.php            |   40 +++---
+ tests/functional_tests/data/ComposeMailTest.ini    |   46 +++++-
+ tests/functional_tests/data/DeleteMailTest.ini     |   15 ++
+ tests/functional_tests/data/LoginTest.ini          |   13 +-
+ tests/functional_tests/data/MarkReadUnreadTest.ini |    7 +
+ .../data/MarkReadUnreadThreadTest.ini              |   10 ++
+ .../data/MoveMailSingleLoginTest.ini               |    8 +-
+ tests/functional_tests/data/MoveMailTest.ini       |    9 +-
+ tests/functional_tests/data/ReadMailTest.ini       |   27 +++-
+ tests/functional_tests/data/SaveDraftTest.ini      |   10 +-
+ .../data/SearchTextMessageTest.ini                 |    7 +-
+ .../functional_tests/data/SendReceiveMailTest.ini  |   40 +++++-
+ .../functional_tests/data/ToggleHighlightTest.ini  |    5 +
+ tests/functional_tests/data/UpdateDraftTest.ini    |   14 ++
+ tests/functional_tests/data/global_test_data.ini   |   25 ----
+ tests/functional_tests/test_bootstrap.php          |    8 +-
+ tests/functional_tests/test_conf.php               |    2 +
+ tests/functional_tests/test_conf.php.dist          |    5 -
+ 40 files changed, 484 insertions(+), 405 deletions(-)
+
+commit 8ba76b1a9289310b8a91ea6ab10c30bf249cc77a
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Mon May 23 14:53:02 2016 -0300
+
+    Task #16217 - Test: Change test target environment
+    
+    - Added .dist extension to conf.php and test_conf.php to enforce users
+      to create their own files directing to a proper testing environment
+    - Added checkings to verify if conf.php and test_conf.php are available
+    - Added a global test data file with data that is shared among all
+      tests. This file currently hold all information regarding test users
+    - Created a feature in MailPage to ensure that a specific e-mail has
+      already arrived. This is specially useful in slower test environments
+    - Fixed some test data entries names
+    - Changed test data to reflect new users based on the default Tine
+      Personas
+    
+    Change-Id: I936ad8945f5ef43322399f08359b5ba989f38af4
+
+ .gitignore                                         |    5 +-
+ src/api/bootstrap.php                              |   20 ++-
+ src/common-js/App.js                               |    3 +
+ src/conf.php                                       |   43 ------
+ src/conf.php.dist                                  |   43 ++++++
+ .../Functional/Generic/ExpressoLiteTest.php        |   12 ++
+ .../Functional/Generic/SingleLoginTest.php         |   19 ++-
+ .../Functional/Generic/TestData.php                |   23 +++
+ .../Functional/Generic/TestScenarios.php           |    5 +-
+ .../Functional/Login/LoginTest.php                 |   12 +-
+ .../Functional/Mail/ComposeMailTest.php            |  146 +++++++++-----------
+ .../Functional/Mail/DeleteMailTest.php             |   25 ++--
+ .../ExpressoLiteTest/Functional/Mail/MailPage.php  |   23 +++
+ .../Functional/Mail/MarkReadUnreadTest.php         |    9 +-
+ .../Functional/Mail/MarkReadUnreadThreadTest.php   |   22 +--
+ .../Functional/Mail/MoveMailSingleLoginTest.php    |    6 +-
+ .../Functional/Mail/MoveMailTest.php               |   11 +-
+ .../Functional/Mail/ReadMailTest.php               |   38 ++---
+ .../Functional/Mail/SaveDraftTest.php              |   19 ++-
+ .../Functional/Mail/SearchTextMessageTest.php      |    6 +-
+ .../Functional/Mail/SendReceiveMailTest.php        |  105 +++++---------
+ .../Functional/Mail/ToggleHighlightTest.php        |    3 +-
+ .../Functional/Mail/UpdateDraftTest.php            |   40 +++---
+ tests/functional_tests/data/ComposeMailTest.ini    |   46 +-----
+ tests/functional_tests/data/DeleteMailTest.ini     |   15 --
+ tests/functional_tests/data/LoginTest.ini          |   13 +-
+ tests/functional_tests/data/MarkReadUnreadTest.ini |    7 -
+ .../data/MarkReadUnreadThreadTest.ini              |   10 --
+ .../data/MoveMailSingleLoginTest.ini               |    8 +-
+ tests/functional_tests/data/MoveMailTest.ini       |    9 +-
+ tests/functional_tests/data/ReadMailTest.ini       |   27 +---
+ tests/functional_tests/data/SaveDraftTest.ini      |   10 +-
+ .../data/SearchTextMessageTest.ini                 |    7 +-
+ .../functional_tests/data/SendReceiveMailTest.ini  |   40 +-----
+ .../functional_tests/data/ToggleHighlightTest.ini  |    5 -
+ tests/functional_tests/data/UpdateDraftTest.ini    |   14 --
+ tests/functional_tests/data/global_test_data.ini   |   25 ++++
+ tests/functional_tests/test_bootstrap.php          |    8 +-
+ tests/functional_tests/test_conf.php               |    2 -
+ tests/functional_tests/test_conf.php.dist          |    5 +
+ 40 files changed, 405 insertions(+), 484 deletions(-)
+
+commit 6e6ba48b760c093ced218f2079d0a7ce4de8651b
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Thu Jun 2 14:00:16 2016 -0300
+
+    Task #16865 - Auto. test: List personal contact
+    
+    - Checks the personal contact list in contact's module
+    
+    Change-Id: Ie65a604fb1faace7521a2f67ec58dfa15fcb212f
+
+ .../Functional/Addressbook/AddressbookPage.php     |   30 ++++++++
+ .../Functional/Addressbook/ContactListItem.php     |    8 +++
+ .../Functional/Addressbook/ContactListTest.php     |   73 ++++++++++++++++++++
+ tests/functional_tests/data/ContactListTest.ini    |   15 ++++
+ 4 files changed, 126 insertions(+)
+
+commit e7e9b222e3d487b5d089567070da312f268f3c8c
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Jun 9 10:52:38 2016 -0300
+
+    Task #16639 - Updated RequireJS from 2.1.15 to 2.2.0
+    
+    - Updated file common-js/require.min.js
+    
+    Change-Id: I34eb50b8803a4eff97361668fc252049aab0a739
+
+ src/common-js/external/require.min.js |   66 ++++++++++++++++-----------------
+ 1 file changed, 33 insertions(+), 33 deletions(-)
+
+commit cf95a09019088e1d6de51108a87186e9f35e538e
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Thu Jun 2 16:11:00 2016 -0300
+
+    Task #17068 - App: Updates for new environments
+    
+    - Added cordova-plugin-whitelist to cordova config.xml. This is is
+      needed to build the app with cordova version > 4.0.0 used in the
+      build environment
+    - Updated backend URL to reflect current production environment
+    
+    Change-Id: I9004635b8e787570fae97af4b025540c8bc89916
+
+ build/cordova/config.xml                           |    1 +
+ .../www/common-js/CordovaConfig.js                 |    2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+commit 9973e33190d67caa2f339351b2855db43785890e
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Jun 1 10:28:24 2016 -0300
+
+    Task #16764 - Remove 'Serpro 50 Anos' commemorative logo
+    
+    - Removed commemorative logo from login screen PNG
+    
+    Change-Id: If1396e07294014f25bf96cc96d5fc6eb1c47afad
+
+ src/img/logo-expressobr-bottom.png |  Bin 13147 -> 11841 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit 3bc3427662ba5f1266e879c0d22297acc477576c
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Tue May 24 15:51:24 2016 -0300
+
+    Task #16940 - Fix accessible calendar module loading
+    
+    - Removing '&' symbol at 'sortAttendeesByName' method and put it
+      only at the method signature.
+    
+    Change-Id: I3de978d0a07c108ab8d8d43372533f4e6a57bec8
+
+ src/accessible/Accessible/Core/EventUtils.php |   10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit cfbd95bd1eba7087dda1f455070f445480918aa2
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Wed May 18 10:17:14 2016 -0300
+
+    Task #16214 - Test: Improve wait mechanism
+    
+    - Renamed waitForAjaxAndAnimationsToComplete to
+      waitForAjaxAndAnimations
+    - Wait now is done in a two phases process to make it a more reliable
+    - Replaced deprecated waitForAjaxToComplete with
+      waitForAjaxAndAnimations
+    - Removed sleeps that were made unnecessary by the replacement of the
+      deprecated waitForAjaxToComplete
+    - Added waits in some tests to make them more reliable
+    - Fixed problems with wait mechanism ($.active was not working
+      correctly and counting of visible throbbers was flawed)
+    - Removed AJAX calls tracing to reduce App.js complexity
+    
+    Change-Id: I99dc7d5c643d69f5fc6bd0d35cd25c6a5939d5ff
+
+ .../ExpressoLite/Backend/Request/GetUserInfo.php   |    3 +-
+ src/common-js/App.js                               |   38 ++--------
+ src/conf.php                                       |   11 ---
+ .../Functional/Generic/ExpressoLiteTest.php        |   80 ++++++++++++--------
+ .../Functional/Generic/GenericPage.php             |    9 +++
+ .../Functional/Generic/SingleLoginTest.php         |    2 +-
+ .../Functional/Generic/TestScenarios.php           |    5 ++
+ .../Functional/Login/LoginPage.php                 |    2 +-
+ .../Functional/Mail/ComposeMailTest.php            |   48 ++++++------
+ .../Functional/Mail/ContactsAutoComplete.php       |    2 +-
+ .../Functional/Mail/DeleteMailTest.php             |   20 ++---
+ .../ExpressoLiteTest/Functional/Mail/MailPage.php  |   17 ++---
+ .../Functional/Mail/MarkReadUnreadTest.php         |   16 ++--
+ .../Functional/Mail/MarkReadUnreadThreadTest.php   |    8 +-
+ .../Functional/Mail/MessageUnit.php                |   12 +--
+ .../Functional/Mail/MoveMailSingleLoginTest.php    |   14 ++--
+ .../Functional/Mail/MoveMailTest.php               |    6 +-
+ .../Functional/Mail/ReadMailTest.php               |    4 +-
+ .../Functional/Mail/SaveDraftTest.php              |    4 +-
+ .../Functional/Mail/SearchTextMessageTest.php      |   22 ++----
+ .../Functional/Mail/SendReceiveMailTest.php        |   10 +--
+ .../Functional/Mail/ToggleHighlightTest.php        |    6 +-
+ .../Functional/Mail/UpdateDraftTest.php            |   16 ++--
+ .../Functional/Mail/WidgetCompose.php              |    6 +-
+ .../Functional/Mail/WidgetMessages.php             |    8 +-
+ 25 files changed, 179 insertions(+), 190 deletions(-)
+
+commit 1763c853d047364b66ea2d489c217538aca53589
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Fri May 6 15:08:36 2016 -0300
+
+    Task #16296 - Auto. test: Save new recipient
+    
+    Checks if the new recipient was saved in personal catalog
+    
+    Change-Id: I69ae691c1c1cdf426cc7f09f79b30ad32b078874
+
+ .../Functional/Addressbook/AddressbookPage.php     |   93 ++++++++++++++++++++
+ .../Functional/Addressbook/ContactListItem.php     |   41 +++++++++
+ .../Functional/Generic/ExpressoLiteTest.php        |    2 +-
+ .../ExpressoLiteTest/Functional/Mail/MailPage.php  |   10 +++
+ .../Functional/Mail/SendReceiveMailTest.php        |   44 +++++++++
+ .../functional_tests/data/SendReceiveMailTest.ini  |   10 +++
+ 6 files changed, 199 insertions(+), 1 deletion(-)
+
+commit e67b4a67150f90a99c30cf2e8cc278fc3262c7b2
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Fri May 13 15:27:37 2016 -0300
+
+    Task #16297 - Auto. test: Send email - cc and bcc
+    
+    - Checks the send the e-mail with cc and bcc option
+    
+    Change-Id: Idb3630c2e89b0bd2c74eb951f7010163b6ab1c79
+
+ .../Functional/Mail/ComposeMailTest.php            |  118 ++++++++++++++++++++
+ .../Functional/Mail/MessageUnit.php                |   28 +++++
+ .../Functional/Mail/WidgetCompose.php              |   16 +++
+ tests/functional_tests/data/ComposeMailTest.ini    |   14 +++
+ 4 files changed, 176 insertions(+)
+
+commit 0bebd74539ea0c0c8ef92cb9b714110aeb7e94f5
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Mon May 2 14:47:34 2016 -0300
+
+    Task #14843 - Test: Send using contacts catalog
+    
+    - Checks if the e-mail composition screen is working correctly when
+      using the contact search provided by the autocomplete feature
+    
+    Change-Id: I61e9f313d0b3efd358550a336142cf92be1cbc70
+
+ .../Functional/Mail/ComposeMailTest.php            |   66 ++++++++++++-
+ .../Functional/Mail/ContactsAutoComplete.php       |  102 ++++++++++++++++++++
+ .../ExpressoLiteTest/Functional/Mail/MailPage.php  |   13 +++
+ tests/functional_tests/data/ComposeMailTest.ini    |    8 ++
+ 4 files changed, 187 insertions(+), 2 deletions(-)
+
+commit 2b4c43f92ceb50fbb1981dd29c4a867e297085ff
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Wed Apr 27 15:00:41 2016 -0300
+
+    Task #16294 - Auto. test: Forward and reply email
+    
+    - Checks the reply and forward e-mail feature.
+    
+    Change-Id: I26ac9a95fe9dcac11a4ca765ebdcc005614c9762
+
+ .../Functional/Mail/SendReceiveMailTest.php        |   75 ++++++++++++++++++++
+ .../functional_tests/data/SendReceiveMailTest.ini  |   23 +++++-
+ 2 files changed, 95 insertions(+), 3 deletions(-)
+
+commit d37845874d0a78f4a863ebd287407bc26fd37a02
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Wed May 11 14:38:59 2016 -0300
+
+    Task #16391 - Empty trash folder on accessible
+    
+    - Now, when the current folder being the trash the user will be allow
+      to 'clean' the trash.
+    - There will be a link, on menu section, with the text 'clean the trash'
+      to delete all email messages from the trash.
+    - After the user do this action there will be a prompt of confirmation
+      asking for 'ok' or 'cancel'.
+    
+    Change-Id: I5725dbf433ff43eacb350f3f7a05a52d5f223b94
+
+ src/accessible/Accessible/Mail/EmptyTrash.php      |   58 ++++++++++++++
+ .../Accessible/Mail/EmptyTrashConfirm.php          |   80 ++++++++++++++++++++
+ src/accessible/Accessible/Mail/Main.php            |   22 +++++-
+ .../Accessible/Mail/ProcessMessageAction.php       |    5 ++
+ .../Accessible/Mail/Template/MainTemplate.php      |    3 +
+ .../ExpressoLite/Backend/Request/EmptyTrash.php    |   37 +++++++++
+ 6 files changed, 203 insertions(+), 2 deletions(-)
+
+commit 9665f8a83e2350ae807f3d1c148b402f97b252fc
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Wed Apr 27 14:55:15 2016 -0300
+
+    Task #16387 - Fix intermitent errors during tests
+    
+    - Since focusing on a contenteditable div was presenting an erratic
+      behavior, method typeMessageBodyBeforeSignature was changed to make
+      it use JS to fill message body content
+    - Aditional waits were added in some tests
+    - Timeouts during waits now provide more information
+    - Added support to trace pending AJAX calls in Lite in order to
+      provide more information when a test fails
+    - Increased implicit wait time to avoid errors in slower machines
+    
+    Change-Id: I07e515105890064a2f1e9eb265918098f72e56ac
+
+ .../ExpressoLite/Backend/Request/GetUserInfo.php   |    3 +-
+ src/common-js/App.js                               |   65 +++++++++++++++-----
+ src/conf.php                                       |   10 +++
+ .../Functional/Generic/ExpressoLiteTest.php        |   41 +++++++++---
+ .../ExpressoLiteTest/Functional/Mail/MailPage.php  |    1 +
+ .../Functional/Mail/WidgetCompose.php              |    7 ++-
+ 6 files changed, 100 insertions(+), 27 deletions(-)
+
+commit 5719337ec52710022f48679618c5b3bb85def6ad
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Fri May 6 17:11:14 2016 -0300
+
+    Task #16748 - Delete multiples messages on accessible
+    
+    - Now the user can select one or more messages from the headlines view
+      to be deleted.
+    - Before the action is completed , a prompt is displayed, asking if the
+      action should be completed or not.
+    
+    Change-Id: I7be717bd0f1038befb6a75ba40b12a3774762add
+
+ src/accessible/Accessible/Mail/DeleteMessage.php   |   50 ++++++++++++++++++--
+ src/accessible/Accessible/Mail/Main.php            |    3 +-
+ src/accessible/Accessible/Mail/OpenMessage.php     |    2 +-
+ .../Accessible/Mail/ProcessMessageAction.php       |   42 ++++++++++------
+ .../Accessible/Mail/Template/MainTemplate.php      |    1 +
+ 5 files changed, 77 insertions(+), 21 deletions(-)
+
+commit 34de1d23516177a2be6256bfcfdae85918c1cf04
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Thu May 5 15:58:21 2016 -0300
+
+    Task #16394 - Better description to aria-hidden links
+    
+    - Email headlines are exhibited in HTML 5 table and all date, informing
+      about headlines are separated in columns, like 'message number',
+      'subject', 'sender', 'received date'; When using a screen reader this
+      navigation through that information fields can be very slow.
+    - Add 'aria-hidden' html element attribute in the columns of the
+      headline's table to avoid screen readers reading some specific
+      columns. Only 'subject' column, that shows the link for openning
+      a headline message, and 'mark' will not have the 'aria-hidden'
+      attribute.
+    - Now the link to open a particular detailed headline view, will
+      contain prepared text, into a <span> html element not physically
+      visible, with unified headlines date. In this way, the navigation
+      through screen readers, using this 'hidden' links, greatly improve
+      the user's browsing speed.
+    
+    Change-Id: Ie47fa938f1d1b72c3fb1b6195c27b3fe4b33447f
+
+ .../Accessible/Mail/Template/MainTemplate.php      |   23 +++++++++++++-------
+ 1 file changed, 15 insertions(+), 8 deletions(-)
+
+commit 3ebc3a0de97119a42c07e20cadf41a2213d38d1e
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Mon May 9 11:03:56 2016 -0300
+
+    Task #16390 - Select other calendars on accessible
+    
+    - From the calendar main view there is a link 'select calendar[q]' that
+      calls other screen 'select calendars' that display all calendars
+      avaliables to be viewed.
+    - Now it is possible for the user to select other calendars,personal or
+      shared, to see the events they are participating or have access to
+      view.
+    - It was created a new class 'OpenCalendar.php' and common templates
+      files 'Template/OpenCalendarTemplate.php' and
+      'Template/OpenCalendarTemplate.css'
+    
+    Change-Id: I6ab1334dbb323b1ed63059ec1c8ee38d92ab9d7e
+
+ src/accessible/Accessible/Calendar/Main.php        |    7 +-
+ .../Accessible/Calendar/OpenCalendar.php           |   67 ++++++++++++++++++++
+ .../Accessible/Calendar/Template/MainTemplate.php  |    1 +
+ .../Calendar/Template/OpenCalendarTemplate.css     |   11 ++++
+ .../Calendar/Template/OpenCalendarTemplate.php     |   56 ++++++++++++++++
+ 5 files changed, 141 insertions(+), 1 deletion(-)
+
+commit aefa366c72aec4cae335224eae3de6c7ff0f5611
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Mon May 9 14:06:31 2016 -0300
+
+    Task #14463 - Allow users to confirm calendar events
+    
+    - Now it's possible to confirm participation in the event, as
+      'was accept', 'try to participate', 'responding after' and
+      'refuse participation'.
+    - All these actions can be done from the event detailed view.
+    
+    Change-Id: I4ec7b94ecb7c3c319db3be3356b693349dfcba90
+
+ .../Accessible/Calendar/EventConfirmation.php      |   58 +++++++++++++
+ src/accessible/Accessible/Calendar/OpenEvent.php   |   46 ++++++++++-
+ .../Calendar/Template/OpenEventTemplate.css        |    2 +
+ .../Calendar/Template/OpenEventTemplate.php        |   23 ++++++
+ src/accessible/Accessible/Core/EventUtils.php      |   87 ++++++++++++++++----
+ 5 files changed, 199 insertions(+), 17 deletions(-)
+
+commit 6b3d5ee40b23073eba2b3623ae925397e706b23e
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Thu May 5 15:12:45 2016 -0300
+
+    Task #16749 - Alter position of delete message action
+    
+    - Delete message action now is displayed, at the messsage screen
+      visualization, in the end of message action list.
+    
+    Change-Id: I0d2523f98e739704bcc20b2cca3f7f3120fad7b3
+
+ .../Mail/Template/OpenMessageTemplate.php          |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a2112be1121b30838d93fa7dbd921774789ae3a2
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Wed Apr 20 12:59:42 2016 -0300
+
+    Task #14461 - View information about a particular event
+    
+    - Now users can visualize details of a particular event from the
+      main screen of the accessible calendar module.
+    - Each event of the event listing of calendar main screen has a link
+      to the 'event exhibition' screen template.
+    
+    Change-Id: I8c4bebe8a2a78c5acb20e66050f14e53014d0284
+
+ src/accessible/Accessible/Calendar/Main.php        |   33 +++-
+ src/accessible/Accessible/Calendar/OpenEvent.php   |  188 ++++++++++++++++++++
+ .../Accessible/Calendar/Template/MainTemplate.php  |    4 +-
+ .../Calendar/Template/OpenEventTemplate.css        |   16 ++
+ .../Calendar/Template/OpenEventTemplate.php        |   93 ++++++++++
+ src/accessible/Accessible/Core/EventUtils.php      |   94 ++++++++++
+ 6 files changed, 419 insertions(+), 9 deletions(-)
+
+commit 1400fc09695957fd92059d8e00dd3e5c5de0dd67
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Wed Apr 20 15:26:38 2016 -0300
+
+    Task #16293 - Auto. test: Important draft flag
+    
+    - Checks if the e-mail was created, saved in draft folder and
+      turn on the important flag
+    
+    Change-Id: I000680de7c0436c0118a1fdb439c3c138e0f634d
+
+ .../Functional/Mail/SaveDraftTest.php              |   48 ++++++++++++++++++++
+ .../Functional/Mail/WidgetCompose.php              |    9 ++++
+ tests/functional_tests/data/SaveDraftTest.ini      |   10 +++-
+ 3 files changed, 65 insertions(+), 2 deletions(-)
+
+commit ededebe7cc834654a696b7449e0cc4122a994a6f
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon May 2 15:52:57 2016 -0300
+
+    Task #16230 - Incorporate Velocity.js library
+    
+    - Added velocity.min.js file
+    - External JS sources moved to external subdirectory within common-js
+    - jQuery calls to animate, slide and fade replaced by velocity calls
+    - Created jQuery.js shim to load jQuery and Velocity libs, instead of
+      direct loading of jquery lib
+    - Fixed module transitions on Layout.js with new Velocity calls
+    
+    Change-Id: Ibdfdff3e9070681b7884a481ec9f056730b73d49
+
+ src/addressbook/WidgetContactDetails.js |    7 +--
+ src/addressbook/WidgetContactList.js    |    7 +--
+ src/addressbook/WidgetLetterIndex.js    |    3 +-
+ src/addressbook/addressbook.js          |    8 ++--
+ src/addressbook/index.html              |    2 +-
+ src/calendar/Events.js                  |    3 +-
+ src/calendar/WidgetChooseDate.js        |    9 ++--
+ src/calendar/WidgetEditEvent.js         |    3 +-
+ src/calendar/WidgetEvents.js            |   21 +++++---
+ src/calendar/WidgetMonth.js             |   10 ++--
+ src/calendar/WidgetWeek.js              |   10 ++--
+ src/calendar/calendar.js                |    8 ++--
+ src/calendar/index.html                 |    2 +-
+ src/common-js/AccountManager.js         |    3 +-
+ src/common-js/App.js                    |    3 +-
+ src/common-js/Contacts.js               |    3 +-
+ src/common-js/ContactsAutocomplete.js   |    3 +-
+ src/common-js/ContextMenu.js            |   19 +++++---
+ src/common-js/Cordova.js                |    3 +-
+ src/common-js/Dialog.js                 |    9 ++--
+ src/common-js/Layout.js                 |   41 ++++++++++++----
+ src/common-js/SimpleMenu.js             |    3 +-
+ src/common-js/TextBadges.js             |   23 +++++----
+ src/common-js/UploadFile.js             |    5 +-
+ src/common-js/external/jquery.min.js    |    4 ++
+ src/common-js/external/require.min.js   |   36 ++++++++++++++
+ src/common-js/external/velocity.min.js  |    4 ++
+ src/common-js/jQuery.js                 |   23 +++++++++
+ src/common-js/jquery.min.js             |    4 --
+ src/common-js/require.min.js            |   36 --------------
+ src/debugger/WidgetComponentTest.js     |    3 +-
+ src/debugger/WidgetTineCookies.js       |    3 +-
+ src/debugger/debugger.js                |    8 ++--
+ src/debugger/index.html                 |    2 +-
+ src/index.html                          |    2 +-
+ src/login.js                            |   38 +++++++--------
+ src/mail/WidgetAttacher.js              |    3 +-
+ src/mail/WidgetCompose.js               |    3 +-
+ src/mail/WidgetFolders.js               |    3 +-
+ src/mail/WidgetHeadlines.js             |   33 +++++++------
+ src/mail/WidgetMessages.js              |   80 +++++++++++++++++--------------
+ src/mail/index.html                     |    2 +-
+ src/mail/mail.js                        |    8 ++--
+ 43 files changed, 306 insertions(+), 197 deletions(-)
+
+commit 87b866fb712eddfe1d577ea9bc10bdfdfa5a503c
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Apr 29 11:30:18 2016 -0300
+
+    Task #16699 - Fix null description on calendar events
+    
+    - WidgetEvents now checks null description and location fields and adds
+      a replacement text if needed
+    - Created replacement text template and respective CSS entry
+    
+    Change-Id: Iaccb875b94cc19befb326cc9f96815494f9334db
+
+ src/calendar/WidgetEvents.css  |    3 ++-
+ src/calendar/WidgetEvents.html |    4 +++-
+ src/calendar/WidgetEvents.js   |   15 +++++++++++++--
+ 3 files changed, 18 insertions(+), 4 deletions(-)
+
+commit b94114b53e0eb87b1e5094ac6201ba89ec75708c
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Apr 26 11:05:42 2016 -0300
+
+    Task #16226 - Updated jQuery from 2.2.1 to 2.2.3
+    
+    - Updated file common-js/jquery.min.js
+    
+    Change-Id: I262eaa22a8a8fb5220b2c9d01d7b021222ca7940
+
+ src/common-js/jquery.min.js |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 2751f8d198b6dc2ec45b1e33c2925da464d02679
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Apr 29 14:54:12 2016 -0300
+
+    Task #15221 - Standardize App method names
+    
+    - App class method names changed to system coding standards
+    - Updated calls to these methods
+    
+    Change-Id: Id6db28ddd8370f0a7db804907c56b1e821b65300
+
+ src/addressbook/WidgetContactDetails.js |    6 ++---
+ src/addressbook/WidgetContactList.js    |    8 +++----
+ src/addressbook/WidgetLetterIndex.js    |    4 ++--
+ src/addressbook/addressbook.js          |    8 +++----
+ src/calendar/Events.js                  |    8 +++----
+ src/calendar/WidgetChooseDate.js        |    6 ++---
+ src/calendar/WidgetEditEvent.js         |    6 ++---
+ src/calendar/WidgetEvents.js            |    4 ++--
+ src/calendar/WidgetMonth.js             |    8 +++----
+ src/calendar/WidgetWeek.js              |    4 ++--
+ src/calendar/calendar.js                |    6 ++---
+ src/common-js/App.js                    |   40 +++++++++++++++----------------
+ src/common-js/Contacts.js               |    4 ++--
+ src/common-js/ContactsAutocomplete.js   |   12 +++++-----
+ src/common-js/ContextMenu.js            |    8 +++----
+ src/common-js/Cordova.js                |    4 ++--
+ src/common-js/Dialog.js                 |   12 +++++-----
+ src/common-js/Layout.js                 |   16 ++++++-------
+ src/common-js/SimpleMenu.js             |    2 +-
+ src/common-js/TextBadges.js             |    6 ++---
+ src/debugger/WidgetComponentTest.js     |    7 +++---
+ src/debugger/WidgetTineCookies.js       |    9 ++++---
+ src/debugger/debugger.js                |    4 ++--
+ src/login.js                            |   30 +++++++++++------------
+ src/mail/WidgetAttacher.js              |    8 +++----
+ src/mail/WidgetCompose.js               |   14 +++++------
+ src/mail/WidgetFolders.js               |   10 ++++----
+ src/mail/WidgetHeadlines.js             |   24 +++++++++----------
+ src/mail/WidgetMessages.js              |   22 ++++++++---------
+ src/mail/mail.js                        |   12 +++++-----
+ 30 files changed, 155 insertions(+), 157 deletions(-)
+
+commit 6239723875aa53d45c47a657bdfd2ce76cc40026
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Apr 15 14:17:54 2016 -0300
+
+    Task #14146 - Add date/time picker to calendar
+    
+    - New WidgetChooseDate, date picker widget
+    - Accomodations on WidgetEditEvent to use new widget
+    - Textbox replaced by hour/minute selectboxes
+    - New DateCalc methods to build strings from datetime objects,
+      including Tine standard formatting
+    
+    Change-Id: I5948c6106b806f2dd5deb40205751d297f0aea87
+
+ src/calendar/DateCalc.js           |   14 +++
+ src/calendar/WidgetChooseDate.css  |   40 ++++++++
+ src/calendar/WidgetChooseDate.html |   23 +++++
+ src/calendar/WidgetChooseDate.js   |  199 ++++++++++++++++++++++++++++++++++++
+ src/calendar/WidgetEditEvent.css   |   22 ++--
+ src/calendar/WidgetEditEvent.html  |   28 ++---
+ src/calendar/WidgetEditEvent.js    |  115 +++++++++++----------
+ 7 files changed, 359 insertions(+), 82 deletions(-)
+
+commit 7fc1f67ce206adf8a388dce1da32c97de8ea9ed4
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Tue Apr 19 10:47:49 2016 -0300
+
+    Task #14462 - View events of the previous month and next
+    
+    - Now the user can view the events of the previous and next month,
+      navigating through the links available on the 'navigation by month'
+      section.
+    - When the displayed month is not the same as the current date,
+      section of 'today's events' will not be displayed.
+    
+    Change-Id: I251c1c9d5c2eec9d3037d10f8e1b398733b83c27
+
+ src/accessible/Accessible/Calendar/Main.php        |   40 ++++++++++++++++-
+ .../Accessible/Calendar/Template/MainTemplate.css  |    2 +
+ .../Accessible/Calendar/Template/MainTemplate.php  |   22 ++++++++-
+ src/accessible/Accessible/Core/EventUtils.php      |   47 ++++++++++++++++++++
+ 4 files changed, 109 insertions(+), 2 deletions(-)
+
+commit 2cee77ac1f7fda7e6e59ec5ca198d6641398af3c
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Apr 18 10:42:08 2016 -0300
+
+    Task #16522 - Show calendar module to user
+    
+    - Uncommented calendar link at Layout.html
+    - Warning message for calendar search, to avoid unresponsive behavior
+    - Uncommented calendar link on accessible module
+    
+    Change-Id: I9ea587448ef07fa123fcd0f4175bf37ac10cccad
+
+ .../Accessible/Mail/Template/MainTemplate.php      |    2 +-
+ src/calendar/calendar.js                           |    2 +-
+ src/common-js/Layout.html                          |    2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+commit aa13c2a273d7011feeae70e29cc7944d7495a228
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Fri Apr 8 17:42:01 2016 -0300
+
+    Task #14845 - Auto test: update e-mail draft
+    
+    - Create and edit e-mail in draft folder
+    
+    Change-Id: I388546336ffabee230282cb2ba04179d3c3d82a0
+
+ .../Functional/Generic/TestScenarios.php           |   32 ++++
+ .../Functional/Mail/UpdateDraftTest.php            |  197 ++++++++++++++++++++
+ tests/functional_tests/data/UpdateDraftTest.ini    |   25 +++
+ 3 files changed, 254 insertions(+)
+
+commit 7662046454c97dcf5803ddccfb675b08b201ddd2
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Fri Apr 8 18:08:21 2016 -0300
+
+    Task #15918 - Auto. test: Change methods name
+    
+    - Changes name of methods to match TestLink
+    - Adjusted SingleLoginPage to make tests run in sequence more smoothly
+    
+    Change-Id: Icf2799dd10092bc17403317eabb81abc27d450e8
+
+ .../Functional/Generic/SingleLoginTest.php         |   12 +++++++++-
+ .../Functional/Login/LoginTest.php                 |   25 +++++++++++++++-----
+ .../Functional/Mail/MarkReadUnreadTest.php         |    7 +++---
+ .../Functional/Mail/MarkReadUnreadThreadTest.php   |    4 ++--
+ .../Functional/Mail/ReadMailTest.php               |    6 ++---
+ .../Functional/Mail/SaveDraftTest.php              |    6 ++---
+ .../Functional/Mail/SendReceiveMailTest.php        |    5 ++--
+ .../Functional/Mail/ToggleHighlightTest.php        |    2 +-
+ tests/functional_tests/data/LoginTest.ini          |   10 ++++----
+ tests/functional_tests/data/MarkReadUnreadTest.ini |    6 ++---
+ .../data/MarkReadUnreadThreadTest.ini              |    4 ++--
+ tests/functional_tests/data/ReadMailTest.ini       |    6 ++---
+ tests/functional_tests/data/SaveDraftTest.ini      |    2 +-
+ .../functional_tests/data/SendReceiveMailTest.ini  |    2 +-
+ .../functional_tests/data/ToggleHighlightTest.ini  |    2 +-
+ 15 files changed, 61 insertions(+), 38 deletions(-)
+
+commit 7abf60f8fba319d9a53fabd1ce97ad485cc73a93
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Tue Mar 29 15:37:44 2016 -0300
+
+    Task #14846 - Auto. test: Search text
+    
+    - Checks if the search text was found in some messages
+    
+    Change-Id: Id1c4548db01358296c83bccb81fd914f2b3e54d7
+
+ .../ExpressoLiteTest/Functional/Mail/MailPage.php  |   42 ++++++++-
+ .../Functional/Mail/SearchTextMessageTest.php      |   90 ++++++++++++++++++++
+ .../data/SearchTextMessageTest.ini                 |   14 +++
+ 3 files changed, 144 insertions(+), 2 deletions(-)
+
+commit 32d78aada4616a61236569097e0cca97f32206c4
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Fri Dec 18 11:57:19 2015 -0200
+
+    Task #14460 - Create accessible calendar module
+    
+    - Creates a link to event calendar module at 'Mail/Main.php' and
+      'Mail/MainTemplate.php'.
+    - Creates a class 'Core/EventUtils.php' to manipulate events routines.
+    - Creates a folder 'Calendar' to keep the events calendar classes and
+      a folder 'Calendar/Templates' to all calendar template files.
+    - Create a class 'Calendar/Main.php' responsible to get all events
+      elements and information.
+    - Creates a class 'Calendar/Templates/MainTemplate.php' to display
+      events calendar main screen.
+    - Now users can view their scheduled events of the current day and
+      month using the calendar module, accessed through e-mail module.
+    
+    Change-Id: I5a21b45a5f7cf6f51f524beb857a24e515833a0f
+
+ src/accessible/Accessible/Calendar/Main.php        |  208 +++++++++++++++++
+ .../Accessible/Calendar/Template/MainTemplate.css  |   29 +++
+ .../Accessible/Calendar/Template/MainTemplate.php  |  155 +++++++++++++
+ src/accessible/Accessible/Core/DateUtils.php       |  243 ++++++++++++++++++--
+ src/accessible/Accessible/Core/EventUtils.php      |  200 ++++++++++++++++
+ src/accessible/Accessible/Mail/Main.php            |    3 +-
+ .../Accessible/Mail/Template/MainTemplate.php      |    5 +-
+ .../ExpressoLite/Backend/Request/SearchEvents.php  |    5 +-
+ src/api/ExpressoLite/TineTunnel/TineSession.php    |    1 +
+ 9 files changed, 825 insertions(+), 24 deletions(-)
+
+commit b79c7de97b2edf996667ab14d616dddb1c01dc40
+Author: Charles Ivan Wust <charles.wust@serpro.gov.br>
+Date:   Fri Apr 8 10:03:50 2016 -0300
+
+    Revert "Task #14845 - Auto test: update e-mail draft"
+    
+    This reverts commit 998baab63f0c28efee75c537f6892c798dc29c43.
+    
+    Change-Id: I5f7abe6ce1799128eb6b781fba91e3f9c30c756e
+
+ .../Functional/Generic/TestScenarios.php           |   32 ----
+ .../Functional/Mail/UpdateDraftTest.php            |  196 --------------------
+ .../Functional/Mail/WidgetCompose.php              |    8 -
+ tests/functional_tests/data/UpdateDraftTest.ini    |   25 ---
+ 4 files changed, 261 deletions(-)
+
+commit 9c55509c23de34fdf2871f478d5378620ad8f57b
+Author: Charles Ivan Wust <charles.wust@serpro.gov.br>
+Date:   Fri Apr 8 11:28:30 2016 -0300
+
+    Revert "Task #15918 - Auto. test: Change methods name"
+    
+    This reverts commit ad4e010c30b2d66ecaebb43c499d34b3f11e328d.
+    
+    Change-Id: I07b16f0a1fa1013c4018d552a39413c92b1bfc63
+
+ .../Functional/Login/LoginTest.php                 |   26 +++++---------------
+ .../Functional/Mail/MarkReadUnreadTest.php         |    6 ++---
+ .../Functional/Mail/MarkReadUnreadThreadTest.php   |    4 +--
+ .../Functional/Mail/ReadMailTest.php               |    6 ++---
+ .../Functional/Mail/SaveDraftTest.php              |    6 ++---
+ .../Functional/Mail/SendReceiveMailTest.php        |    6 +----
+ .../Functional/Mail/ToggleHighlightTest.php        |    2 +-
+ 7 files changed, 19 insertions(+), 37 deletions(-)
+
+commit ad4e010c30b2d66ecaebb43c499d34b3f11e328d
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Tue Apr 5 10:50:50 2016 -0300
+
+    Task #15918 - Auto. test: Change methods name
+    
+    - Changes name of methods to match with TestLink
+    
+    Change-Id: Icb803b31eb348ada396dc37b8257d6030fe11755
+
+ .../Functional/Login/LoginTest.php                 |   26 +++++++++++++++-----
+ .../Functional/Mail/MarkReadUnreadTest.php         |    6 ++---
+ .../Functional/Mail/MarkReadUnreadThreadTest.php   |    4 +--
+ .../Functional/Mail/ReadMailTest.php               |    6 ++---
+ .../Functional/Mail/SaveDraftTest.php              |    6 ++---
+ .../Functional/Mail/SendReceiveMailTest.php        |    6 ++++-
+ .../Functional/Mail/ToggleHighlightTest.php        |    2 +-
+ 7 files changed, 37 insertions(+), 19 deletions(-)
+
+commit 998baab63f0c28efee75c537f6892c798dc29c43
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Fri Mar 18 14:18:35 2016 -0300
+
+    Task #14845 - Auto test: update e-mail draft
+    
+    - Update e-mail in draft folder
+    
+    Change-Id: Iab54875f33bd27aa206ac8b537874acef73d9581
+
+ .../Functional/Generic/TestScenarios.php           |   32 ++++
+ .../Functional/Mail/UpdateDraftTest.php            |  196 ++++++++++++++++++++
+ .../Functional/Mail/WidgetCompose.php              |    8 +
+ tests/functional_tests/data/UpdateDraftTest.ini    |   25 +++
+ 4 files changed, 261 insertions(+)
+
+commit 2d5082a056f045dc7db6f1c7bc6347afce784899
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Thu Mar 17 11:34:13 2016 -0300
+
+    Task #14842 - Auto. test: E-mail save draft
+    
+    - Checks if the message is saved in the Draft folder.
+    - Changed clickSendMailButton function so it doesn't wait for Ajax
+      anymore. This is necessary in cases that result in an alert.
+    
+    Change-Id: I885c16a1ba40d45aae93f53fc42064209e90c122
+
+ .../Functional/Mail/ComposeMailTest.php            |   27 ++++---
+ .../Functional/Mail/DeleteMailTest.php             |    8 +-
+ .../Functional/Mail/SaveDraftTest.php              |   81 ++++++++++++++++++++
+ .../Functional/Mail/SendReceiveMailTest.php        |    2 +
+ .../Functional/Mail/WidgetCompose.php              |   10 +++
+ tests/functional_tests/data/ComposeMailTest.ini    |   24 +++---
+ tests/functional_tests/data/DeleteMailTest.ini     |   18 ++---
+ tests/functional_tests/data/SaveDraftTest.ini      |    9 +++
+ 8 files changed, 143 insertions(+), 36 deletions(-)
+
+commit 7722e09fe50c7ffbe620bc164901c6ec4cabd427
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Fri Mar 18 14:33:10 2016 -0300
+
+    Task #14839 - Auto. test: E-mail move to folder
+    
+    - Checks if the message was moved to Folder "Modelo"
+    
+    Change-Id: I14eb7a2de241f197e06d99205dc7a9d494b7bffc
+
+ .../Functional/Mail/MoveMailSingleLoginTest.php    |  121 ++++++++++++++++++++
+ .../Functional/Mail/MoveMailTest.php               |   81 +++++++++++++
+ .../data/MoveMailSingleLoginTest.ini               |   11 ++
+ tests/functional_tests/data/MoveMailTest.ini       |   10 ++
+ 4 files changed, 223 insertions(+)
+
+commit dcd01519880a17b552daa1e900f3f2395275268f
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Wed Mar 16 10:33:47 2016 -0300
+
+    Task #14840 - Auto. test: E-mail mark read/unread
+    
+    - Test case that checks if the message and conversation was marked
+      as read or unread
+    
+    Change-Id: Iaa6c09acb5f517af29d349236fc8f5f0d1cbcddb
+
+ .../Functional/Generic/ExpressoLiteTest.php        |    2 +-
+ .../Functional/Mail/MarkReadUnreadTest.php         |  155 ++++++++++++++++++++
+ .../Functional/Mail/MarkReadUnreadThreadTest.php   |  127 ++++++++++++++++
+ .../Functional/Mail/WidgetMessages.php             |    5 +
+ tests/functional_tests/data/MarkReadUnreadTest.ini |   15 ++
+ .../data/MarkReadUnreadThreadTest.ini              |   17 +++
+ 6 files changed, 320 insertions(+), 1 deletion(-)
+
+commit 3c639d527c852b6392b831308be43c1a92fc9ee0
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Wed Mar 16 11:41:12 2016 -0300
+
+    Task #14841 - Auto. test: E-mail toggle highlight
+    
+    - checks if the message changes its highlight status
+    
+    Change-Id: I1d65d77396b937f70467fccad39d097c186008cf
+
+ .../Functional/Mail/ToggleHighlightTest.php        |   82 ++++++++++++++++++++
+ .../functional_tests/data/ToggleHighlightTest.ini  |    7 ++
+ 2 files changed, 89 insertions(+)
+
+commit 9e2849161c9e78f5e32f3a8b4367ff191fe24e3a
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Mon Mar 14 12:55:18 2016 -0300
+
+    Task #14838 - Auto. test: E-mail reading
+    
+    - Test case that checks the behavior sending and receiving e-mails
+    
+    Change-Id: I4bab308acd55ba9bc3e94b8a9740b58bffe2a357
+
+ .../Functional/Mail/ReadMailTest.php               |  183 ++++++++++++++++++++
+ tests/functional_tests/data/ReadMailTest.ini       |   39 +++++
+ 2 files changed, 222 insertions(+)
+
+commit e3069f6a70faa116125ba193750cf0942462f913
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Fri Mar 11 12:03:17 2016 -0300
+
+    Task #14837 - Auto. test: E-mail deletion
+    
+    - Added tests to check e-mail deletion
+    
+    Change-Id: I782245e2ed31ece8438322e03e321b3c504afd22
+
+ .../Functional/Generic/ExpressoLiteTest.php        |   30 +++-
+ .../Functional/Generic/GenericPage.php             |   12 ++
+ .../Functional/Generic/SingleLoginTest.php         |    9 +-
+ .../Functional/Generic/TestScenarios.php           |   89 ++++++++++
+ .../Functional/Mail/ComposeMailTest.php            |   51 ++----
+ .../Functional/Mail/DeleteMailTest.php             |  177 ++++++++++++++++++++
+ .../Functional/Mail/HeadlinesEntry.php             |   56 ++++++-
+ .../ExpressoLiteTest/Functional/Mail/MailPage.php  |   86 ++++++++++
+ .../Functional/Mail/MessageUnit.php                |   90 +++++++++-
+ .../Functional/Mail/WidgetCompose.php              |    2 +-
+ .../Functional/Mail/WidgetMessages.php             |   73 ++++++++
+ tests/functional_tests/data/DeleteMailTest.ini     |   26 +++
+ 12 files changed, 650 insertions(+), 51 deletions(-)
+
+commit 9ea7fccfcc053cf77a3e4ff3a652ee4b87d1494f
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Mar 11 10:12:08 2016 -0300
+
+    Task #15656 - Remove calendar event
+    
+    - Added event menu entry with the option to remove the event
+    - Added remove method on Events object
+    - Added proper hooks on calendar.js
+    - Created DeleteEvent API handler
+    
+    Change-Id: I4054f12794efcc5f8cbad5cadf18a3eb8376b94b
+
+ .../ExpressoLite/Backend/Request/DeleteEvent.php   |   27 ++++++++++++++++++++
+ src/calendar/Events.js                             |   16 +++++++++++-
+ src/calendar/WidgetEvents.js                       |   27 +++++++++++++++++---
+ src/calendar/calendar.js                           |    7 +++++
+ 4 files changed, 73 insertions(+), 4 deletions(-)
+
+commit 04237b7b4f722bf500e2d78beac382d86c39c696
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Mon Feb 15 17:51:52 2016 -0200
+
+    Task #13808 - Keep user logged in mobile App
+    
+    - Once a user performs a login in the mobile App, his credentials are
+      stored so he doesn't need to keep logging in every time
+    - Adjusted Cordova project structure to allow adding Android's
+      authenticator.xml
+    - Adjusted build script to add AccountManager plugin
+    - Created AccountManager.js, which allows access to AccountManager
+      plugin in the 'deferred' (done/fail) style
+    - Adjusted App.ReturnToLoginScreen method to handle the index.html in
+      Cordova's addresses correctly
+    - Added methods in Cordova.js to allow storing, retrieving and
+      deleting user credentials (using AccountManager)
+    - Changed Layout.js to delete user credentials on explicit logoff
+    - Changed login.js to store and retrieve user credentials with Cordova
+      when appropriate
+    - Added a splash screen that is displayed while the system is still
+      trying to determine if there is an active session or user
+      credentials to perform an implicit login
+    
+    Change-Id: I16a5edba49b1e27f2af02366aaea39c4d777f209
+
+ build/build_cordova.sh                             |    6 +-
+ .../cordova-build-src/common-js/CordovaConfig.js   |   18 ---
+ .../platforms/android/res/xml/authenticator.xml    |    7 ++
+ .../www/common-js/CordovaConfig.js                 |   18 +++
+ src/common-js/AccountManager.js                    |   69 +++++++++++
+ src/common-js/App.js                               |   10 +-
+ src/common-js/Cordova.js                           |  113 ++++++++++++++++--
+ src/common-js/Layout.js                            |   46 ++++---
+ src/index.html                                     |   88 +++++++-------
+ src/login.css                                      |    6 +
+ src/login.js                                       |  126 ++++++++++++++++----
+ 11 files changed, 388 insertions(+), 119 deletions(-)
+
+commit e54f0c5a72856917ec35ec3fa10a2e9e768fdb00
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Wed Oct 28 11:13:40 2015 -0200
+
+    Task #13690 - Functional Tests for Expresso Lite
+    
+    - Created a folder in tests/functional_tests to store functional tests
+      based on PHPUnit and Selenium
+    - Created some classes in ExpressoLiteTest/Functional/Generic to make
+      the creation of additional functional tests based on page objects
+      easier
+    - Created test case LoginTest, which verifies the behavior of the login
+      screen
+    - Created test case ComposeMailTest, which verifies the behavior of the
+      compose window
+    - Created test case SendReceiveMailTest, which verifies the behavior of
+      sending and receiving e-mails
+    
+    Change-Id: I5a2da6816553f2e670f428179752ebe4e05b1020
+
+ .../Functional/Generic/ExpressoLiteTest.php        |  241 +++++++++++++
+ .../Functional/Generic/GenericPage.php             |  150 ++++++++
+ .../Functional/Generic/SingleLoginTest.php         |   79 +++++
+ .../Functional/Generic/TestData.php                |   76 +++++
+ .../Functional/Login/LoginPage.php                 |   63 ++++
+ .../Functional/Login/LoginTest.php                 |  144 ++++++++
+ .../Functional/Mail/ComposeMailTest.php            |  358 ++++++++++++++++++++
+ .../Functional/Mail/HeadlinesEntry.php             |   73 ++++
+ .../ExpressoLiteTest/Functional/Mail/MailPage.php  |  153 +++++++++
+ .../Functional/Mail/MessageUnit.php                |  162 +++++++++
+ .../Functional/Mail/SendReceiveMailTest.php        |  149 ++++++++
+ .../Functional/Mail/WidgetCompose.php              |  163 +++++++++
+ .../Functional/Mail/WidgetMessages.php             |   77 +++++
+ tests/functional_tests/README                      |    5 +
+ tests/functional_tests/data/ComposeMailTest.ini    |   56 +++
+ tests/functional_tests/data/LoginTest.ini          |   17 +
+ .../functional_tests/data/SendReceiveMailTest.ini  |   26 ++
+ tests/functional_tests/functional_tests.xml        |   11 +
+ tests/functional_tests/test_bootstrap.php          |   23 ++
+ tests/functional_tests/test_conf.php               |    2 +
+ 20 files changed, 2028 insertions(+)
+
+commit 91640374499dadb59b079a3f05bda48cc041d107
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Jan 20 16:41:20 2016 -0200
+
+    Task #15083 - Fix view on calendar overlayed events
+    
+    - On WidgetWeek, if two or more events overlap, events will share
+      horizontal space
+    
+    Change-Id: I9c7e40f5bf29af088f607c375375fe86285b61a6
+
+ src/calendar/WidgetWeek.css |    4 ++--
+ src/calendar/WidgetWeek.js  |   33 +++++++++++++++++++++++++++++++--
+ 2 files changed, 33 insertions(+), 4 deletions(-)
+
+commit eb319ba40b9568c4de135d5ce18e2c54d8bc5e2b
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Feb 29 15:03:44 2016 -0300
+
+    Task #13781 - Create new calendar event
+    
+    - New button to add event, with proper hooks created on calendar.js
+    - New WidgetEditEvent created, with simplified fields, won't cover all
+      event options by now
+    - Calendar now loads quick contacts on module loading
+    - DateCalc module now has a createFromYmd method
+    - SearchContactsByEmail now has a switch to download mugshots or not;
+      also now returns account ID among user parameters
+    - SearchEvents won't ignore reject events anymore
+    - TineSession now stores accountDisplayName member retrieved from
+      getAllRegistryData call
+    - Manual date/time input, as a simple string; a full-fledged datetime
+      picker is delayed to a further commit
+    
+    Change-Id: I377394e641607e47375a62a308008e033a9ab5ea
+
+ src/api/ExpressoLite/Backend/Request/SaveEvent.php |  147 ++++++++++++
+ .../Backend/Request/SearchContactsByEmail.php      |    6 +-
+ .../ExpressoLite/Backend/Request/SearchEvents.php  |   46 +++-
+ src/api/ExpressoLite/TineTunnel/TineSession.php    |    3 +-
+ src/calendar/DateCalc.js                           |    9 +-
+ src/calendar/WidgetEditEvent.css                   |   33 +++
+ src/calendar/WidgetEditEvent.html                  |   40 ++++
+ src/calendar/WidgetEditEvent.js                    |  241 ++++++++++++++++++++
+ src/calendar/calendar.js                           |   45 +++-
+ src/calendar/index.html                            |    3 +-
+ src/common-js/Contacts.js                          |    8 +-
+ 11 files changed, 553 insertions(+), 28 deletions(-)
+
+commit 591ae636f741a39cf64d4ef2974c4f7f65d655f9
+Author: Rodrigo Cesar de Freitas Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Mar 9 16:03:24 2016 -0300
+
+    Revert "Task #15083 - Better view on calendar overlayed events"
+    
+    This reverts commit c7360396ebcd9386b8cbe29d3c110d4918d6af87.
+    
+    Change-Id: I2bac23a87e7180d0618a24d43f194d25239aa440
+
+ src/calendar/WidgetWeek.css |    4 ++--
+ src/calendar/WidgetWeek.js  |   15 +--------------
+ 2 files changed, 3 insertions(+), 16 deletions(-)
+
+commit 4806d13df9f058a2d1628621a3975aa3c1dc5826
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Mar 7 11:38:45 2016 -0300
+
+    Task #15427 - Added Chrome/Android bar color
+    
+    - Added theme-color meta directive for each module
+    
+    Change-Id: I23e78517b712bb39037a1504442edbae9ec07410
+
+ src/addressbook/index.html |    1 +
+ src/calendar/index.html    |    1 +
+ src/debugger/index.html    |    1 +
+ src/index.html             |    1 +
+ src/mail/index.html        |    1 +
+ 5 files changed, 5 insertions(+)
+
+commit 69306e5c843c88e759bc84b53ce13e074a469eba
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Mar 8 10:14:15 2016 -0300
+
+    Task #15463 - Updated jQuery from 2.1.4 to 2.2.1
+    
+    - Updated file common-js/jquery.min.js
+    
+    Change-Id: Ia5abec091597925a5da52ac7e19981461b9c0f36
+
+ src/common-js/jquery.min.js |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 55c466599a69cd2a8866bcecca83a6bd8ddf3f2e
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue Dec 15 10:47:17 2015 -0200
+
+    Task #13042 - Allow search to be cancelled
+    
+    - Canceling a search on mobile devices no longer fires a new search
+      with an empty filter
+    
+    Change-Id: Idcdc6a27f923dad77a3f08d850c2afce4ae53bc5
+
+ src/common-js/Layout.js |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit fc1fa469bc5918818801a3df863d0ca818d698ff
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Jan 22 16:59:54 2016 -0200
+
+    Task #13777 - Sanitize localStorage calls
+    
+    - Created GetUserInfo handler, to retrieve session information set
+      during login process; this handler makes no requests, so it's fast
+    - Login handler now calls GetUserInfo instead of manually retrieve it
+    - In App.Ready, check if localStorage info is set; if not, quickly call
+      GetUserInfo handler and set it
+    - It makes no sense to change the current sessionStorage calls, confined
+      to a very specific use within Contacts.js
+    
+    Change-Id: Ia6356e0e43ab30a86d0fff7965e2f424353de66f
+
+ .../ExpressoLite/Backend/Request/GetUserInfo.php   |   39 ++++++++++++++++++++
+ src/api/ExpressoLite/Backend/Request/Login.php     |   14 +++----
+ src/common-js/App.js                               |   37 ++++++++++++++-----
+ 3 files changed, 73 insertions(+), 17 deletions(-)
+
+commit d6e45ff1acba1cb58518dcb6a08d2d8585c945a9
+Author: Rodrigo Cesar de Freitas Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Jan 22 16:47:34 2016 -0200
+
+    Revert "Task #13777 - Sanitize localStorage calls"
+    
+    This reverts commit 08b72775c336b6b4d1729eab138e015f354de8ac.
+    
+    Change-Id: Ib453ad1502db8681a2eee62a7a5186f3de5c0027
+
+ .../ExpressoLite/Backend/Request/GetUserInfo.php   |   28 ---------------
+ src/api/ExpressoLite/Backend/Request/Login.php     |   14 ++++----
+ src/common-js/App.js                               |   37 ++++++--------------
+ 3 files changed, 17 insertions(+), 62 deletions(-)
+
+commit 08b72775c336b6b4d1729eab138e015f354de8ac
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Jan 21 13:23:03 2016 -0200
+
+    Task #13777 - Sanitize localStorage calls
+    
+    - Created GetUserInfo handler, to retrieve session information set
+      during login process; this handler makes no requests, so it's fast
+    - Login handler now calls GetUserInfo instead of manually retrieve it
+    - In App.Ready, check if localStorage info is set; if not, quickly call
+      GetUserInfo handler and set it
+    - It makes no sense to change the current sessionStorage calls, confined
+      to a very specific use within Contacts.js
+    
+    Change-Id: I40b0ad825f76f0c9819a2aca59b016f4ab9e37b5
+
+ .../ExpressoLite/Backend/Request/GetUserInfo.php   |   28 +++++++++++++++
+ src/api/ExpressoLite/Backend/Request/Login.php     |   14 ++++----
+ src/common-js/App.js                               |   37 ++++++++++++++------
+ 3 files changed, 62 insertions(+), 17 deletions(-)
+
+commit c7360396ebcd9386b8cbe29d3c110d4918d6af87
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Jan 20 16:41:20 2016 -0200
+
+    Task #15083 - Better view on calendar overlayed events
+    
+    - On WidgetWeek, if two or more events overlap, later ones will be
+      slightly padded to left, so the previous can be viewed
+    
+    Change-Id: I6dbdd39fbcf9201149dbe4e778885ae91536dd91
+
+ src/calendar/WidgetWeek.css |    4 ++--
+ src/calendar/WidgetWeek.js  |   15 ++++++++++++++-
+ 2 files changed, 16 insertions(+), 3 deletions(-)
+
+commit e2bb39c5a5b2ae302ad10715dd3d8669c5e8ee51
+Author: Rodrigo Cesar de Freitas Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Jan 20 16:00:33 2016 -0200
+
+    Revert "Task #15083 - Better view on calendar overlayed events"
+    
+    This reverts commit d952cefd77464594c4469c2cac47d75eda61dc51.
+    
+    Change-Id: Ib0f3c8fa05e404b881c84cfc96176c3ea192ec78
+
+ src/calendar/WidgetWeek.js |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit d952cefd77464594c4469c2cac47d75eda61dc51
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Jan 18 15:25:07 2016 -0200
+
+    Task #15083 - Better view on calendar overlayed events
+    
+    - On WidgetWeek, if two or more events overlap, later ones will be
+      slightly padded to left, so the previous can be viewed
+    
+    Change-Id: Ibae4246b577c578ee3ac7b9692c1e9f100b1221a
+
+ src/calendar/WidgetWeek.js |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 160248956700ec2a13acae73d2fba5b085244bfe
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Jan 18 12:04:01 2016 -0200
+
+    Task #13886 - Remove duplicated slash from api URL
+    
+    - Ajax URL acquirement no longer return an address with a duplicated
+      slash
+    - Ajax URL is now cached only once instead of being processed on each
+      post
+    
+    Change-Id: I00243097f1c5b22c879b6fbdfd30d306a91bcb5f
+
+ src/common-js/App.js |   11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+commit f85bb92e1e46d534110a69b923913403202d5f62
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Jan 18 14:50:33 2016 -0200
+
+    Task #15085 - Make addressbook fields readonly
+    
+    - On WidgetContactDetails, input fields are now readonly, therefore
+      can't have their values modified by user
+    
+    Change-Id: I96a17b8349b23ac8a43a104322b9cb17fae0cf38
+
+ src/addressbook/WidgetContactDetails.html |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 86a0d0d986c5077f4b8b6e3ce0f9777e1f793576
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Jan 15 17:32:52 2016 -0200
+
+    Task #14197 - Simplified JS callback calls
+    
+    - Within JS modules, callbacks now defaulted to jQuery.noop
+    - Removed all null callback checks, now redundant
+    
+    Change-Id: I3a63d2303665a46c4eacfec69eea5f888c9c13a0
+
+ src/calendar/WidgetMonth.js           |   16 +++++--------
+ src/calendar/WidgetWeek.js            |   18 +++++----------
+ src/common-js/ContactsAutocomplete.js |   14 +++++-------
+ src/common-js/Dialog.js               |   23 ++++++-------------
+ src/common-js/Layout.js               |    6 ++---
+ src/common-js/TextBadges.js           |   16 +++++--------
+ src/common-js/UploadFile.js           |   14 +++++-------
+ src/mail/WidgetAttacher.js            |   16 +++++--------
+ src/mail/WidgetCompose.js             |   18 +++++----------
+ src/mail/WidgetFolders.js             |   24 +++++++-------------
+ src/mail/WidgetHeadlines.js           |   40 ++++++++++-----------------------
+ src/mail/WidgetMessages.js            |   22 ++++++------------
+ 12 files changed, 75 insertions(+), 152 deletions(-)
+
+commit 5eb1fe238787226a47be4929f2b71677728543a1
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Jan 15 11:58:49 2016 -0200
+
+    Task #14076 - Better view on calendar whole-day events
+    
+    - On Events.js, events that span in more than one day will trigger the
+      creation of echo events, which are copies of the same event for each
+      additional day
+    - Echo events and their echoes, when pointed by cursor, will be properly
+      highlighted using browser's own CSS processing
+    - Better view of current day
+    - Render method on WidgetEvents.js will also receive clicked event,
+      because all other events will be hidden by default
+    - WidgetMonth.js updated to handle echo events
+    - Main module calendar.js updated to call WidgetEvents.render method
+      with clicked event
+    - Updated CSS styles
+    
+    Change-Id: I0f00e70b325e16028cbf7725c5bd54e7ce403147
+
+ src/calendar/Events.js        |   28 +++++++++++++++++++
+ src/calendar/WidgetEvents.css |    4 ++-
+ src/calendar/WidgetEvents.js  |   62 ++++++++++++++++++++++++++++-------------
+ src/calendar/WidgetMonth.css  |    6 +++-
+ src/calendar/WidgetMonth.html |    2 +-
+ src/calendar/WidgetMonth.js   |   40 +++++++++++++++++++-------
+ src/calendar/WidgetWeek.js    |    5 ++--
+ src/calendar/calendar.js      |    4 +--
+ 8 files changed, 115 insertions(+), 36 deletions(-)
+
+commit bbb514aaf93cfb5cc1c5c941a967b79c48fd1a91
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Jan 15 11:13:03 2016 -0200
+
+    Task #13782 - Added calendar choosing
+    
+    - Added GetCalendars.php handler
+    - Added user calendar menus to calendar module
+    - Current day rendering matching current chosen calendar
+    - Better logic when switching current date and month/week view
+    - Better handling of whole-day events
+    - Better handling of events which start on a previous month
+    - SimpleMenu.js expanded so it can run multiple object instances, also
+      no default select option is provided, user must actively choose
+    - SimpleMenu.css updated to accomodate linebreaks on options
+    
+    Change-Id: I75c514e5b424d334b2aae3e5929deebbe8de267c
+
+ src/addressbook/addressbook.js                     |    6 +-
+ .../ExpressoLite/Backend/Request/GetCalendars.php  |   79 +++++++++++++
+ .../ExpressoLite/Backend/Request/SearchEvents.php  |   43 ++++---
+ src/calendar/Events.js                             |  123 +++++++++++++-------
+ src/calendar/WidgetMonth.css                       |   12 +-
+ src/calendar/WidgetMonth.js                        |   30 +++--
+ src/calendar/WidgetWeek.css                        |    4 +-
+ src/calendar/WidgetWeek.js                         |   10 +-
+ src/calendar/calendar.css                          |   18 +--
+ src/calendar/calendar.js                           |  105 ++++++++++++-----
+ src/calendar/index.html                            |    4 +-
+ src/common-js/SimpleMenu.css                       |   15 +--
+ src/common-js/SimpleMenu.js                        |   82 +++++++------
+ src/debugger/debugger.js                           |    6 +-
+ 14 files changed, 367 insertions(+), 170 deletions(-)
+
+commit b1da3f558576f1927bc2ba72a59b98ac5e4708bb
+Author: Rodrigo Cesar de Freitas Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Jan 18 11:11:28 2016 -0200
+
+    Revert "Task #13886 - Remove duplicated slash from api URL"
+    
+    This reverts commit bef0f08bb14bf344bf723a684f17ef5247f9612b.
+    
+    Change-Id: Ie5b1d4863cb1cbaeaaf992d245836a1186a97e86
+
+ src/common-js/App.js |   16 ++++------------
+ 1 file changed, 4 insertions(+), 12 deletions(-)
+
+commit be5f489da9bf7385fd522a5778fac389687ff339
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Jan 5 09:32:23 2016 -0200
+
+    Task #14340 - Improved logoff transition
+    
+    - On Layout.js, new transition animation added, now user can't click
+      anywhere while logging off
+    - Updated elements and styles on HTML and CSS files
+    
+    Change-Id: Ic4fa4fc6324df8e48fdc1cc7362a60a42ada4e9c
+
+ src/common-js/Layout.css  |   15 +++++++++++++--
+ src/common-js/Layout.html |    5 ++++-
+ src/common-js/Layout.js   |   10 +++++++---
+ 3 files changed, 24 insertions(+), 6 deletions(-)
+
+commit 531fa40679435d408bfa10e87769d4bdc4c22b36
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Mon Dec 14 11:05:27 2015 -0200
+
+    Task #14113 - Use email input field for login
+    
+    - Changed login field from type="text" to type="email" to make typing
+      on mobile devices easier
+    
+    Change-Id: Icd73c61b6735e08fb865c57980842f05c62bb195
+
+ src/index.html |    2 +-
+ src/login.css  |    4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 194f367e37d2b067367a4752520740152638e2bb
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue Dec 22 11:30:59 2015 -0200
+
+    Task #14248 - Remove mail/Contacts.js
+    
+    - Removed mail/Contacts.js and mail/WidgetSearchAddr.*, as both of them
+      were dead code
+    
+    Change-Id: I9b7a10a6b35f76b6ca51ab446af718abd14a8895
+
+ src/mail/Contacts.js           |  149 -----------------------------------
+ src/mail/WidgetSearchAddr.css  |   16 ----
+ src/mail/WidgetSearchAddr.html |   18 -----
+ src/mail/WidgetSearchAddr.js   |  170 ----------------------------------------
+ 4 files changed, 353 deletions(-)
+
+commit bef0f08bb14bf344bf723a684f17ef5247f9612b
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Mon Dec 14 15:17:01 2015 -0200
+
+    Task #13886 - Remove duplicated slash from api URL
+    
+    - Ajax URL acquirement no longer return an address with a duplicated
+      slash
+    - Ajax URL is now cached only once instead of being processed on each
+      post
+    
+    Change-Id: I9acdae7a6c3d75e6d24cacf8c0a91268dc049e82
+
+ src/common-js/App.js |   16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+commit d28f5e0c32a4b240cf22e87c332156f6a67a5243
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Mon Jul 27 17:31:03 2015 -0300
+
+    Task #13401 - Added new debugger module
+    
+    - Added a new module that provides tools that will help debug some
+      tasks during development
+    - Added WidgetTineCookies that lets the user manage the cookies stored
+      in the current user's TineSession via browser
+    - Added WidgetComponentTest that can invoke functions from any JS
+      component directly from the browser (useful for mobile development)
+    - Added new entry in conf.php that makes this module available
+    - Added new constraint that will throw an exception if a debug related
+      AJAX request is performed when debugger module is off
+    
+    Change-Id: Ifcde7a94c8396111b17262ffa75e1b5f0ed39b42
+
+ src/addressbook/WidgetCatalogMenu.css              |   25 ---
+ src/addressbook/WidgetCatalogMenu.js               |   56 ------
+ src/addressbook/WidgetContactDetails.html          |    4 +-
+ src/addressbook/WidgetContactList.html             |    4 +-
+ src/addressbook/addressbook.js                     |   10 +-
+ src/api/ExpressoLite/Backend/AjaxProcessor.php     |    3 +
+ .../Backend/Request/GetJSComponentList.php         |  117 ++++++++++++
+ .../Backend/Request/GetTineCookies.php             |   33 ++++
+ .../ExpressoLite/Backend/Request/LiteRequest.php   |   37 +++-
+ src/api/ExpressoLite/Backend/Request/Login.php     |    1 +
+ .../Backend/Request/ReplaceCookieValue.php         |   35 ++++
+ .../DebuggerModuleNotEnabledException.php          |   29 +++
+ src/api/ExpressoLite/TineTunnel/TineSession.php    |   11 ++
+ src/api/bootstrap.php                              |    2 +
+ src/calendar/calendar.js                           |   54 +++---
+ src/calendar/index.html                            |    5 +-
+ src/common-js/App.js                               |    2 +-
+ src/common-js/Layout.css                           |    2 +
+ src/common-js/Layout.html                          |    1 +
+ src/common-js/Layout.js                            |   10 +-
+ src/common-js/SimpleMenu.css                       |   25 +++
+ src/common-js/SimpleMenu.js                        |   56 ++++++
+ src/conf.php                                       |   28 ++-
+ src/debugger/WidgetComponentTest.css               |   28 +++
+ src/debugger/WidgetComponentTest.html              |   38 ++++
+ src/debugger/WidgetComponentTest.js                |  186 ++++++++++++++++++++
+ src/debugger/WidgetTineCookies.css                 |   38 ++++
+ src/debugger/WidgetTineCookies.html                |   24 +++
+ src/debugger/WidgetTineCookies.js                  |  109 ++++++++++++
+ src/debugger/debugger.js                           |  112 ++++++++++++
+ src/debugger/index.html                            |   29 +++
+ src/img/layout-icons32.png                         |  Bin 3177 -> 4149 bytes
+ 32 files changed, 980 insertions(+), 134 deletions(-)
+
+commit 9072fca71684d839d068d6d94189b53d650af29b
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Dec 2 10:37:23 2015 -0200
+
+    Task #13962 - Fixed headline selection after mark read
+    
+    - On email module, when a headline is marked read/unread, headline
+      selection is now cleared
+    
+    Change-Id: I3b37e538e0fdf4c2f20b05baec5fb995e350d5cb
+
+ src/mail/WidgetHeadlines.js |    1 +
+ 1 file changed, 1 insertion(+)
+
+commit ee75e45b8c9c4d2792c5106f350ff0f6bb66c395
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Thu Nov 5 16:55:15 2015 -0200
+
+    Task #14162 - Create back to the top page anchor
+    
+    - All template files contains headers elements to convey document
+      structure and now after these elements will exist back to the
+      top page anchors.
+    - Adjust some identations on template files.
+    - Adjust on pages OpenMessageTemplate.php and ShowFeedbackTemplate.php
+      one <div> element without corresponding </div>.
+    - Allow, on page ComposeTemplate.php, an anchor 'Ir para anexos'.
+    
+    Change-Id: Ic5176b2384a8f11f1d72bf2c623d8a4d9097bccd
+
+ .../Core/Template/ShowFeedbackTemplate.php         |   11 +-
+ .../Accessible/Core/Template/general.css           |    7 +
+ .../Mail/Template/ComposeMessageTemplate.php       |  181 +++++++++++---------
+ .../Accessible/Mail/Template/MainTemplate.php      |   27 +++
+ .../Mail/Template/OpenFolderTemplate.php           |   10 ++
+ .../Mail/Template/OpenMessageTemplate.php          |   35 +++-
+ 6 files changed, 183 insertions(+), 88 deletions(-)
+
+commit d9cf2167aa445a3c4874a0ac7d97a123b157fb75
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue Nov 24 12:28:58 2015 -0200
+
+    Task #14658 - Replace JS and CSS minifiers
+    
+    - JS minification is now done with UglifyJs
+    - CSS minification is now done with CleanCss
+    - Build script was updated to use new minifiers
+    - Build script also checks if the minifiers are correctly installed
+    - Added documentation with installation instructions for the minifiers
+    - YUICompressor was removed
+    
+    Change-Id: I36fa5e2b8c5518139813bb38fbada896660af4b3
+
+ build/README                                |   34 +++++++++++++++++
+ build/build.php                             |   35 +++++++++++------
+ build/yuicompressor/LICENSE.TXT             |   54 ---------------------------
+ build/yuicompressor/yuicompressor-2.4.8.jar |  Bin 787524 -> 0 bytes
+ 4 files changed, 58 insertions(+), 65 deletions(-)
+
+commit e49c0379fd8764c17d3dd7451e17210052489d57
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue Nov 24 15:03:17 2015 -0200
+
+    Task #13249 - Warning when cURL is not available
+    
+    - Moved cURL verification from bootstrap.php to Request.php
+    - Added CurlNotInstalledException that is thrown in such cases
+    - App.Post now checks for CurlNotInstalledException and displays an
+      appropriate message if necessary
+    
+    Change-Id: Ic2f691a860c1ee83c153d7a528515e5de527c3f3
+
+ .../Exception/CurlNotInstalledException.php        |   25 ++++++++++++++++++++
+ src/api/ExpressoLite/TineTunnel/Request.php        |    5 ++++
+ src/api/bootstrap.php                              |    5 +---
+ src/common-js/App.js                               |    8 ++-----
+ 4 files changed, 33 insertions(+), 10 deletions(-)
+
+commit c9a1be5e0159927bc9a89d55ee523ca91a5fce00
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Wed Oct 28 16:28:08 2015 -0200
+
+    Task #13963 - Fix opening important draft messages
+    
+    - Opening the compose window for a draft message now checks the
+      Important checkbox if the message was originally saved with this flag
+    
+    Change-Id: I4ec5bc54c44f14bb84646f61387ed9e4cdea1aa2
+
+ src/mail/WidgetCompose.js |    1 +
+ 1 file changed, 1 insertion(+)
+
+commit 3306ff7689782e3efee38f7c24d5446e8ec0e8df
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Oct 7 09:48:10 2015 -0300
+
+    Task #13822 - Allow calendar refresh
+    
+    - Added button to refresh current calendar view (month or week)
+    - Added hidden throbber to be used during refreshing operations
+    - On Events.js, added routine to manually clear cache
+    - User confirmation change is now allowed only for future events
+    - On calendar.js, EventClicked routine parameter renamed for clarity
+    
+    Change-Id: I1cc2ef623b612646493444282ffb6d5da6977215
+
+ src/calendar/DateCalc.js     |    4 ++++
+ src/calendar/Events.js       |   18 ++++++++++++++++++
+ src/calendar/WidgetEvents.js |   24 +++++++++++++++---------
+ src/calendar/calendar.css    |    4 ++++
+ src/calendar/calendar.js     |   30 +++++++++++++++++++++++++++---
+ src/calendar/index.html      |    2 ++
+ 6 files changed, 70 insertions(+), 12 deletions(-)
+
+commit f65fd6c488cbfcd283be8838d77bca3d82d0226b
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Oct 27 14:39:58 2015 -0200
+
+    Task #13807 - Added menu for opened email thread
+    
+    - Added a new menu at the top of the thread, when thread emails are
+      being viewed
+    - Added hooks for the menu at mail.js
+    - On WidgetHeadlines, added method to check the currently opened thread
+    - Better contrast on ContextMenu mouse hover, to be visible on white
+      backgrounds
+    
+    Change-Id: I193de9407c980c3c71810f15a8c7693fdd47a802
+
+ src/common-js/ContextMenu.css |    2 +-
+ src/mail/WidgetHeadlines.js   |   16 +++++++++++
+ src/mail/index.html           |    1 +
+ src/mail/mail.css             |    5 +++-
+ src/mail/mail.js              |   59 ++++++++++++++++++++++++++++++++++-------
+ 5 files changed, 71 insertions(+), 12 deletions(-)
+
+commit 43c315c8e97608c53d7b335ebf351d4acd23ccab
+Author: Edgar Lucca <edgar.lucca@serpro.gov.br>
+Date:   Thu Oct 8 14:01:42 2015 -0300
+
+    Task #13419 - Save contact on send email
+    
+    - Set flag add contacts on send email
+    - Update personal catalog cache
+    
+    Change-Id: I1718cf48d21600c2a70ffc5b964acd631c13258d
+
+ .../Backend/Request/Utils/MessageUtils.php         |    3 +-
+ src/common-js/Contacts.js                          |   50 ++++++++++++++------
+ src/mail/WidgetCompose.js                          |    2 +-
+ src/mail/mail.js                                   |   14 +++++-
+ 4 files changed, 51 insertions(+), 18 deletions(-)
+
+commit 6bc89408357ad060e4c4b8e378575c47a654415d
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Sep 25 10:36:50 2015 -0300
+
+    Task #13780 - Added calendar event confirmation
+    
+    - On calendar event details, added dropdown menu with confirmation
+      options
+    - On event handling, 'status' field renamed to 'confirmation'
+    - Added SetEventConfirmation request handler
+    - Added setConfirmation method on Events class
+    - Updated confirmation sprite
+    
+    Change-Id: Ibbf783785f70eaefc6f748de7884aa351e0386d7
+
+ .../ExpressoLite/Backend/Request/SearchEvents.php  |   12 +--
+ .../Backend/Request/SetEventConfirmation.php       |   85 ++++++++++++++++++++
+ src/calendar/Events.js                             |   27 ++++++-
+ src/calendar/WidgetEvents.css                      |   17 ++--
+ src/calendar/WidgetEvents.html                     |   63 ++++++++-------
+ src/calendar/WidgetEvents.js                       |   57 +++++++++++--
+ src/calendar/WidgetMonth.js                        |    4 +-
+ src/calendar/WidgetWeek.js                         |    2 +-
+ src/img/attendee-status.png                        |  Bin 1426 -> 1615 bytes
+ 9 files changed, 212 insertions(+), 55 deletions(-)
+
+commit fdd1d88bc972117477436023f95169d80c3315e6
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Wed Sep 23 15:46:20 2015 -0300
+
+    Task #13447 - Allow file transfer with Cordova
+    
+    - Links that enable file upload and download have been fixed to
+      reference the correct AJAX address
+    - GetMessage now receives an extra parameter named ajaxUrl, which is
+      used to create inline attachments within the message
+    
+    Change-Id: Icfba15de7620c19e23c3d4b4bae7c573e5375100
+
+ .../ExpressoLite/Backend/Request/GetMessage.php    |    2 +-
+ src/common-js/App.js                               |   12 ++++++++----
+ src/mail/WidgetAttacher.js                         |    2 +-
+ src/mail/WidgetHeadlines.js                        |    6 ++++--
+ src/mail/WidgetMessages.js                         |   13 ++++++++-----
+ 5 files changed, 22 insertions(+), 13 deletions(-)
+
+commit f255a73fbb6d2f9a07cc5f3a39896bfa27685dea
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Wed Jun 24 11:23:33 2015 -0300
+
+    Task #11775 - Expresso Lite as a Cordova app
+    
+    - Added cordova.js in all html files to add Cordova support
+    - Added build_cordova.sh script that generates the phone app for
+      android devices
+    - Replaced $.ready with a new App.Ready that will also wait for the
+      deviceready event in the phone app
+    - Added better handling of NoTineSessionException to make application
+      return to login screen when user resumes the application in a phone
+    - AJAX calls aborted due to user loading a new page do not fail anymore,
+      thus avoiding unnecessary error alerts
+    
+    Change-Id: Iaa7deb0391a0202a7ef79b493bf4031bb79af87b
+
+ build/build_cordova.sh                             |  186 ++++++++++++++++++++
+ build/cordova/.gitignore                           |    1 +
+ build/cordova/README.md                            |   62 +++++++
+ build/cordova/config.xml                           |   18 ++
+ .../cordova-build-src/common-js/CordovaConfig.js   |   18 ++
+ build/cordova/icons/expressobr-hdpi.png            |  Bin 0 -> 4384 bytes
+ build/cordova/icons/expressobr-ldpi.png            |  Bin 0 -> 1893 bytes
+ build/cordova/icons/expressobr-mdpi.png            |  Bin 0 -> 2537 bytes
+ build/cordova/icons/expressobr-xhdpi.png           |  Bin 0 -> 6048 bytes
+ build/cordova/icons/expressobr-xxhdpi.png          |  Bin 0 -> 11117 bytes
+ build/cordova/icons/expressobr-xxxhdpi.png         |  Bin 0 -> 13246 bytes
+ src/addressbook/addressbook.js                     |    4 +-
+ src/addressbook/index.html                         |    1 +
+ src/calendar/calendar.js                           |    2 +-
+ src/calendar/index.html                            |    1 +
+ src/common-js/App.js                               |   87 ++++++---
+ src/common-js/Cordova.js                           |   47 +++++
+ src/common-js/CordovaConfig.js                     |   16 ++
+ src/common-js/Layout.js                            |    4 +-
+ src/cordova.js                                     |    4 +
+ src/index.html                                     |    1 +
+ src/login.js                                       |   13 +-
+ src/mail/index.html                                |    1 +
+ src/mail/mail.js                                   |    2 +-
+ 24 files changed, 432 insertions(+), 36 deletions(-)
+
+commit 797220ee2f927ef1c289d7829f364b275d2b9887
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Sep 17 15:17:39 2015 -0300
+
+    Task #13779 - View calendar event details
+    
+    - On calendar module, added right panel with new widget to render event
+      details, when event is clicked
+    - On month/week widgets, added click handlers for event objects
+    - Added sprite with attendee status icons
+    - Added HTML templates for the event detail widget rendering
+    - Added CSS styles for the event detail rendering
+    - Added new date string formatter on DateCalc
+    - Minor adaptations on calendar module
+    
+    Change-Id: I5893a1ebf00a171315f3423f073d2c76fd7f7456
+
+ .../ExpressoLite/Backend/Request/SearchEvents.php  |   63 +++++++++-
+ src/calendar/DateCalc.js                           |   15 ++-
+ src/calendar/Events.js                             |   30 ++++-
+ src/calendar/WidgetEvents.css                      |   34 +++++
+ src/calendar/WidgetEvents.html                     |   55 ++++++++
+ src/calendar/WidgetEvents.js                       |  131 ++++++++++++++++++++
+ src/calendar/WidgetMonth.css                       |    3 +
+ src/calendar/WidgetMonth.js                        |   42 +++++--
+ src/calendar/WidgetWeek.css                        |   36 ++----
+ src/calendar/WidgetWeek.html                       |   11 +-
+ src/calendar/WidgetWeek.js                         |   36 ++++--
+ src/calendar/calendar.css                          |    4 +-
+ src/calendar/calendar.js                           |   34 +++--
+ src/img/attendee-status.png                        |  Bin 0 -> 1426 bytes
+ 14 files changed, 423 insertions(+), 71 deletions(-)
+
+commit f801fe818cac13f28d1bd85a49017e15683e68ee
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Thu Sep 17 12:30:04 2015 -0300
+
+    Task #14050 - Align 'header attachments' in email composition
+    
+    - The alignment of the 'header Attachments' now are correctly following
+      the standard for this type of element in email template composition
+      screen.
+    
+    Change-Id: If7284ac9966c77642f07f14e10b2c7522dd926f2
+
+ .../Mail/Template/ComposeMessageTemplate.css       |    2 +-
+ .../Mail/Template/ComposeMessageTemplate.php       |  114 ++++++++++----------
+ 2 files changed, 60 insertions(+), 56 deletions(-)
+
+commit 49622f17904cbbd889605eaddcc015d800aa3943
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Thu Sep 10 18:37:20 2015 -0300
+
+    Task #13799 - Move a message being displayed to another folder
+    
+    - Create MoveMessage.php handler class responsible for moving messages
+      to any folder through the message and folder identification (id).
+    - OpenFolderTemplate.php now contains a link to back to the message
+      that will no longer be moved.
+    - From the OpenFolderTemplate.php will be allowed both will open a
+      messages folder visualization  as moving a message to any folder.
+    - Every action of moving successfully completed messages will be
+      communicated in the feedback event.
+    
+    Change-Id: I57f0fee40ca784fd7e58b20ebe807d5c6cd4dedf
+
+ src/accessible/Accessible/Mail/Main.php            |    2 +-
+ src/accessible/Accessible/Mail/MoveMessage.php     |   48 ++++++++++++++++++++
+ src/accessible/Accessible/Mail/OpenFolder.php      |   30 ++++++++----
+ src/accessible/Accessible/Mail/OpenMessage.php     |    9 +++-
+ .../Mail/Template/OpenFolderTemplate.php           |    5 +-
+ .../Mail/Template/OpenMessageTemplate.php          |    1 +
+ 6 files changed, 84 insertions(+), 11 deletions(-)
+
+commit da67501735614ac182d693407f40a72314e64d7e
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Tue Aug 25 14:00:04 2015 -0300
+
+    Task #13398 - Selection of multiple messages and mark as unread
+    
+    - Adjust showfeedback.php class documentation.
+    - Rename the method name, of showfeedback.php, responsible for prepare
+      buttons to be displayed.
+    - Create a link 'lnkConfirmationMessageAction' in Mail/Main.php.
+    - Create ConfirmationMessageAction.php class wich will be treated
+      the confirmation of any message action.
+    - Create ProcessMessageAction.php class to check the action to be
+      performed and dispatch the request to the responsible handler.
+    - Now one or more messages can be marked as unread from the message
+      display (Mail/Template/MainTemplate.php).
+    - Add 'aria-hidden' attribute at Mail/Template/MainTemplate.php to
+      the mark column of messages table display.
+    
+    Change-Id: Idc8d981f75e9aacfa74ca3b062f9f74d72446c10
+
+ src/accessible/Accessible/Core/MessageIds.php      |   45 +++++
+ src/accessible/Accessible/Core/ShowFeedback.php    |   18 +-
+ .../Core/Template/ShowFeedbackTemplate.php         |    4 +-
+ .../Accessible/Core/Template/general.css           |    6 +-
+ .../Accessible/Mail/ConfirmMessageAction.php       |  186 ++++++++++++++++++++
+ src/accessible/Accessible/Mail/Main.php            |   19 +-
+ .../Accessible/Mail/MarkMessageAsUnread.php        |   26 ++-
+ src/accessible/Accessible/Mail/OpenMessage.php     |    2 +-
+ .../Accessible/Mail/ProcessMessageAction.php       |   59 +++++++
+ .../Accessible/Mail/Template/MainTemplate.css      |    3 +
+ .../Accessible/Mail/Template/MainTemplate.php      |  146 ++++++++-------
+ src/img/72px_confirm.png                           |  Bin 0 -> 5511 bytes
+ 12 files changed, 413 insertions(+), 101 deletions(-)
+
+commit 4c655d930fd036acf7f11e8e28332dd6491af504
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Thu Sep 17 14:36:52 2015 -0300
+
+    Task #13933 - Validation of the read confirmation flag
+    
+    - Correction of the read receipt flag validation to prevent warning in
+      expresso lite.
+    
+    Change-Id: I695ff865468b5f57165910d4c7690605ec5baba7
+
+ .../ExpressoLite/Backend/Request/SaveMessage.php   |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c6b63a9abcb4ef241bdb332d2645c447536d29d8
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Mon Aug 17 15:29:34 2015 -0300
+
+    Task #13712 - Input validation for screen reader
+    
+    - Customize validation messages for mail and subject fields
+    
+    Change-Id: Ie057b04d2491fb5150182bd46ca58b8b8c412100
+
+ .../Mail/Template/ComposeMessageTemplate.php       |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit c330d5834b2c1173794996bf8e14264b93a99ee6
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue Sep 1 10:59:15 2015 -0300
+
+    Task #13473 - Refactor exceptions class structure
+    
+    - All exceptions now belong to the same namespace, that is, they are
+      no longer divided in TineTunnel and Backend namespaces
+    - All exceptions now are subclasses of LiteException
+    - All exceptions have an associated HTTP code
+    - TineTunnelException became obsolete and was removed
+    - AjaxProcessor exception handling was simplified a little
+    - Added/fixed documentation
+    
+    Change-Id: I7c57cc4d1c872e38a769918e612b7851de673235
+
+ src/accessible/Accessible/Dispatcher.php           |    2 +-
+ src/accessible/Accessible/Handler.php              |    2 +-
+ src/api/ExpressoLite/Backend/AjaxProcessor.php     |    9 +--
+ .../Backend/Exception/LiteException.php            |   64 -----------------
+ .../Backend/Exception/NoTineSessionException.php   |   30 --------
+ .../Backend/Exception/UserMismatchException.php    |   23 ------
+ .../ExpressoLite/Backend/LiteRequestProcessor.php  |    2 +-
+ .../Backend/Request/ChangeExpiredPassword.php      |    2 +-
+ .../ExpressoLite/Backend/Request/LiteRequest.php   |    6 +-
+ src/api/ExpressoLite/Backend/Request/Login.php     |    2 +-
+ .../Exception/CaptchaRequiredException.php         |   40 +++++++++++
+ src/api/ExpressoLite/Exception/LiteException.php   |   73 ++++++++++++++++++++
+ .../Exception/NoTineSessionException.php           |   29 ++++++++
+ src/api/ExpressoLite/Exception/RpcException.php    |   26 +++++++
+ .../ExpressoLite/Exception/TineErrorException.php  |   43 ++++++++++++
+ .../Exception/TineSessionExpiredException.php      |   25 +++++++
+ .../Exception/UserMismatchException.php            |   24 +++++++
+ .../Exception/CaptchaRequiredException.php         |   28 --------
+ .../TineTunnel/Exception/RpcException.php          |   20 ------
+ .../TineTunnel/Exception/TineErrorException.php    |   33 ---------
+ .../Exception/TineSessionExpiredException.php      |   24 -------
+ .../TineTunnel/Exception/TineTunnelException.php   |   22 ------
+ src/api/ExpressoLite/TineTunnel/JsonRpc.php        |    2 +-
+ src/api/ExpressoLite/TineTunnel/Request.php        |    2 +-
+ src/api/ExpressoLite/TineTunnel/TineJsonRpc.php    |    4 +-
+ src/api/ExpressoLite/TineTunnel/TineSession.php    |   14 ++--
+ 26 files changed, 280 insertions(+), 271 deletions(-)
+
+commit 0b8fceb72084cf9cad9aac09fc8bb6a99bffa364
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Sep 14 14:48:49 2015 -0300
+
+    Task #13884 - Master/detail interface merged into Layout class
+    
+    - Layout.js now handles master/detail exhibition inside the modules
+    - Layout.css and Layout.html updated to follow the changes
+    - All index.html and main modules JS updated to use the new Layout
+      master/detail handling
+    - All master/detail CSS handlers removed, now unnecessary
+    
+    Change-Id: Iaf1b157156ce95fea8435c8d63dc7a69844387b4
+
+ src/addressbook/addressbook.css |   37 --------
+ src/addressbook/addressbook.js  |   17 ++--
+ src/addressbook/index.html      |    6 +-
+ src/calendar/calendar.js        |    4 +-
+ src/calendar/index.html         |    6 +-
+ src/common-js/Layout.css        |  123 ++++++++++++++++---------
+ src/common-js/Layout.html       |   50 +++++-----
+ src/common-js/Layout.js         |  194 +++++++++++++++++++--------------------
+ src/mail/index.html             |   26 +++---
+ src/mail/mail.css               |   13 +--
+ src/mail/mail.js                |   42 ++++-----
+ 11 files changed, 248 insertions(+), 270 deletions(-)
+
+commit b6e24d2715afc2a84cc5552ffbbcbae1248a82f4
+Author: Rodrigo Cesar de Freitas Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Sep 14 09:46:34 2015 -0300
+
+    Revert "Task #13884 - Master/detail interface merg
+    
+    This reverts commit 6b375e2f5bbfb31f78e62704d0b35e4186ad9c71.
+    
+    Change-Id: I592b74dc672e33ac652845b473dba268568bea5a
+
+ src/addressbook/addressbook.css |   37 ++++++++
+ src/addressbook/addressbook.js  |   17 ++--
+ src/addressbook/index.html      |    6 +-
+ src/calendar/calendar.js        |    4 +-
+ src/calendar/index.html         |    6 +-
+ src/common-js/Layout.css        |  123 +++++++++----------------
+ src/common-js/Layout.html       |   50 +++++------
+ src/common-js/Layout.js         |  188 ++++++++++++++++++++++-----------------
+ src/mail/index.html             |   26 +++---
+ src/mail/mail.css               |   13 ++-
+ src/mail/mail.js                |   46 ++++++----
+ 11 files changed, 278 insertions(+), 238 deletions(-)
+
+commit 52fd76ae3895c9647c9ae90f69b4a0b42a4905f6
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Sep 4 15:02:58 2015 -0300
+
+    Task #13911 - Better calendar timezone handling
+    
+    - On calendar, improved timezone handling for events
+    - Client now receives UTC time, timezone conversion is made on client
+    
+    Change-Id: Id8b5173853b78e677dd9936d7962d93cce5f0f20
+
+ .../ExpressoLite/Backend/Request/SearchEvents.php  |    3 ++-
+ src/calendar/DateCalc.js                           |    4 ++--
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+commit 6b375e2f5bbfb31f78e62704d0b35e4186ad9c71
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Sep 4 14:46:46 2015 -0300
+
+    Task #13884 - Master/detail interface merged into Layout class
+    
+    - Layout.js now handles master/detail exhibition inside the modules
+    - Layout.css and Layout.html updated to follow the changes
+    - All index.html and main modules JS updated to use the new Layout
+      master/detail handling
+    - All master/detail CSS handlers removed, now unnecessary
+    
+    Change-Id: Ic529ce24d073b898853ddde39d1786b0a3685d58
+
+ src/addressbook/addressbook.css |   37 --------
+ src/addressbook/addressbook.js  |   17 ++--
+ src/addressbook/index.html      |    6 +-
+ src/calendar/calendar.js        |    4 +-
+ src/calendar/index.html         |    6 +-
+ src/common-js/Layout.css        |  123 ++++++++++++++++---------
+ src/common-js/Layout.html       |   50 ++++++-----
+ src/common-js/Layout.js         |  188 +++++++++++++++++----------------------
+ src/mail/index.html             |   26 +++---
+ src/mail/mail.css               |   13 +--
+ src/mail/mail.js                |   46 ++++------
+ 11 files changed, 238 insertions(+), 278 deletions(-)
+
+commit 0314a68a768955b29094ffed8df7e2a1d4998629
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Sep 1 15:43:11 2015 -0300
+
+    Task #13900 - Updated jQuery from 2.1.3 to 2.1.4
+    
+    - common-js/jquery.min.js file updated, nothing else needed
+    
+    Change-Id: I57964b4ea156ac7aba6a5748b45eb3ff0843df69
+
+ src/common-js/jquery.min.js |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 87c1f0a93120d3ead6582eff0eb70cb0bcd3c82e
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Mon Aug 31 12:28:59 2015 -0300
+
+    Task #13471 - Use corporate catalog as default
+    
+    - When the addressbook module is opened, it first shows the corporate
+      catalog by default
+    
+    Change-Id: I66278e432b2b350f9431b0799c44c89fc701a8b7
+
+ src/addressbook/addressbook.js |   10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit be5722d54e2e3aeab94c04af94ee1cdf945cb950
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Tue Aug 18 15:06:29 2015 -0300
+
+    Task #13423 - Allow forward or reply with attachments
+    
+    - All attchments of an email message being reply/forwarding now can be
+      marked to be or not sent.
+    
+    Change-Id: I6a4f633b65759c5f7bb1c4c7eea75665d085058a
+
+ src/accessible/Accessible/Mail/ComposeMessage.php  |    3 +-
+ src/accessible/Accessible/Mail/OpenMessage.php     |   32 ++++++---
+ src/accessible/Accessible/Mail/SendMessage.php     |   69 +++++++++++++++++++-
+ .../Mail/Template/ComposeMessageTemplate.css       |    4 ++
+ .../Mail/Template/ComposeMessageTemplate.php       |   52 +++++++++++----
+ .../Mail/Template/OpenMessageTemplate.php          |    4 +-
+ 6 files changed, 138 insertions(+), 26 deletions(-)
+
+commit e3d2bc6dd0d65a91f65ef7f4803841566400c421
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Mon Aug 17 11:22:51 2015 -0300
+
+    Task #13691 - Refactoring of showFeedback
+    
+    - The showFeedback class now allow any module event that may require
+      confirmation (or others types of interaction), by the user, before it
+      completes.
+    - Now showFeedback can be used for confirmation of any action mail message.
+    - ShowFeedbackTemplate is responsible for displaying the confirmation
+      (others types of interaction) button options of any action message.
+    
+    Change-Id: I1dc30eb232d3281df486a190df7be63322d8e640
+
+ src/accessible/Accessible/Core/ShowFeedback.php    |   26 ++++++++++++-
+ .../Core/Template/ShowFeedbackTemplate.css         |   39 +++++---------------
+ .../Core/Template/ShowFeedbackTemplate.php         |   19 +++++++---
+ .../Accessible/Core/Template/general.css           |    2 +
+ 4 files changed, 50 insertions(+), 36 deletions(-)
+
+commit 23ddebcd10aad0d44f0656721796f8e73dd82ced
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Fri Aug 7 11:25:00 2015 -0300
+
+    Task #13532 - Allow sending emails with reading confirmation
+    
+    - Adjustments in api/ExpressoLite to allow sending emails with
+      reading confirmation.
+    
+    Change-Id: If11d75692bb3cba655b405a0fe280e127bc05336
+
+ .../ExpressoLite/Backend/Request/SaveMessage.php   |    3 ++-
+ .../Backend/Request/Utils/MessageUtils.php         |    6 +++++-
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 6120b6f3853e4e4a5f46c90291e7f6e8ebe7c913
+Author: Fabiano Sardenberg Kuss - COCOE/COASC/COSAM <fabiano.kuss@serpro.gov.br>
+Date:   Wed Jun 10 17:15:34 2015 -0300
+
+    Task #11112 - Calendar added to the repository
+    
+    - Previous implementation refactored
+    - Added calendar subfolder and hidden entry on Layout.html
+    - Added URL escaping for calendar module in App.Post
+    - Added calendar widgets, classes and templates, with minimal
+      functionality only
+    - Added events data cache
+    
+    Change-Id: I5ed12c2170cb843aec28d8d9c8888cb7d90da83d
+
+ .../ExpressoLite/Backend/Request/SearchEvents.php  |  105 ++++++++++++
+ src/api/ExpressoLite/TineTunnel/TineSession.php    |    1 +
+ src/calendar/DateCalc.js                           |  130 +++++++++++++++
+ src/calendar/Events.js                             |  141 ++++++++++++++++
+ src/calendar/WidgetMonth.css                       |   65 ++++++++
+ src/calendar/WidgetMonth.html                      |   46 ++++++
+ src/calendar/WidgetMonth.js                        |  140 ++++++++++++++++
+ src/calendar/WidgetWeek.css                        |   82 ++++++++++
+ src/calendar/WidgetWeek.html                       |   47 ++++++
+ src/calendar/WidgetWeek.js                         |  171 ++++++++++++++++++++
+ src/calendar/calendar.css                          |   26 +++
+ src/calendar/calendar.js                           |  117 ++++++++++++++
+ src/calendar/index.html                            |   36 +++++
+ src/common-js/App.js                               |    2 +-
+ src/common-js/Layout.html                          |    1 +
+ 15 files changed, 1109 insertions(+), 1 deletion(-)
+
+commit 00d803f2cf1b276d152d4b39d9cca603ce14ff6d
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Tue Aug 18 15:14:29 2015 -0300
+
+    Task #13093 - Prevent cache for accessible
+    
+    - Due to cache the update email list is not working properly
+    
+    Change-Id: I295898ab580802120e19c026877c8083fe730bf1
+
+ src/accessible/Accessible/Dispatcher.php |    2 ++
+ 1 file changed, 2 insertions(+)
+
+commit b52759161790e0f846d3cd47640e37edbb51f8a4
+Author: Rodrigo Cesar de Freitas Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Aug 18 10:40:37 2015 -0300
+
+    Revert "Task #13093 - Prevent cache for accessible"
+    
+    This reverts commit cbc89acbcef9ed216f6879b41a3f500719da948e.
+    
+    Change-Id: If69e1d2f700252e1bc6362225b9fad4c9f6fb799
+
+ src/accessible/Accessible/Dispatcher.php |    2 --
+ 1 file changed, 2 deletions(-)
+
+commit cbc89acbcef9ed216f6879b41a3f500719da948e
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Mon Aug 17 09:33:51 2015 -0300
+
+    Task #13093 - Prevent cache for accessible
+    
+    - Due to cache the update email list is not working properly
+    
+    Change-Id: I7bc6083067a8e4d94d8306a612f36a57860beda1
+
+ src/accessible/Accessible/Dispatcher.php |    2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 882964de905e71ff783605d545eb781e561cf251
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue Aug 4 12:10:09 2015 -0300
+
+    Task #13472 - Handle Tine session timeout
+    
+    - Expresso Lite now handles session timeouts in Tine correctly.
+    - Created TineErrorException that is thrown when Tine returns an error.
+    - Created TineSessionExpiredException that is thrown when a request is
+      made to Tine when it's session is expired. This exception will result
+      in 401 HTTP error.
+    - App.js now ignores failed Post calls when the user is already leaving
+      the page to avoid duplicated error messages.
+    - Improved CheckSessionStatus.
+    
+    Change-Id: I1bff3b88bac672c0dc38b546b9fb39050b1afa11
+
+ src/api/ExpressoLite/Backend/AjaxProcessor.php     |   35 +++++++++++-------
+ .../Backend/Request/CheckSessionStatus.php         |   20 ++++------
+ .../TineTunnel/Exception/TineErrorException.php    |   33 +++++++++++++++++
+ .../Exception/TineSessionExpiredException.php      |   24 ++++++++++++
+ .../TineTunnel/Exception/TineTunnelException.php   |    7 +++-
+ src/api/ExpressoLite/TineTunnel/TineJsonRpc.php    |    4 +-
+ src/api/ExpressoLite/TineTunnel/TineSession.php    |   39 ++++++++++++++++++--
+ src/common-js/App.js                               |   15 +++++++-
+ 8 files changed, 143 insertions(+), 34 deletions(-)
+
+commit 216fd87b970b8827437c855b4fefd1f1643cdef2
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Aug 12 15:23:27 2015 -0300
+
+    Task #13625 - Fix throbber animation on Chrome browser
+    
+    - On login.js, remove the animated throbber before starting any other
+      animations
+    
+    Change-Id: Ifeb2040c7e1ada698d7fcb81fe2769af756a3836
+
+ src/login.js |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f914678aa083e845777d2c7e8fccdac0e1143499
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Mon Aug 3 10:36:26 2015 -0300
+
+    Task #13464 - Allow attachments with size and file extension
+    
+    - Dispose attachments links to better deal with screen readers.
+    - All attachments links now includes the file extension and file size
+      as recommended by eMAG guidelines.
+    - Force download attachments rather than allowing some to be opened
+      directly in the browser.
+    
+    Change-Id: Ia045ff197784b6c6f0c2fa09b999045dbef7bd96
+
+ .../Accessible/Core/Template/general.css           |    6 +++
+ src/accessible/Accessible/Mail/OpenMessage.php     |   18 +++++++++
+ .../Mail/Template/OpenMessageTemplate.css          |    2 +
+ .../Mail/Template/OpenMessageTemplate.php          |   41 ++++++++++++--------
+ .../Backend/Request/DownloadAttachment.php         |    2 +-
+ 5 files changed, 51 insertions(+), 18 deletions(-)
+
+commit 2d66c8ea1e18eb1b4d5692b15b3ac31c21a88611
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Thu Jul 23 15:57:06 2015 -0300
+
+    Task #13420 - Improve CSS accessible module
+    
+    - Remove duplicate CSS rules
+    - Create a general.css rules in Core/Template
+    - Alter MainTemplate.php of login access to maintain compatibility with
+      expressobr login screen and add accessibility items
+    - Define naming standards for classes and IDs of css rules
+    
+    Change-Id: Ieb2eff002bc8e5e601edd0417a6a384998f2762e
+
+ .../Core/Template/ShowFeedbackTemplate.css         |   99 +++++---------
+ .../Core/Template/ShowFeedbackTemplate.php         |   21 ++-
+ .../Accessible/Core/Template/general.css           |   91 +++++++++++++
+ .../Accessible/Login/Template/MainTemplate.css     |  100 ++++----------
+ .../Accessible/Login/Template/MainTemplate.php     |   30 +++--
+ .../Mail/Template/ComposeMessageTemplate.css       |  109 ++++------------
+ .../Mail/Template/ComposeMessageTemplate.php       |  131 ++++++++++---------
+ .../Accessible/Mail/Template/MainTemplate.css      |  137 +++++---------------
+ .../Accessible/Mail/Template/MainTemplate.php      |   75 ++++++-----
+ .../Mail/Template/OpenFolderTemplate.css           |   39 +-----
+ .../Mail/Template/OpenFolderTemplate.php           |   26 ++--
+ .../Mail/Template/OpenMessageTemplate.css          |   66 ++--------
+ .../Mail/Template/OpenMessageTemplate.php          |  114 ++++++++--------
+ 13 files changed, 434 insertions(+), 604 deletions(-)
+
+commit 15eca286a377551db1296cae46fceb86515f0bb5
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Jul 30 10:26:37 2015 -0300
+
+    Task #13469 - Fix autocomplete wrong blur function call
+    
+    - On WidgetCompose, fixed call to onBlurBadges function
+    
+    Change-Id: Ib500fed8c56e800b01f35fb592234957cdebf1af
+
+ src/mail/WidgetCompose.js |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 9daf6124711d023f8253adf6f37c1ce8ce9f3f6c
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Jul 17 16:20:17 2015 -0300
+
+    Task #13382 - Added better autocomplete for emails
+    
+    - SearchContacts widget is gone
+    - Added new ContactsAutocomplete widget
+    - Added new TextBadges widget
+    - Updated all hooks on WidgetCompose to/cc/bcc email fields
+    - Removed unused references on mail.js module
+    - Enhanced UrlStack push behavior to be compatible with the new widget
+    - Fixed general.css styles to match email fields
+    
+    Change-Id: I909053c5a6e75dc701692e3fcda96d9552668681
+
+ src/common-js/ContactsAutocomplete.css  |   25 +++
+ src/common-js/ContactsAutocomplete.html |   29 +++
+ src/common-js/ContactsAutocomplete.js   |  315 +++++++++++++++++++++++++++++++
+ src/common-js/SearchContacts.css        |   24 ---
+ src/common-js/SearchContacts.html       |   28 ---
+ src/common-js/SearchContacts.js         |  273 ---------------------------
+ src/common-js/TextBadges.css            |   27 +++
+ src/common-js/TextBadges.html           |   15 ++
+ src/common-js/TextBadges.js             |  144 ++++++++++++++
+ src/common-js/UrlStack.js               |   10 +-
+ src/common-js/general.css               |    6 +-
+ src/mail/WidgetCompose.css              |   35 ++--
+ src/mail/WidgetCompose.html             |   24 ++-
+ src/mail/WidgetCompose.js               |  222 +++++++++++++---------
+ src/mail/mail.js                        |    5 +-
+ 15 files changed, 735 insertions(+), 447 deletions(-)
+
+commit 796da4c437ab248937d148c16e21f41489a64262
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Jul 24 15:28:59 2015 -0300
+
+    Task #13441 - Better unread mail count on titlebar
+    
+    - On titlebar, unread email count is now written before current folder
+      name
+    
+    Change-Id: I53308e91d046f5656022e9b21d7c2e761e04d32c
+
+ src/mail/mail.js |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 19fc5389c19db3ab0f5a115832dcd2e424d7c70a
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Thu Jul 23 10:59:44 2015 -0300
+
+    Task #13430 - Fix problems with login
+    
+    - In adition to calling setrawcookie(), Login.php now also assigns the
+      new cookie to the $_COOKIE array to avoid problems with user checking
+    
+    Change-Id: I80f60dfa962895b73aa6eca0b284f69b17172be5
+
+ src/api/ExpressoLite/Backend/Request/Login.php |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit a0d4689a3da729ba9824934760438b13f0270610
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Jul 23 16:35:58 2015 -0300
+
+    Task #13436 - Fix accessible link on smartphones at login fail
+    
+    - When login fails on a mobile device, accessible link won't show
+    
+    Change-Id: Ic7b62eaee09b68348ef987cadbd1fe7729348c25
+
+ src/login.js |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 79d41cc9f960a4cefa81cd60bfcf1d7dd0ee0c5f
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Jul 22 13:10:48 2015 -0300
+
+    Task #13426 - Better transitions on login page
+    
+    - New animation effects on login page, for both desktop and smartphones
+    
+    Change-Id: I5ed91005f464d2b2445659df2010ab688051cf75
+
+ src/login.js |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 50 insertions(+), 6 deletions(-)
+
+commit f96d7f21341daa02a3977f9f68bbc84f7be2b261
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Fri Jul 17 17:38:32 2015 -0300
+
+    Task #13389 - Fix verification of logged user
+    
+    - Lite request now have a checkConstraints() function that checks if
+      all pre-conditions are met
+    - checkConstraints() is now always called before the execution of a
+      Lite request
+    - User verification is part of checkConstraints
+    - Client side verification of problems with requests was improved
+    
+    Change-Id: I15463e0e7120ee4d068877450fa8681274914a24
+
+ .../Backend/Exception/UserMismatchException.php    |   11 ++----
+ .../ExpressoLite/Backend/LiteRequestProcessor.php  |   10 +++---
+ .../ExpressoLite/Backend/Request/LiteRequest.php   |   36 ++++++++++++++------
+ src/api/ExpressoLite/Backend/Request/Login.php     |    4 +++
+ src/common-js/App.js                               |   16 ++++++---
+ 5 files changed, 51 insertions(+), 26 deletions(-)
+
+commit 5dc943d33619d4a967b287b8136e43cea800de9f
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Jul 13 11:57:08 2015 -0300
+
+    Task #13352 - Renaming folder inc to common-js
+    
+    - Folder inc renamed to common-js
+    - All references updated
+    
+    Change-Id: I85aa06cc1d3383b404469258a920a5286fbae52c
+
+ src/addressbook/WidgetCatalogMenu.js    |    4 +-
+ src/addressbook/WidgetContactDetails.js |    5 +-
+ src/addressbook/WidgetContactList.js    |    5 +-
+ src/addressbook/WidgetLetterIndex.js    |    4 +-
+ src/addressbook/addressbook.js          |   19 +-
+ src/addressbook/index.html              |    4 +-
+ src/common-js/App.js                    |  135 ++++++++++++++
+ src/common-js/Contacts.js               |  143 +++++++++++++++
+ src/common-js/ContextMenu.css           |   20 ++
+ src/common-js/ContextMenu.js            |  171 +++++++++++++++++
+ src/common-js/DateFormat.js             |   72 ++++++++
+ src/common-js/Dialog.css                |   22 +++
+ src/common-js/Dialog.html               |   23 +++
+ src/common-js/Dialog.js                 |  303 +++++++++++++++++++++++++++++++
+ src/common-js/Layout.css                |   81 +++++++++
+ src/common-js/Layout.html               |   32 ++++
+ src/common-js/Layout.js                 |  257 ++++++++++++++++++++++++++
+ src/common-js/SearchContacts.css        |   24 +++
+ src/common-js/SearchContacts.html       |   28 +++
+ src/common-js/SearchContacts.js         |  273 ++++++++++++++++++++++++++++
+ src/common-js/UploadFile.js             |   89 +++++++++
+ src/common-js/UrlStack.js               |   48 +++++
+ src/common-js/general.css               |   56 ++++++
+ src/common-js/jquery.min.js             |    4 +
+ src/common-js/require.min.js            |   36 ++++
+ src/inc/App.js                          |  135 --------------
+ src/inc/Contacts.js                     |  140 --------------
+ src/inc/ContextMenu.css                 |   20 --
+ src/inc/ContextMenu.js                  |  167 -----------------
+ src/inc/DateFormat.js                   |   72 --------
+ src/inc/Dialog.css                      |   22 ---
+ src/inc/Dialog.html                     |   23 ---
+ src/inc/Dialog.js                       |  299 ------------------------------
+ src/inc/Layout.css                      |   81 ---------
+ src/inc/Layout.html                     |   32 ----
+ src/inc/Layout.js                       |  253 --------------------------
+ src/inc/SearchContacts.css              |   24 ---
+ src/inc/SearchContacts.html             |   28 ---
+ src/inc/SearchContacts.js               |  269 ---------------------------
+ src/inc/UploadFile.js                   |   89 ---------
+ src/inc/UrlStack.js                     |   48 -----
+ src/inc/general.css                     |   56 ------
+ src/inc/jquery.min.js                   |    4 -
+ src/inc/require.min.js                  |   36 ----
+ src/index.html                          |    4 +-
+ src/login.js                            |    7 +-
+ src/mail/Contacts.js                    |    5 +-
+ src/mail/WidgetAttacher.js              |    6 +-
+ src/mail/WidgetCompose.js               |   10 +-
+ src/mail/WidgetFolders.js               |    5 +-
+ src/mail/WidgetHeadlines.js             |    7 +-
+ src/mail/WidgetMessages.js              |    8 +-
+ src/mail/WidgetSearchAddr.js            |    6 +-
+ src/mail/index.html                     |    4 +-
+ src/mail/mail.js                        |   19 +-
+ 55 files changed, 1905 insertions(+), 1832 deletions(-)
+
+commit 8bb2b84cd9fb61d65a2e084b6cfc89ad391619c1
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Jul 10 10:29:43 2015 -0300
+
+    Task #13344 - Fix error 500, user lost credentials
+    
+    - On App.Post, server error 500 is handled, redirecting user to login
+      page when he losts his credentials
+    
+    Change-Id: Id9effa4c34afb19f6785195629e051c010c43b05
+
+ src/inc/App.js |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit da6d36ee29f65eab1160f478d6743b4fc6030fcf
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Jul 10 11:18:54 2015 -0300
+
+    Task #13345 - Fix info position on login screen
+    
+    - On login.css, information block is not shown when there's not enough
+      screen height
+    
+    Change-Id: I8d0e52719ffb2eab704323e4dc4b091f80af6846
+
+ src/login.css |    8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit 41b86ed7b29b8fb66eed7708ad4a32c2a60c4cd2
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Thu Jul 2 13:15:46 2015 -0300
+
+    Task #13251 - Prevent login into inccorrect acount
+    
+    - User login cookie storage was moved to api Login.php
+    - TineSession user is checked agains user cookie before execution
+    - Created UserMismatchException that indicates that the logged session
+      does not correspond to the user login informed by the client
+    - TineSession is reseted before a new Login to avoid reuse of an
+      invalidated session
+    - Fixed TineSessionRepository::resetTineSession()
+    - When tine sends expired cookies and cookies with value=deleted, they
+      are now correctly deleted from the tineSession
+    - PHPSESSID cookies between Tine and Lite are no longer being filtered
+    - Fixed User-Agent header in SearchContactsByEmail->getContactPicture
+    
+    Change-Id: Id01319a24bce62709f197dfa73243eb113e92cfc
+
+ src/accessible/Accessible/Login/Login.php          |    9 -----
+ .../Backend/Exception/NoTineSessionException.php   |    2 +-
+ .../Backend/Exception/UserMismatchException.php    |   28 ++++++++++++++++
+ .../Backend/Request/DownloadAttachment.php         |    3 +-
+ .../ExpressoLite/Backend/Request/LiteRequest.php   |   24 +++++++++++++-
+ src/api/ExpressoLite/Backend/Request/Login.php     |   14 ++++++++
+ src/api/ExpressoLite/Backend/Request/Logoff.php    |   14 +++++++-
+ .../Backend/Request/SearchContactsByEmail.php      |    3 +-
+ .../Backend/Request/Utils/MessageUtils.php         |    5 +--
+ .../ExpressoLite/Backend/TineSessionRepository.php |    1 +
+ src/api/ExpressoLite/TineTunnel/CookieHandler.php  |    7 ++++
+ src/api/ExpressoLite/TineTunnel/Request.php        |   35 +++++++++++++++++---
+ src/api/ExpressoLite/TineTunnel/TineSession.php    |   10 ++++++
+ src/inc/App.js                                     |    1 +
+ 14 files changed, 135 insertions(+), 21 deletions(-)
+
+commit c543522410853039402073df820ce6f0e918519b
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Jun 29 12:13:03 2015 -0300
+
+    Task #13235 - Fix Lite login screen on old browsers
+    
+    - If browser isn't supported, notice message is shown
+    - Notice message moved from JS into a DIV
+    - Correct handling of body showing steps
+    - Fixed function placement on login.js
+    
+    Change-Id: Ica24302f67ef7ebbcd77f80cb7c04674f888e091
+
+ src/index.html |    5 +++++
+ src/login.css  |    1 +
+ src/login.js   |   67 ++++++++++++++++++++++++++++----------------------------
+ 3 files changed, 40 insertions(+), 33 deletions(-)
+
+commit 6dc6336ba4aff668b097621bb9423dcd28b5d570
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Jun 29 11:34:41 2015 -0300
+
+    Task #13231 - Fix Lite login form alignment
+    
+    - On index.html, bottom image is now DIV background
+    - Added max-height to DIV
+    
+    Change-Id: I06ebd9fa4383f59be9120c5785db45d1aad21066
+
+ src/index.html |    1 -
+ src/login.css  |   10 ++++------
+ 2 files changed, 4 insertions(+), 7 deletions(-)
+
+commit eba821d2b81c0b7d78e59d7ec1b58fc0406a2e38
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue Jun 30 09:39:53 2015 -0300
+
+    Task #13236 - Fix user-agent used in JSON RPC call
+    
+    - The user-agent header used in TineJsonRpc calls is now set to a
+      default value instead of forwarding the client user-agent
+    
+    Change-Id: I7a3f1c41b2ba1dde8cb0993ecc9fc2dd6d5872a3
+
+ src/api/ExpressoLite/TineTunnel/TineJsonRpc.php |   17 +----------------
+ 1 file changed, 1 insertion(+), 16 deletions(-)
+
+commit db1c338e1b2d6e969ce0449d52110f1e4dd2a0eb
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Fri Jun 26 10:57:48 2015 -0300
+
+    Task #13214 - Accessibility of the email composition screen
+    
+    - Add the attributes 'id' missing in the elements.
+    - Organize the display of 'Attach File'.
+    
+    Change-Id: I16e442e8b3bd056aaa7cc1d6eee823680b4f5b09
+
+ .../Mail/Template/ComposeMessageTemplate.css       |   14 ++++++--
+ .../Mail/Template/ComposeMessageTemplate.php       |   34 ++++++++++++--------
+ 2 files changed, 32 insertions(+), 16 deletions(-)
+
+commit c197b87780d974b74201fbfb30d0bc7d41ecfefd
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Fri Jun 26 15:45:39 2015 -0300
+
+    Task #13193 - Add link to return to Lite on the login page
+    
+    - Link addedd.
+    - Create css rules for the link.
+    
+    Change-Id: I8b5609bc369563016979ce4cfb9ce29b32741cf4
+
+ .../Accessible/Login/Template/MainTemplate.css     |   18 ++++++++++++++----
+ .../Accessible/Login/Template/MainTemplate.php     |    4 ++++
+ 2 files changed, 18 insertions(+), 4 deletions(-)
+
+commit d7ef0146b92c243a56bf5c264ef8ce1a70da7d7c
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Jun 25 13:46:27 2015 -0300
+
+    Task #13199 - Change brand Expresso Lite to ExpressoBr
+    
+    - All images updated to ExpressoBr brand
+    - New desktop login form
+    - New ugly smartphone screen
+    - All 'Lite' texts replaced with 'Br'
+    
+    Change-Id: I5932507b36a6f75fc15cadc8713c12cd4faa23b4
+
+ .../Core/Template/ShowFeedbackTemplate.css         |    6 +--
+ .../Core/Template/ShowFeedbackTemplate.php         |    2 +-
+ .../Accessible/Login/Template/MainTemplate.php     |    4 +-
+ .../Mail/Template/ComposeMessageTemplate.css       |    6 +--
+ .../Mail/Template/ComposeMessageTemplate.php       |    4 +-
+ .../Accessible/Mail/Template/MainTemplate.css      |    6 +--
+ .../Accessible/Mail/Template/MainTemplate.php      |    6 +--
+ .../Mail/Template/OpenFolderTemplate.css           |    6 +--
+ .../Mail/Template/OpenFolderTemplate.php           |    2 +-
+ .../Mail/Template/OpenMessageTemplate.css          |    6 +--
+ .../Mail/Template/OpenMessageTemplate.php          |    2 +-
+ src/addressbook/WidgetContactList.js               |    2 +-
+ src/addressbook/index.html                         |    2 +-
+ src/img/expressobr_lite.png                        |  Bin 8521 -> 0 bytes
+ src/img/expressobr_lite_200.png                    |  Bin 10762 -> 0 bytes
+ src/img/fondo.jpg                                  |  Bin 170579 -> 85698 bytes
+ src/img/logo-expressobr-bottom.png                 |  Bin 0 -> 13147 bytes
+ src/img/logo-expressobr-internal.png               |  Bin 0 -> 12409 bytes
+ src/img/logo-expressobr-top.png                    |  Bin 0 -> 10743 bytes
+ src/img/logo-lite-165.png                          |  Bin 5652 -> 0 bytes
+ src/inc/Layout.html                                |    2 +-
+ src/index.html                                     |   13 +++--
+ src/login.css                                      |   54 +++++++++++++-------
+ src/login.js                                       |   11 +---
+ src/mail/index.html                                |    2 +-
+ src/mail/mail.js                                   |    2 +-
+ 26 files changed, 73 insertions(+), 65 deletions(-)
+
+commit 87c0ad27d8eec97ea34f564a88cc7267e4ce6b47
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Jun 24 13:04:40 2015 -0300
+
+    Task #13196 - Better highlighted message icon
+    
+    - PNG sprite updated with better icon
+    - Fixed margin issue with throbber
+    - When action succeeds, deselect headlines
+    
+    Change-Id: I99647b8126f7b3ccf8f6d8b4aa33b25d26da4d7f
+
+ src/img/flags.png           |  Bin 1119 -> 1170 bytes
+ src/mail/WidgetHeadlines.js |    4 +++-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+commit e514d64020ac60de66fd2383122c8139c954e78c
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Fri Jun 19 18:16:05 2015 -0300
+
+    Task #13092 - Add 'reply to all' option on accessible
+    
+    - OpenMessageTemplate.php now allow 'reply to all' option.
+    - Alter ComposeMessage.php to distinguish 'reply to all' from 'reply'
+      option.
+    
+    Change-Id: Ic47a63332118b652f261e727fff2a668223c7cd2
+
+ src/accessible/Accessible/Mail/ComposeMessage.php  |   30 +++++++++++++-------
+ src/accessible/Accessible/Mail/OpenMessage.php     |    7 +++++
+ .../Mail/Template/OpenMessageTemplate.php          |    1 +
+ 3 files changed, 27 insertions(+), 11 deletions(-)
+
+commit 9b73d996aa45afcac1e15f6275c95b9057b7a233
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Mon Jun 22 16:22:44 2015 -0300
+
+    Task #13118 - Modify attachment link exhibition on accessible
+    
+    - Add sufix 'abrir anexo' on attachment link text.
+    - Using the attachment name in 'title' link attribute.
+    
+    Change-Id: I444c9b28cc1057fb978217f2cd87763a90c0a953
+
+ .../Mail/Template/OpenMessageTemplate.css          |    1 +
+ .../Mail/Template/OpenMessageTemplate.php          |    6 +++++-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 7388bae4ab7f51d292361afdf4cf79c20b399cab
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Fri Jun 19 17:00:16 2015 -0300
+
+    Task #13097 - Fix loss of user info
+    
+    - Replaced sessionStorage with localStorage to avoid loss of user info
+      when closing and reopening browser window
+    - Mail batch size now is acquired during login to avoid problems when
+      user cleans browser cache with the login screen opened
+    
+    Change-Id: I92d8c2577ee0879dcfd24352e4adc4b40bdcc1b3
+
+ .../Backend/Request/GetAllRegistryData.php         |    1 -
+ src/api/ExpressoLite/Backend/Request/Login.php     |    3 ++-
+ src/inc/App.js                                     |    4 ++--
+ src/login.js                                       |    3 ---
+ 4 files changed, 4 insertions(+), 7 deletions(-)
+
+commit 563572aed06150f1d899135c3d717c182f1c7336
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Fri Jun 19 16:19:07 2015 -0300
+
+    Task #13064 - Date formatting for accessible
+    
+    - DateUtils.php contains date formatting routines.
+    
+    Change-Id: I281454c851113d31ec547335c68c925b0da81986
+
+ src/accessible/Accessible/Core/DateUtils.php       |   68 ++++++++++++++++++++
+ src/accessible/Accessible/Mail/Main.php            |    2 +
+ src/accessible/Accessible/Mail/OpenMessage.php     |    3 +-
+ .../Accessible/Mail/Template/MainTemplate.php      |    2 +-
+ .../Mail/Template/OpenMessageTemplate.php          |    2 +-
+ 5 files changed, 74 insertions(+), 3 deletions(-)
+
+commit 117f7b67c901df81ea9d08f2ebf642b1c4666fc5
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Jun 18 12:55:53 2015 -0300
+
+    Task #13087 - Add 'reply to all' option
+    
+    - Added hooks to 'reply to all' option on WidgetMessage, just like the
+      forwarding option
+    - On WidgetCompose, 'reply' now replies only to original sender
+    - Added option to popup menu on WidgetMessages
+    
+    Change-Id: I66215771a26a4acbee7ad66976a5f7edd964de8e
+
+ src/mail/WidgetCompose.js  |   43 ++++++++++++++++++++++++++++++++++---------
+ src/mail/WidgetMessages.js |    2 ++
+ 2 files changed, 36 insertions(+), 9 deletions(-)
+
+commit 7bd94146b28efda31b57d6b82ddbe501688bff2b
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Tue Jun 16 11:30:12 2015 -0300
+
+    Task #13060 - Unify sender/subject in accessible mailing list
+    
+    - Create an column "Sender / Subject" to unify the displaying of sender
+      and subject information.
+    
+    Change-Id: Ie755c2d94612a6e0296721d5420f10851401e599
+
+ .../Accessible/Mail/Template/MainTemplate.php      |   14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+commit 8af189b39d833bf3ccfffc93e295bda032decffe
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue Jun 16 15:27:10 2015 -0300
+
+    Task #13052 - Fix RpcException
+    
+    - Fixed error that prevented RpcException to be correctly loaded
+    
+    Change-Id: Icd80bbb62ed3ba4585d8aad747cf3321f1aa440b
+
+ .../TineTunnel/Exception/RpcException.php          |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit d3a78899978db7ef99d624e7eeb6eac30f215e10
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Mon Jun 15 12:27:33 2015 -0300
+
+    Task #13048 - Move version number to another file
+    
+    - Moved PACKAGE_STRING constant to a new file named version.php to
+      avoid overwriting during installation in the production environment
+    - Added require version.php in the bootstrap
+    - Added build scripts to repository to ensure they follow the new
+      project structure
+    
+    Change-Id: I3cd9c149ff0258170b27967ec37b3eb73b18db39
+
+ build/build.php                             |   80 +++++++++++++++++++++++++++
+ build/yuicompressor/LICENSE.TXT             |   54 ++++++++++++++++++
+ build/yuicompressor/yuicompressor-2.4.8.jar |  Bin 0 -> 787524 bytes
+ src/api/bootstrap.php                       |    4 +-
+ src/conf.php                                |    3 -
+ src/version.php                             |   14 +++++
+ 6 files changed, 151 insertions(+), 4 deletions(-)
+
+commit 89e60c05076e4f6f39d2f1d88a5969925bc03e79
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Fri Jun 12 10:11:00 2015 -0300
+
+    Task #12712 - Redirect to mail when logged
+    
+    - When the user opens the login screen, we check if there is already
+      an active session. If so, he is redirected to the mail module.
+    
+    Change-Id: I552f13dfeefba24f04887f711b6fd6a88e0cb951
+
+ src/index.html |    2 +-
+ src/login.js   |   18 ++++++++++++++++--
+ 2 files changed, 17 insertions(+), 3 deletions(-)
+
+commit 399215b78d4852ecedfc4d66530908c4ce094884
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Mon Jun 1 16:06:14 2015 -0300
+
+    Task #12678 - Fix cookie forwarding
+    
+    - ExpressoLite is no longer forwarding Tine cookies to the end user
+    - Accessible login now uses the correct ExpressoLite cookie for storing
+      the last user
+    - Accessible module now stores itself the cookie for the last user
+    
+    Change-Id: I1e7b35198c35d16712e261bd562fc0ae0b2b3d98
+
+ src/accessible/Accessible/Login/Login.php       |    9 +++++++++
+ src/accessible/Accessible/Login/Main.php        |    2 +-
+ src/api/ExpressoLite/TineTunnel/TineSession.php |    5 -----
+ 3 files changed, 10 insertions(+), 6 deletions(-)
+
+commit c3bfd7a304307be0593deea42b2c3355321f9861
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue Jun 2 14:37:00 2015 -0300
+
+    Task #12872 - Allow user to inform CAPTCHA
+    
+    - If a TineSession makes a login attempt to Tine that returns a
+      CAPTCHA image, a CaptchaNeededException is thrown
+    - In this case, a the CAPTCHA image and a new field is added to the
+      login screen
+    - Login related methods now allow the user to optionally inform a
+      captcha value in adition to the usual 'user' and 'password' params
+    
+    Change-Id: I651aa039fd2c07a46421ac3b1aa7d050521e0bff
+
+ src/api/ExpressoLite/Backend/Request/Login.php     |   13 ++++++++-
+ .../Exception/CaptchaRequiredException.php         |   28 ++++++++++++++++++++
+ src/api/ExpressoLite/TineTunnel/TineSession.php    |   19 ++++++++-----
+ src/index.html                                     |    4 +++
+ src/login.css                                      |    4 +++
+ src/login.js                                       |   15 +++++++++--
+ 6 files changed, 73 insertions(+), 10 deletions(-)
+
+commit e2f707cef3a0081d013f4513e8b7dfe53de119b9
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Fri Jun 12 10:05:58 2015 -0300
+
+    Task #12936 - Improvement on accessibility feedback messages
+    
+    - Alter showFeedbackTemplate.php to exhibit different feedback message
+      types.
+    - Create css class for each feedback message type.
+    - Alter showfeedback call execution, now specifying the intended
+      feedback message type.
+    - Define an image 48_px_error.png for error feedback message type.
+    
+    Change-Id: Icd3fe9daae3d98e6045bbea920566fcadd38a0f4
+
+ src/accessible/Accessible/Core/ShowFeedback.php    |   16 +++++++++
+ .../Core/Template/ShowFeedbackTemplate.css         |   38 +++++++++-----------
+ .../Core/Template/ShowFeedbackTemplate.php         |    6 ++--
+ src/accessible/Accessible/Login/Login.php          |    2 ++
+ src/accessible/Accessible/Login/Logoff.php         |    2 ++
+ src/accessible/Accessible/Mail/DeleteMessage.php   |    2 ++
+ .../Accessible/Mail/MarkMessageAsUnread.php        |    2 ++
+ src/accessible/Accessible/Mail/SendMessage.php     |    2 ++
+ src/img/48px_error.png                             |  Bin 0 -> 996 bytes
+ 9 files changed, 46 insertions(+), 24 deletions(-)
+
+commit 5f5a6d8386aca16f6268fce2d4ba9152dfd770b0
+Author: Cassiano Dal Pizzol <cassiano.dalpizzol@serpro.gov.br>
+Date:   Wed Jun 3 18:49:54 2015 -0300
+
+    Task #12901 - Move source code to new folders
+    
+    - Moved the expressolite source code to scr folder
+    - Created build and test folders to harbor the package and test files
+    
+    Change-Id: Id1d72018d5ea40f2f89ffee8dc8b55c0c3ff507b
+
+ accessible/Accessible/Core/ShowFeedback.php        |   34 -
+ .../Core/Template/ShowFeedbackTemplate.css         |   86 ---
+ .../Core/Template/ShowFeedbackTemplate.php         |   35 -
+ accessible/Accessible/Dispatcher.php               |   96 ---
+ accessible/Accessible/Handler.php                  |   78 ---
+ accessible/Accessible/Login/Login.php              |   46 --
+ accessible/Accessible/Login/Logoff.php             |   40 --
+ accessible/Accessible/Login/Main.php               |   29 -
+ .../Accessible/Login/Template/MainTemplate.css     |   84 ---
+ .../Accessible/Login/Template/MainTemplate.php     |   41 --
+ accessible/Accessible/Mail/ComposeMessage.php      |  158 -----
+ accessible/Accessible/Mail/DeleteMessage.php       |   62 --
+ accessible/Accessible/Mail/Main.php                |  181 -----
+ accessible/Accessible/Mail/MarkMessageAsUnread.php |   42 --
+ accessible/Accessible/Mail/OpenFolder.php          |   75 --
+ accessible/Accessible/Mail/OpenMessage.php         |   93 ---
+ accessible/Accessible/Mail/SendMessage.php         |  129 ----
+ .../Mail/Template/ComposeMessageTemplate.css       |   94 ---
+ .../Mail/Template/ComposeMessageTemplate.php       |   95 ---
+ .../Accessible/Mail/Template/MainTemplate.css      |  120 ----
+ .../Accessible/Mail/Template/MainTemplate.php      |  123 ----
+ .../Mail/Template/OpenFolderTemplate.css           |   48 --
+ .../Mail/Template/OpenFolderTemplate.php           |   45 --
+ .../Mail/Template/OpenMessageTemplate.css          |   72 --
+ .../Mail/Template/OpenMessageTemplate.php          |   99 ---
+ accessible/bootstrap.php                           |   16 -
+ accessible/index.php                               |   16 -
+ addressbook/WidgetCatalogMenu.css                  |   25 -
+ addressbook/WidgetCatalogMenu.js                   |   54 --
+ addressbook/WidgetContactDetails.css               |  170 -----
+ addressbook/WidgetContactDetails.html              |   37 -
+ addressbook/WidgetContactDetails.js                |  141 ----
+ addressbook/WidgetContactList.css                  |  126 ----
+ addressbook/WidgetContactList.html                 |   26 -
+ addressbook/WidgetContactList.js                   |  322 ---------
+ addressbook/WidgetLetterIndex.css                  |   68 --
+ addressbook/WidgetLetterIndex.js                   |  136 ----
+ addressbook/addressbook.css                        |   82 ---
+ addressbook/addressbook.js                         |  112 ---
+ addressbook/index.html                             |   30 -
+ api/ExpressoLite/Backend/AjaxProcessor.php         |  132 ----
+ .../Backend/Exception/LiteException.php            |   64 --
+ .../Backend/Exception/NoTineSessionException.php   |   30 -
+ api/ExpressoLite/Backend/LiteRequestProcessor.php  |   86 ---
+ .../Backend/Request/ChangeExpiredPassword.php      |   40 --
+ .../Backend/Request/CheckSessionStatus.php         |   65 --
+ .../Backend/Request/DeleteMessages.php             |   34 -
+ .../Backend/Request/DownloadAttachment.php         |  110 ---
+ api/ExpressoLite/Backend/Request/EchoParams.php    |   35 -
+ .../Backend/Request/GetAllRegistryData.php         |   44 --
+ api/ExpressoLite/Backend/Request/GetContact.php    |   49 --
+ .../Request/GetContactCatalogsCategories.php       |   35 -
+ .../Backend/Request/GetContactsByFilter.php        |  153 ----
+ api/ExpressoLite/Backend/Request/GetMessage.php    |  152 ----
+ .../Backend/Request/GetPersonalContacts.php        |   71 --
+ api/ExpressoLite/Backend/Request/JoinTempFiles.php |   31 -
+ api/ExpressoLite/Backend/Request/LiteRequest.php   |  193 -----
+ api/ExpressoLite/Backend/Request/Login.php         |   55 --
+ api/ExpressoLite/Backend/Request/Logoff.php        |   27 -
+ .../Backend/Request/MarkAsHighlighted.php          |   30 -
+ api/ExpressoLite/Backend/Request/MarkAsRead.php    |   30 -
+ api/ExpressoLite/Backend/Request/MoveMessages.php  |   30 -
+ api/ExpressoLite/Backend/Request/SaveMessage.php   |   78 ---
+ .../Backend/Request/SaveMessageDraft.php           |   90 ---
+ .../Backend/Request/SearchContactsByEmail.php      |  158 -----
+ .../Backend/Request/SearchContactsByToken.php      |   57 --
+ api/ExpressoLite/Backend/Request/SearchFolders.php |   89 ---
+ .../Backend/Request/SearchHeadlines.php            |  150 ----
+ .../Backend/Request/UpdateMessageCache.php         |   35 -
+ .../Backend/Request/UploadTempFile.php             |   38 -
+ .../Backend/Request/Utils/MessageUtils.php         |  204 ------
+ api/ExpressoLite/Backend/TineSessionRepository.php |  100 ---
+ api/ExpressoLite/TineTunnel/CookieHandler.php      |   31 -
+ .../TineTunnel/Exception/RpcException.php          |   19 -
+ .../TineTunnel/Exception/TineTunnelException.php   |   19 -
+ api/ExpressoLite/TineTunnel/JsonRpc.php            |   82 ---
+ api/ExpressoLite/TineTunnel/Request.php            |  331 ---------
+ api/ExpressoLite/TineTunnel/TineJsonRpc.php        |  163 -----
+ api/ExpressoLite/TineTunnel/TineSession.php        |  348 ---------
+ api/SplClassLoader.php                             |  155 ----
+ api/ajax.php                                       |   17 -
+ api/bootstrap.php                                  |   24 -
+ build/README                                       |    1 +
+ conf.php                                           |   31 -
+ img/72px_Alert.png                                 |  Bin 3172 -> 0 bytes
+ img/72px_ok.png                                    |  Bin 3419 -> 0 bytes
+ img/arrows.png                                     |  Bin 164 -> 0 bytes
+ img/bg-acess-key.png                               |  Bin 118 -> 0 bytes
+ img/check0.png                                     |  Bin 168 -> 0 bytes
+ img/check1.png                                     |  Bin 339 -> 0 bytes
+ img/chromiumthrobber.svg                           |    5 -
+ img/e_mail.png                                     |  Bin 739 -> 0 bytes
+ img/expressobr_lite.png                            |  Bin 8521 -> 0 bytes
+ img/expressobr_lite_200.png                        |  Bin 10762 -> 0 bytes
+ img/favicon.png                                    |  Bin 641 -> 0 bytes
+ img/flags.png                                      |  Bin 1119 -> 0 bytes
+ img/fondo.jpg                                      |  Bin 170579 -> 0 bytes
+ img/index.php                                      |    1 -
+ img/layout-icons32.png                             |  Bin 3177 -> 0 bytes
+ img/logo-lite-165.png                              |  Bin 5652 -> 0 bytes
+ img/mobile.png                                     |  Bin 488 -> 0 bytes
+ img/page_ear.png                                   |  Bin 1233 -> 0 bytes
+ img/page_ear_selected.png                          |  Bin 1218 -> 0 bytes
+ img/person-generic.gif                             |  Bin 2153 -> 0 bytes
+ img/person-gmail.png                               |  Bin 904 -> 0 bytes
+ img/person-govbr.png                               |  Bin 1572 -> 0 bytes
+ img/person-outlook.png                             |  Bin 742 -> 0 bytes
+ img/person-yahoo.png                               |  Bin 1117 -> 0 bytes
+ img/person-zabbix.png                              |  Bin 717 -> 0 bytes
+ img/phone.png                                      |  Bin 657 -> 0 bytes
+ img/store-apple.png                                |  Bin 6991 -> 0 bytes
+ img/store-play.png                                 |  Bin 6831 -> 0 bytes
+ img/universal-access.png                           |  Bin 4378 -> 0 bytes
+ inc/App.js                                         |  131 ----
+ inc/Contacts.js                                    |  140 ----
+ inc/ContextMenu.css                                |   20 -
+ inc/ContextMenu.js                                 |  167 -----
+ inc/DateFormat.js                                  |   72 --
+ inc/Dialog.css                                     |   22 -
+ inc/Dialog.html                                    |   23 -
+ inc/Dialog.js                                      |  299 --------
+ inc/Layout.css                                     |   81 ---
+ inc/Layout.html                                    |   32 -
+ inc/Layout.js                                      |  253 -------
+ inc/SearchContacts.css                             |   24 -
+ inc/SearchContacts.html                            |   28 -
+ inc/SearchContacts.js                              |  269 -------
+ inc/UploadFile.js                                  |   89 ---
+ inc/UrlStack.js                                    |   48 --
+ inc/general.css                                    |   56 --
+ inc/jquery.min.js                                  |    4 -
+ inc/require.min.js                                 |   36 -
+ index.html                                         |   61 --
+ login.css                                          |   40 --
+ login.js                                           |  207 ------
+ mail/Contacts.js                                   |  146 ----
+ mail/ThreadMail.js                                 |  250 -------
+ mail/WidgetAttacher.css                            |   19 -
+ mail/WidgetAttacher.html                           |   27 -
+ mail/WidgetAttacher.js                             |  135 ----
+ mail/WidgetCompose.css                             |   36 -
+ mail/WidgetCompose.html                            |   33 -
+ mail/WidgetCompose.js                              |  543 --------------
+ mail/WidgetFolders.css                             |   31 -
+ mail/WidgetFolders.js                              |  291 --------
+ mail/WidgetHeadlines.css                           |   39 --
+ mail/WidgetHeadlines.html                          |   21 -
+ mail/WidgetHeadlines.js                            |  740 --------------------
+ mail/WidgetMessages.css                            |   54 --
+ mail/WidgetMessages.html                           |   42 --
+ mail/WidgetMessages.js                             |  490 -------------
+ mail/WidgetSearchAddr.css                          |   16 -
+ mail/WidgetSearchAddr.html                         |   18 -
+ mail/WidgetSearchAddr.js                           |  166 -----
+ mail/index.html                                    |   60 --
+ mail/mail.css                                      |   61 --
+ mail/mail.js                                       |  370 ----------
+ src/accessible/Accessible/Core/ShowFeedback.php    |   34 +
+ .../Core/Template/ShowFeedbackTemplate.css         |   86 +++
+ .../Core/Template/ShowFeedbackTemplate.php         |   35 +
+ src/accessible/Accessible/Dispatcher.php           |   96 +++
+ src/accessible/Accessible/Handler.php              |   78 +++
+ src/accessible/Accessible/Login/Login.php          |   46 ++
+ src/accessible/Accessible/Login/Logoff.php         |   40 ++
+ src/accessible/Accessible/Login/Main.php           |   29 +
+ .../Accessible/Login/Template/MainTemplate.css     |   84 +++
+ .../Accessible/Login/Template/MainTemplate.php     |   41 ++
+ src/accessible/Accessible/Mail/ComposeMessage.php  |  158 +++++
+ src/accessible/Accessible/Mail/DeleteMessage.php   |   62 ++
+ src/accessible/Accessible/Mail/Main.php            |  181 +++++
+ .../Accessible/Mail/MarkMessageAsUnread.php        |   42 ++
+ src/accessible/Accessible/Mail/OpenFolder.php      |   75 ++
+ src/accessible/Accessible/Mail/OpenMessage.php     |   93 +++
+ src/accessible/Accessible/Mail/SendMessage.php     |  129 ++++
+ .../Mail/Template/ComposeMessageTemplate.css       |   94 +++
+ .../Mail/Template/ComposeMessageTemplate.php       |   95 +++
+ .../Accessible/Mail/Template/MainTemplate.css      |  120 ++++
+ .../Accessible/Mail/Template/MainTemplate.php      |  123 ++++
+ .../Mail/Template/OpenFolderTemplate.css           |   48 ++
+ .../Mail/Template/OpenFolderTemplate.php           |   45 ++
+ .../Mail/Template/OpenMessageTemplate.css          |   72 ++
+ .../Mail/Template/OpenMessageTemplate.php          |   99 +++
+ src/accessible/bootstrap.php                       |   16 +
+ src/accessible/index.php                           |   16 +
+ src/addressbook/WidgetCatalogMenu.css              |   25 +
+ src/addressbook/WidgetCatalogMenu.js               |   54 ++
+ src/addressbook/WidgetContactDetails.css           |  170 +++++
+ src/addressbook/WidgetContactDetails.html          |   37 +
+ src/addressbook/WidgetContactDetails.js            |  141 ++++
+ src/addressbook/WidgetContactList.css              |  126 ++++
+ src/addressbook/WidgetContactList.html             |   26 +
+ src/addressbook/WidgetContactList.js               |  322 +++++++++
+ src/addressbook/WidgetLetterIndex.css              |   68 ++
+ src/addressbook/WidgetLetterIndex.js               |  136 ++++
+ src/addressbook/addressbook.css                    |   82 +++
+ src/addressbook/addressbook.js                     |  112 +++
+ src/addressbook/index.html                         |   30 +
+ src/api/ExpressoLite/Backend/AjaxProcessor.php     |  132 ++++
+ .../Backend/Exception/LiteException.php            |   64 ++
+ .../Backend/Exception/NoTineSessionException.php   |   30 +
+ .../ExpressoLite/Backend/LiteRequestProcessor.php  |   86 +++
+ .../Backend/Request/ChangeExpiredPassword.php      |   40 ++
+ .../Backend/Request/CheckSessionStatus.php         |   65 ++
+ .../Backend/Request/DeleteMessages.php             |   34 +
+ .../Backend/Request/DownloadAttachment.php         |  110 +++
+ .../ExpressoLite/Backend/Request/EchoParams.php    |   35 +
+ .../Backend/Request/GetAllRegistryData.php         |   44 ++
+ .../ExpressoLite/Backend/Request/GetContact.php    |   49 ++
+ .../Request/GetContactCatalogsCategories.php       |   35 +
+ .../Backend/Request/GetContactsByFilter.php        |  153 ++++
+ .../ExpressoLite/Backend/Request/GetMessage.php    |  152 ++++
+ .../Backend/Request/GetPersonalContacts.php        |   71 ++
+ .../ExpressoLite/Backend/Request/JoinTempFiles.php |   31 +
+ .../ExpressoLite/Backend/Request/LiteRequest.php   |  193 +++++
+ src/api/ExpressoLite/Backend/Request/Login.php     |   55 ++
+ src/api/ExpressoLite/Backend/Request/Logoff.php    |   27 +
+ .../Backend/Request/MarkAsHighlighted.php          |   30 +
+ .../ExpressoLite/Backend/Request/MarkAsRead.php    |   30 +
+ .../ExpressoLite/Backend/Request/MoveMessages.php  |   30 +
+ .../ExpressoLite/Backend/Request/SaveMessage.php   |   78 +++
+ .../Backend/Request/SaveMessageDraft.php           |   90 +++
+ .../Backend/Request/SearchContactsByEmail.php      |  158 +++++
+ .../Backend/Request/SearchContactsByToken.php      |   57 ++
+ .../ExpressoLite/Backend/Request/SearchFolders.php |   89 +++
+ .../Backend/Request/SearchHeadlines.php            |  150 ++++
+ .../Backend/Request/UpdateMessageCache.php         |   35 +
+ .../Backend/Request/UploadTempFile.php             |   38 +
+ .../Backend/Request/Utils/MessageUtils.php         |  204 ++++++
+ .../ExpressoLite/Backend/TineSessionRepository.php |  100 +++
+ src/api/ExpressoLite/TineTunnel/CookieHandler.php  |   31 +
+ .../TineTunnel/Exception/RpcException.php          |   19 +
+ .../TineTunnel/Exception/TineTunnelException.php   |   19 +
+ src/api/ExpressoLite/TineTunnel/JsonRpc.php        |   82 +++
+ src/api/ExpressoLite/TineTunnel/Request.php        |  331 +++++++++
+ src/api/ExpressoLite/TineTunnel/TineJsonRpc.php    |  163 +++++
+ src/api/ExpressoLite/TineTunnel/TineSession.php    |  348 +++++++++
+ src/api/SplClassLoader.php                         |  155 ++++
+ src/api/ajax.php                                   |   17 +
+ src/api/bootstrap.php                              |   24 +
+ src/conf.php                                       |   31 +
+ src/img/72px_Alert.png                             |  Bin 0 -> 3172 bytes
+ src/img/72px_ok.png                                |  Bin 0 -> 3419 bytes
+ src/img/arrows.png                                 |  Bin 0 -> 164 bytes
+ src/img/bg-acess-key.png                           |  Bin 0 -> 118 bytes
+ src/img/check0.png                                 |  Bin 0 -> 168 bytes
+ src/img/check1.png                                 |  Bin 0 -> 339 bytes
+ src/img/chromiumthrobber.svg                       |    5 +
+ src/img/e_mail.png                                 |  Bin 0 -> 739 bytes
+ src/img/expressobr_lite.png                        |  Bin 0 -> 8521 bytes
+ src/img/expressobr_lite_200.png                    |  Bin 0 -> 10762 bytes
+ src/img/favicon.png                                |  Bin 0 -> 641 bytes
+ src/img/flags.png                                  |  Bin 0 -> 1119 bytes
+ src/img/fondo.jpg                                  |  Bin 0 -> 170579 bytes
+ src/img/index.php                                  |    1 +
+ src/img/layout-icons32.png                         |  Bin 0 -> 3177 bytes
+ src/img/logo-lite-165.png                          |  Bin 0 -> 5652 bytes
+ src/img/mobile.png                                 |  Bin 0 -> 488 bytes
+ src/img/page_ear.png                               |  Bin 0 -> 1233 bytes
+ src/img/page_ear_selected.png                      |  Bin 0 -> 1218 bytes
+ src/img/person-generic.gif                         |  Bin 0 -> 2153 bytes
+ src/img/person-gmail.png                           |  Bin 0 -> 904 bytes
+ src/img/person-govbr.png                           |  Bin 0 -> 1572 bytes
+ src/img/person-outlook.png                         |  Bin 0 -> 742 bytes
+ src/img/person-yahoo.png                           |  Bin 0 -> 1117 bytes
+ src/img/person-zabbix.png                          |  Bin 0 -> 717 bytes
+ src/img/phone.png                                  |  Bin 0 -> 657 bytes
+ src/img/store-apple.png                            |  Bin 0 -> 6991 bytes
+ src/img/store-play.png                             |  Bin 0 -> 6831 bytes
+ src/img/universal-access.png                       |  Bin 0 -> 4378 bytes
+ src/inc/App.js                                     |  131 ++++
+ src/inc/Contacts.js                                |  140 ++++
+ src/inc/ContextMenu.css                            |   20 +
+ src/inc/ContextMenu.js                             |  167 +++++
+ src/inc/DateFormat.js                              |   72 ++
+ src/inc/Dialog.css                                 |   22 +
+ src/inc/Dialog.html                                |   23 +
+ src/inc/Dialog.js                                  |  299 ++++++++
+ src/inc/Layout.css                                 |   81 +++
+ src/inc/Layout.html                                |   32 +
+ src/inc/Layout.js                                  |  253 +++++++
+ src/inc/SearchContacts.css                         |   24 +
+ src/inc/SearchContacts.html                        |   28 +
+ src/inc/SearchContacts.js                          |  269 +++++++
+ src/inc/UploadFile.js                              |   89 +++
+ src/inc/UrlStack.js                                |   48 ++
+ src/inc/general.css                                |   56 ++
+ src/inc/jquery.min.js                              |    4 +
+ src/inc/require.min.js                             |   36 +
+ src/index.html                                     |   61 ++
+ src/login.css                                      |   40 ++
+ src/login.js                                       |  207 ++++++
+ src/mail/Contacts.js                               |  146 ++++
+ src/mail/ThreadMail.js                             |  250 +++++++
+ src/mail/WidgetAttacher.css                        |   19 +
+ src/mail/WidgetAttacher.html                       |   27 +
+ src/mail/WidgetAttacher.js                         |  135 ++++
+ src/mail/WidgetCompose.css                         |   36 +
+ src/mail/WidgetCompose.html                        |   33 +
+ src/mail/WidgetCompose.js                          |  543 ++++++++++++++
+ src/mail/WidgetFolders.css                         |   31 +
+ src/mail/WidgetFolders.js                          |  291 ++++++++
+ src/mail/WidgetHeadlines.css                       |   39 ++
+ src/mail/WidgetHeadlines.html                      |   21 +
+ src/mail/WidgetHeadlines.js                        |  740 ++++++++++++++++++++
+ src/mail/WidgetMessages.css                        |   54 ++
+ src/mail/WidgetMessages.html                       |   42 ++
+ src/mail/WidgetMessages.js                         |  490 +++++++++++++
+ src/mail/WidgetSearchAddr.css                      |   16 +
+ src/mail/WidgetSearchAddr.html                     |   18 +
+ src/mail/WidgetSearchAddr.js                       |  166 +++++
+ src/mail/index.html                                |   60 ++
+ src/mail/mail.css                                  |   61 ++
+ src/mail/mail.js                                   |  370 ++++++++++
+ tests/README                                       |    1 +
+ 314 files changed, 12779 insertions(+), 12777 deletions(-)
+
+commit 1ab2a58f38990010af03c9b20b3b510f1e7cb85e
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue Jun 9 10:13:28 2015 -0300
+
+    Task #12934 - Add .gitignore to Expresso Lite
+    
+    - Created a .gitignore file to avoid the addition of IDE specific
+      files to the project
+    
+    Change-Id: I74500f8d5a6e6df54a50bba86b241c8db0a567b1
+
+ .gitignore |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit f19764df0b00e4d349940da8a7c16d9d61fa79cd
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue May 19 15:55:51 2015 -0300
+
+    Task #12539 - Remove blinking store badges
+    
+    - Store badges are now hidden with CSS instead of JS to avoid blinking
+      effect
+    
+    Change-Id: Ic4079e8f4172cadca64c22ed958f0c5dc67e94e6
+
+ inc/general.css |    4 +++-
+ index.html      |    4 ++--
+ login.js        |    1 -
+ 3 files changed, 5 insertions(+), 4 deletions(-)
+
+commit a0248216913d27ce0154d9337930d9ae0f9953ca
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Jun 2 15:43:01 2015 -0300
+
+    Task #12820 - Added attachment upload for accessible
+    
+    - Added 3 file upload slots to compose message form
+    - Added attachment handling on save message class
+    - Adjusted message body text formatting
+    - Decoupled API save attachment routine
+    
+    Change-Id: I65e54ca4b8bdbc803e94e3c3a4838334edf4e0d9
+
+ accessible/Accessible/Mail/SendMessage.php         |   78 ++++++++++++++------
+ .../Mail/Template/ComposeMessageTemplate.css       |    9 ++-
+ .../Mail/Template/ComposeMessageTemplate.php       |   12 ++-
+ .../Backend/Request/UploadTempFile.php             |   35 +--------
+ .../Backend/Request/Utils/MessageUtils.php         |   29 +++++++-
+ 5 files changed, 107 insertions(+), 56 deletions(-)
+
+commit fadc418dd3a4dde03251c232a8af8d278872fc18
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Fri May 29 17:02:07 2015 -0300
+
+    Task #12851 - Lite: Fix message deleting problem
+    
+    - Delete email does not use $globalName variable anymore
+    - Delete email now validates the current user's folder only by folderId
+    
+    Change-Id: Icb724e7b6bff488fc70be8c71ac71040d21c7939
+
+ accessible/Accessible/Mail/DeleteMessage.php |   14 ++++++++++++--
+ accessible/Accessible/Mail/Main.php          |    5 -----
+ accessible/Accessible/Mail/OpenMessage.php   |    2 --
+ 3 files changed, 12 insertions(+), 9 deletions(-)
+
+commit 8ae64e2c52925d5cc6e4b1eb4d2345ff9fcd949d
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Thu May 28 15:36:25 2015 -0300
+
+    Task #12760 - Lite: Fix accessible reply email
+    
+    - Correctly filling out the field recipient copy on reply email
+      functionality
+    
+    Change-Id: I4cab2130bf5292b70a1d0c71796ca0f0d0d47e79
+
+ .../Mail/Template/ComposeMessageTemplate.php       |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5dafb251564bd405b41b8b7f549b3d3e3bf00121
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon May 25 12:09:56 2015 -0300
+
+    Task #12686 - Lite: Add link to accessible login
+    
+    - Added link to accessibility module on login page
+    - Added universal access standard icon
+    
+    Change-Id: Ibfc6433e8103772dd209db21a5f37026598f4968
+
+ img/universal-access.png |  Bin 0 -> 4378 bytes
+ index.html               |    3 +++
+ login.css                |    5 +++++
+ 3 files changed, 8 insertions(+)
+
+commit 0303e4cba6c8d6c4163149ef7ab3718f04fa1685
+Author: Diogo Santos <diogo.santos@serpro.gov.br>
+Date:   Fri May 29 14:41:39 2015 -0300
+
+    Task #12840 - Lite: Fix message body formatting error
+    
+    - Now correctly validating $msg variable, when this is null
+    
+    Change-Id: Iaf7913059cbbb5ded17475eefa93debde4894197
+
+ accessible/Accessible/Mail/ComposeMessage.php |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit ca7b4ca3f8ea08ca8e4ac876023269a4c8338873
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu May 28 13:16:06 2015 -0300
+
+    Task #12710 - Lite: Added accessible attachment download
+    
+    - Added processing for each attachment in message, if any
+    - Added attachment links on message reading page
+    
+    Change-Id: I2e261613bd8d278ea5ea6941ce30700a5711c360
+
+ accessible/Accessible/Mail/OpenMessage.php         |   19 +++++++++++++++++++
+ .../Mail/Template/OpenMessageTemplate.php          |    9 ++++++++-
+ 2 files changed, 27 insertions(+), 1 deletion(-)
+
+commit 93873405100edd831aef57e391cf1ca5709a79a4
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri May 22 11:11:00 2015 -0300
+
+    Task #12664 - Lite: Fix pull down on Firefox Android
+    
+    - Pull down to refresh is now disabled only if application is not
+      running on Firefox Android
+    
+    Change-Id: Ia7de913b663d482260d4c316d5ad1c8d73a215e4
+
+ inc/App.js |   47 +++++++++++++++++++++++++++--------------------
+ 1 file changed, 27 insertions(+), 20 deletions(-)
+
+commit b88c0fc672a315aa768dbdede0be83e57c54bf8a
+Author: Edgar Lucca <edgar.lucca@serpro.gov.br>
+Date:   Thu Apr 30 16:06:00 2015 -0300
+
+    Task #12467 - Lite: Add accessibility module
+    
+    - Added accessibility module with first features: list folders, list
+      messages within folder, read/write/delete messages
+    - Added Dispatcher.php which receives http requests to an appropriate
+      handler
+    - Handlers process requests and invoke templates to output results
+    
+    Change-Id: I46c6813bf4ba8b90de058131d77f7493dcbf03a4
+
+ accessible/Accessible/Core/ShowFeedback.php        |   34 ++++
+ .../Core/Template/ShowFeedbackTemplate.css         |   86 +++++++++
+ .../Core/Template/ShowFeedbackTemplate.php         |   35 ++++
+ accessible/Accessible/Dispatcher.php               |   96 ++++++++++
+ accessible/Accessible/Handler.php                  |   78 ++++++++
+ accessible/Accessible/Login/Login.php              |   46 +++++
+ accessible/Accessible/Login/Logoff.php             |   40 +++++
+ accessible/Accessible/Login/Main.php               |   29 +++
+ .../Accessible/Login/Template/MainTemplate.css     |   84 +++++++++
+ .../Accessible/Login/Template/MainTemplate.php     |   41 +++++
+ accessible/Accessible/Mail/ComposeMessage.php      |  154 ++++++++++++++++
+ accessible/Accessible/Mail/DeleteMessage.php       |   52 ++++++
+ accessible/Accessible/Mail/Main.php                |  186 ++++++++++++++++++++
+ accessible/Accessible/Mail/MarkMessageAsUnread.php |   42 +++++
+ accessible/Accessible/Mail/OpenFolder.php          |   75 ++++++++
+ accessible/Accessible/Mail/OpenMessage.php         |   76 ++++++++
+ accessible/Accessible/Mail/SendMessage.php         |   95 ++++++++++
+ .../Mail/Template/ComposeMessageTemplate.css       |   87 +++++++++
+ .../Mail/Template/ComposeMessageTemplate.php       |   85 +++++++++
+ .../Accessible/Mail/Template/MainTemplate.css      |  120 +++++++++++++
+ .../Accessible/Mail/Template/MainTemplate.php      |  123 +++++++++++++
+ .../Mail/Template/OpenFolderTemplate.css           |   48 +++++
+ .../Mail/Template/OpenFolderTemplate.php           |   45 +++++
+ .../Mail/Template/OpenMessageTemplate.css          |   72 ++++++++
+ .../Mail/Template/OpenMessageTemplate.php          |   92 ++++++++++
+ accessible/bootstrap.php                           |   16 ++
+ accessible/index.php                               |   16 ++
+ api/ExpressoLite/Backend/Request/GetMessage.php    |   13 +-
+ api/ExpressoLite/Backend/Request/SearchFolders.php |    2 +-
+ api/ExpressoLite/TineTunnel/TineSession.php        |    2 +-
+ api/SplClassLoader.php                             |    2 +-
+ img/72px_Alert.png                                 |  Bin 0 -> 3172 bytes
+ img/72px_ok.png                                    |  Bin 0 -> 3419 bytes
+ img/bg-acess-key.png                               |  Bin 0 -> 118 bytes
+ img/expressobr_lite.png                            |  Bin 0 -> 8521 bytes
+ img/expressobr_lite_200.png                        |  Bin 0 -> 10762 bytes
+ 36 files changed, 1968 insertions(+), 4 deletions(-)
+
+commit b626b2a08de0ebfb793353b0887dc959f350fd08
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue May 19 13:30:22 2015 -0300
+
+    Task #12540 - Lite: AB: Add phone number links
+    
+    - Phone numbers are now shown as a 'tel:' links when they are
+      displayed in mobile devices
+    
+    Change-Id: I7c822d9f87998f4d3ba6eab45a9a53e78ca1392a
+
+ addressbook/WidgetContactDetails.css |    5 +++++
+ addressbook/WidgetContactDetails.js  |   14 ++++++++++++--
+ 2 files changed, 17 insertions(+), 2 deletions(-)
+
+commit 91f513312bee2022ea2d4b5627c4e3ab8876ea9d
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue May 19 16:26:55 2015 -0300
+
+    Task #12526 - Lite: Fix problems with attachments
+    
+    - Fixed broken code that dealed with attachment mimetype
+    - Added 'Content-Disposition' header even when file is of a known
+      type, so it's name is displayed correctly when displayed in browser
+    
+    Change-Id: I2ae72f8a2fe7bcd2937794af22ebc6ab839072ef
+
+ .../Backend/Request/DownloadAttachment.php         |    8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+commit 3c8d92123e1ee859efc2b0ddbc7f02e77665fa15
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Fri May 8 10:32:30 2015 -0300
+
+    Task #12488 - Lite: Fix paging for second search in addressbook
+    
+    - Relocated binding for the "load more" button's onclick event to make
+      it work even in subsequent searches
+    
+    Change-Id: I95b3cb7cf045a32b21ebc9167b81440837c9ca3f
+
+ addressbook/WidgetContactList.js |   10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+commit 64fd99dba9ca2897924661728fbe70d16da299d5
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu May 7 12:55:12 2015 -0300
+
+    Task #12487 - Lite: Fix Play/Apple badges, links on login page
+    
+    - #links container renamed to #externalLinks
+    - Removed duplicated copyright comments
+    - Fade-in added to badges, links and info containers, all in sync
+    - Hide/show logic handled only by JS, not CSS
+    
+    Change-Id: If0e1103387940f651a9449ca518096c2be2547d2
+
+ index.html |    8 +++----
+ login.css  |    6 ++---
+ login.js   |   72 +++++++++++++++++++++++++++---------------------------------
+ 3 files changed, 39 insertions(+), 47 deletions(-)
+
+commit da729ba6198569f711616ccc35e128678d822f86
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Fri May 8 10:05:02 2015 -0300
+
+    Task #12489 - Lite: Add favicon to addressbook
+    
+    - Added ExpressoLite favicon to addressbook module
+    
+    Change-Id: I4188f7a36ea1747569b1c60cc98b943d3011ab00
+
+ addressbook/index.html |    1 +
+ 1 file changed, 1 insertion(+)
+
+commit 9d94ef67acc1e8db7acf629d7fb63430a418e12e
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Wed May 6 15:23:51 2015 -0300
+
+    Task #12485 - Lite: Fix file upload and download
+    
+    - Fixed AJAX url used for file upload in WidgetAttacher
+    - Fixed url used for displaying inline attachments
+    
+    Change-Id: I334dfbe5cc0b26da03985095786e8b6fe44bea1f
+
+ api/ExpressoLite/Backend/Request/GetMessage.php |    2 +-
+ mail/WidgetAttacher.js                          |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit af13790172b8018f0fe72654364dbb4ebb1a0738
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Wed Mar 4 14:23:12 2015 -0300
+
+    Task #11063 - Lite: Add Addressbook module
+    
+    - Added new module under folder addressbook
+    - Added backend request handlers relevant to the addressbook module
+    - Contains WidgetCatalogMenu, which shows options for personal and
+      corporate catalogs
+    - Contains WidgetLetterIndex, which allows for quick navigation based
+      on the name initials
+    - Contains WidgetContactList, which effectivily shows a the list of
+      contacts based on current filters
+    - Contains WidgetContactDetails, which shows all information of a
+      specific contact
+    
+    Change-Id: I24da2cd948c34d82b010c6e9774da93a299b05fa
+
+ addressbook/WidgetCatalogMenu.css                  |   25 ++
+ addressbook/WidgetCatalogMenu.js                   |   54 ++++
+ addressbook/WidgetContactDetails.css               |  165 ++++++++++
+ addressbook/WidgetContactDetails.html              |   37 +++
+ addressbook/WidgetContactDetails.js                |  131 ++++++++
+ addressbook/WidgetContactList.css                  |  126 ++++++++
+ addressbook/WidgetContactList.html                 |   26 ++
+ addressbook/WidgetContactList.js                   |  324 ++++++++++++++++++++
+ addressbook/WidgetLetterIndex.css                  |   68 ++++
+ addressbook/WidgetLetterIndex.js                   |  136 ++++++++
+ addressbook/addressbook.css                        |   82 +++++
+ addressbook/addressbook.js                         |  112 +++++++
+ addressbook/index.html                             |   29 ++
+ .../Backend/Request/CheckSessionStatus.php         |   65 ++++
+ api/ExpressoLite/Backend/Request/GetContact.php    |   49 +++
+ .../Request/GetContactCatalogsCategories.php       |   35 +++
+ .../Backend/Request/GetContactsByFilter.php        |  153 +++++++++
+ .../Backend/Request/Utils/MessageUtils.php         |   35 +++
+ api/ExpressoLite/TineTunnel/TineSession.php        |    1 +
+ img/e_mail.png                                     |  Bin 0 -> 739 bytes
+ img/mobile.png                                     |  Bin 0 -> 488 bytes
+ img/page_ear.png                                   |  Bin 0 -> 1233 bytes
+ img/page_ear_selected.png                          |  Bin 0 -> 1218 bytes
+ img/phone.png                                      |  Bin 0 -> 657 bytes
+ inc/Layout.html                                    |    3 +-
+ 25 files changed, 1654 insertions(+), 2 deletions(-)
+
+commit a10fbe083580563d794c0747cbfea5d4c856ec1b
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Apr 29 15:54:14 2015 -0300
+
+    Task #12466 - Lite: Fix mobile pull-down-to-refresh feature
+    
+    - Added touch handlers to prevent refresh on pull down, will execute for
+      all modules
+    
+    Change-Id: Ib4e452976c3aff5aaa916a9f21a4438bbaa100b3
+
+ inc/App.js |   35 +++++++++++++++++++++++++++++++----
+ 1 file changed, 31 insertions(+), 4 deletions(-)
+
+commit 435bff3517e2c6cb8da958478ab14d51a3498fcd
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Fri Apr 17 17:26:01 2015 -0300
+
+    Task #12327 - Lite: Separate PHP and HTML
+    
+    - Created a folder named "api" to store all PHP code
+    - Created api/ajax.php, which receives all AJAX requests
+    - Removed PHP code from all index files
+    - Made adaptations in other files so the lost PHP functionality
+      would be covered by JS
+    
+    Change-Id: I78c52329c3c640bcdebb6db1c5c44b0bb704e801
+
+ api/ExpressoLite/Backend/AjaxProcessor.php         |  132 ++++++++
+ .../Backend/Exception/LiteException.php            |   64 ++++
+ .../Backend/Exception/NoTineSessionException.php   |   30 ++
+ api/ExpressoLite/Backend/LiteRequestProcessor.php  |   86 +++++
+ .../Backend/Request/ChangeExpiredPassword.php      |   40 +++
+ .../Backend/Request/DeleteMessages.php             |   34 ++
+ .../Backend/Request/DownloadAttachment.php         |  108 ++++++
+ api/ExpressoLite/Backend/Request/EchoParams.php    |   35 ++
+ .../Backend/Request/GetAllRegistryData.php         |   44 +++
+ api/ExpressoLite/Backend/Request/GetMessage.php    |  141 ++++++++
+ .../Backend/Request/GetPersonalContacts.php        |   71 ++++
+ api/ExpressoLite/Backend/Request/JoinTempFiles.php |   31 ++
+ api/ExpressoLite/Backend/Request/LiteRequest.php   |  193 +++++++++++
+ api/ExpressoLite/Backend/Request/Login.php         |   55 ++++
+ api/ExpressoLite/Backend/Request/Logoff.php        |   27 ++
+ .../Backend/Request/MarkAsHighlighted.php          |   30 ++
+ api/ExpressoLite/Backend/Request/MarkAsRead.php    |   30 ++
+ api/ExpressoLite/Backend/Request/MoveMessages.php  |   30 ++
+ api/ExpressoLite/Backend/Request/SaveMessage.php   |   78 +++++
+ .../Backend/Request/SaveMessageDraft.php           |   90 +++++
+ .../Backend/Request/SearchContactsByEmail.php      |  158 +++++++++
+ .../Backend/Request/SearchContactsByToken.php      |   57 ++++
+ api/ExpressoLite/Backend/Request/SearchFolders.php |   89 +++++
+ .../Backend/Request/SearchHeadlines.php            |  150 +++++++++
+ .../Backend/Request/UpdateMessageCache.php         |   35 ++
+ .../Backend/Request/UploadTempFile.php             |   65 ++++
+ .../Backend/Request/Utils/MessageUtils.php         |  142 ++++++++
+ api/ExpressoLite/Backend/TineSessionRepository.php |  100 ++++++
+ api/ExpressoLite/TineTunnel/CookieHandler.php      |   31 ++
+ .../TineTunnel/Exception/RpcException.php          |   19 ++
+ .../TineTunnel/Exception/TineTunnelException.php   |   19 ++
+ api/ExpressoLite/TineTunnel/JsonRpc.php            |   82 +++++
+ api/ExpressoLite/TineTunnel/Request.php            |  331 +++++++++++++++++++
+ api/ExpressoLite/TineTunnel/TineJsonRpc.php        |  163 +++++++++
+ api/ExpressoLite/TineTunnel/TineSession.php        |  347 ++++++++++++++++++++
+ api/SplClassLoader.php                             |  155 +++++++++
+ api/ajax.php                                       |   17 +
+ api/bootstrap.php                                  |   24 ++
+ conf.php                                           |    7 +-
+ inc/App.js                                         |   51 ++-
+ inc/ExpressoLite/Backend/AjaxProcessor.php         |  132 --------
+ .../Backend/Exception/LiteException.php            |   64 ----
+ .../Backend/Exception/NoTineSessionException.php   |   30 --
+ inc/ExpressoLite/Backend/LiteRequestProcessor.php  |   86 -----
+ .../Backend/Request/ChangeExpiredPassword.php      |   40 ---
+ .../Backend/Request/DeleteMessages.php             |   34 --
+ .../Backend/Request/DownloadAttachment.php         |  108 ------
+ inc/ExpressoLite/Backend/Request/EchoParams.php    |   35 --
+ .../Backend/Request/GetAllRegistryData.php         |   37 ---
+ inc/ExpressoLite/Backend/Request/GetMessage.php    |  141 --------
+ .../Backend/Request/GetPersonalContacts.php        |   71 ----
+ inc/ExpressoLite/Backend/Request/JoinTempFiles.php |   31 --
+ inc/ExpressoLite/Backend/Request/LiteRequest.php   |  193 -----------
+ inc/ExpressoLite/Backend/Request/Login.php         |   51 ---
+ inc/ExpressoLite/Backend/Request/Logoff.php        |   27 --
+ .../Backend/Request/MarkAsHighlighted.php          |   30 --
+ inc/ExpressoLite/Backend/Request/MarkAsRead.php    |   30 --
+ inc/ExpressoLite/Backend/Request/MoveMessages.php  |   30 --
+ inc/ExpressoLite/Backend/Request/SaveMessage.php   |   78 -----
+ .../Backend/Request/SaveMessageDraft.php           |   90 -----
+ .../Backend/Request/SearchContactsByEmail.php      |  158 ---------
+ .../Backend/Request/SearchContactsByToken.php      |   57 ----
+ inc/ExpressoLite/Backend/Request/SearchFolders.php |   89 -----
+ .../Backend/Request/SearchHeadlines.php            |  150 ---------
+ .../Backend/Request/UpdateMessageCache.php         |   35 --
+ .../Backend/Request/UploadTempFile.php             |   65 ----
+ .../Backend/Request/Utils/MessageUtils.php         |  142 --------
+ inc/ExpressoLite/Backend/TineSessionRepository.php |  100 ------
+ inc/ExpressoLite/TineTunnel/CookieHandler.php      |   31 --
+ .../TineTunnel/Exception/RpcException.php          |   19 --
+ .../TineTunnel/Exception/TineTunnelException.php   |   19 --
+ inc/ExpressoLite/TineTunnel/JsonRpc.php            |   82 -----
+ inc/ExpressoLite/TineTunnel/Request.php            |  331 -------------------
+ inc/ExpressoLite/TineTunnel/TineJsonRpc.php        |  163 ---------
+ inc/ExpressoLite/TineTunnel/TineSession.php        |  347 --------------------
+ inc/Layout.js                                      |    2 +-
+ inc/SplClassLoader.php                             |  155 ---------
+ inc/bootstrap.php                                  |   24 --
+ index.html                                         |   58 ++++
+ index.php                                          |   78 -----
+ login.css                                          |    1 +
+ login.js                                           |   50 ++-
+ mail/WidgetMessages.js                             |    2 +-
+ mail/index.html                                    |   60 ++++
+ mail/index.php                                     |   75 -----
+ mail/mail.js                                       |   11 +-
+ 86 files changed, 3557 insertions(+), 3476 deletions(-)
+
+commit fdda27a351924ea92689f35fe2fbdf46061184fb
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Apr 23 14:27:51 2015 -0300
+
+    Task #12392 - Lite: Fix Apple iPad issues
+    
+    - CSS media queries increased from 767 to 1024px width
+    - All POST requests explicitly use no-cache flag
+    - On mobile devices, message mugshot enlarges with click, since there's
+      no hover event
+    - Better back button for mobile devices on Dialog.js
+    
+    Change-Id: Icbcbcddd16c1f44917c0b7b645443eb4c0dbb855
+
+ inc/App.js                              |    8 ++++-
+ inc/ContextMenu.css                     |    6 ++--
+ inc/Dialog.css                          |    1 +
+ inc/Dialog.html                         |    1 +
+ inc/Dialog.js                           |    5 ++--
+ inc/ExpressoLite/TineTunnel/Request.php |    3 +-
+ inc/Layout.css                          |   42 +++++++++++++-------------
+ inc/general.css                         |    4 +--
+ index.php                               |    2 +-
+ login.css                               |    6 ++--
+ mail/WidgetCompose.css                  |   10 +++----
+ mail/WidgetFolders.css                  |    8 ++---
+ mail/WidgetHeadlines.css                |    4 +--
+ mail/WidgetMessages.css                 |    4 +--
+ mail/WidgetMessages.js                  |   50 +++++++++++++++++++++++--------
+ mail/mail.css                           |   12 ++++----
+ 16 files changed, 100 insertions(+), 66 deletions(-)
+
+commit a9d24acecd26afbd67d64635ebeb8090372c43de
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Apr 1 11:58:02 2015 -0300
+
+    Task #11093 - Lite: implement new contacts autocomplete
+    
+    - New autocomplete now uses a modal dialog, instead of a floating popup
+    - Autocomplete routines unified for desktop and phones
+    - ModelessDialog widget refactored into Dialog, which can be modal too
+    - Better focus handling on email compose dialog, also fixing some focus
+      styles that were missing from the CSS
+    - On email compose dialog, fixed some autocomplete-related behaviors
+    
+    Change-Id: I21ca60bdcbc8813f9ae51e21dfbbd98b5f14193b
+
+ inc/Contacts.js                                    |  140 +++++++++
+ inc/Dialog.css                                     |   21 ++
+ inc/Dialog.html                                    |   22 ++
+ inc/Dialog.js                                      |  298 ++++++++++++++++++++
+ .../Backend/Request/SearchContactsByToken.php      |   47 ++-
+ inc/ModelessDialog.css                             |   19 --
+ inc/ModelessDialog.html                            |   21 --
+ inc/ModelessDialog.js                              |  281 ------------------
+ inc/SearchContacts.css                             |   24 ++
+ inc/SearchContacts.html                            |   28 ++
+ inc/SearchContacts.js                              |  269 ++++++++++++++++++
+ inc/general.css                                    |   18 +-
+ mail/WidgetCompose.css                             |   22 +-
+ mail/WidgetCompose.html                            |   10 +-
+ mail/WidgetCompose.js                              |  239 ++++++++--------
+ mail/WidgetHeadlines.js                            |    8 +-
+ mail/WidgetMessages.js                             |    2 +-
+ mail/mail.js                                       |    6 +-
+ 18 files changed, 989 insertions(+), 486 deletions(-)
+
+commit 7ec13ee38cf8dd4e04f7ff475f37b0c11b89973c
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Wed Apr 15 17:04:11 2015 -0300
+
+    Task #12097 - Lite: Fix logoff problem
+    
+    - Replaced references to non-existing TineException with
+      TineTunnelException, as this was breaking exception handling in
+      some situations (including logoff)
+    - Layout.js now redirects to login screen even if problems occur
+      on the server side
+    - Logoff now resets tineSession to avoid being stuck with a bad
+      session in case of problems during logout
+    - Minor changes in the send method to avoid log messages in E_STRICT
+      mode that were polluting the error log
+    
+    Change-Id: I14873401312b594aec19f525b8cf711b7794ab77
+
+ inc/ExpressoLite/Backend/Request/LiteRequest.php   |   18 +++++++++++++++---
+ inc/ExpressoLite/Backend/Request/Logoff.php        |    8 ++++----
+ inc/ExpressoLite/Backend/TineSessionRepository.php |   14 ++++++++++++--
+ inc/ExpressoLite/TineTunnel/JsonRpc.php            |    4 ++--
+ inc/ExpressoLite/TineTunnel/TineJsonRpc.php        |    4 ++--
+ inc/ExpressoLite/TineTunnel/TineSession.php        |   14 ++++++++++----
+ inc/Layout.js                                      |    9 ++++++++-
+ mail/index.php                                     |    1 +
+ 8 files changed, 54 insertions(+), 18 deletions(-)
+
+commit 3159c4eae11396c829242cbdc2f109d9879b329c
+Author: Cassiano Dal Pizzol <cassiano.dalpizzol@serpro.gov.br>
+Date:   Mon Apr 6 19:22:19 2015 -0300
+
+    Task #11568 - Lite: Move Lite source to apps folder
+    
+    - Created a new folder apps on the root of the project
+    - Moved the Lite folder to this new folder
+    
+    Change-Id: Ibeb4c032131f4035875a449f2d7b607255b387cc
+
+commit 07589aebcbe84e31bab48aff4bdb0d792cbf529c
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Apr 2 11:26:09 2015 -0300
+
+    Task #12023 - Lite: fixed cached login email address
+    
+    - At login page, email address at sign was displayed as HTML encoded
+      character, now fixed
+    - Expressov3 replaced with Expressobr domain name
+    
+    Change-Id: I129b2c6da3ac11dbf1a24c003afb3f415a2c14f8
+
+ conf.php  |    4 ++--
+ index.php |    2 +-
+ login.js  |    2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+commit b551bcd7430e25a82f37a4d0a6fb9335ce80ee25
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Mar 20 10:58:55 2015 -0300
+
+    Task #11939 - Lite: fix autoloading of new messages
+    
+    - Fixed parameter name on SearchHeadlines
+    
+    Change-Id: I0891a33fdfa8ee452e64300fd2c6cada61908ef6
+
+ mail/WidgetHeadlines.js |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit fc554650288d7958b097ce7c48917a822296ba1b
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Mar 24 10:14:00 2015 -0300
+
+    Task #11943 - Lite: add favicon
+    
+    - Added favicon.png file
+    - Added favicon entries on root files
+    
+    Change-Id: Iead216e987caf61fe57530e8fe44506768b74c37
+
+ img/favicon.png |  Bin 0 -> 641 bytes
+ index.php       |    1 +
+ mail/index.php  |    1 +
+ 3 files changed, 2 insertions(+)
+
+commit 77b1ce8176fccbf16aeefc38837539a0df6c326a
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Mar 16 11:12:21 2015 -0300
+
+    Task #11874 - Lite: standardize compose dialog window
+    
+    - ContextMenu and ModelessDialog JS now clone a new template instance
+      instead of reusing an old one
+    - ContextMenu hide method now returns a Promise object
+    - ModelessDialog now uses App.IsPhone method
+    - ModelessDialog HTML template file created
+    - WidgetCompose won't load params from main HTML, now receives them as
+      options
+    - WidgetAttacher JS won't receive an element selector, but a proper
+      jQuery object
+    - Enhanced animation on compose dialog
+    
+    Change-Id: I6c796482b7fd11694701163ee1afef60bfd4e276
+
+ inc/ContextMenu.js      |   32 +++--
+ inc/ModelessDialog.css  |   11 +-
+ inc/ModelessDialog.html |   21 +++
+ inc/ModelessDialog.js   |  349 ++++++++++++++++++++++++++--------------------
+ mail/WidgetAttacher.js  |    4 +-
+ mail/WidgetCompose.css  |   16 +--
+ mail/WidgetCompose.html |   31 +++--
+ mail/WidgetCompose.js   |  356 ++++++++++++++++++++++++++---------------------
+ mail/mail.js            |    6 +-
+ 9 files changed, 472 insertions(+), 354 deletions(-)
+
+commit f3a810488512e4bec7ff170e0a59b2366f925c3a
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Mar 10 15:16:10 2015 -0300
+
+    Task #11841 - Lite: Fix saving drafts
+    
+    - SaveMessageDraft.php: fixed mispelled parameter
+    
+    Change-Id: I50845655b4a50605668a26a3ec28e34ee93eec24
+
+ .../Backend/Request/SaveMessageDraft.php           |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0ea64e9fd3b515a144113fbc35548475020e1f94
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Mar 9 11:57:32 2015 -0300
+
+    Task #11849 - Lite: proper handling of empty searches
+    
+    - Layout.js: blank search now fires onSeach callback
+    - Mail.js: added trim call on search callback
+    - Mail.js: added handling of a blank search, if search is empty, just
+      select current folder
+    - WidgetHeadlines.js: removed trim call on App.Post, not needed anymore
+    
+    Change-Id: Ib9158db405d1265c870a84d84c3de1eed76ea25c
+
+ inc/Layout.js           |    5 ++---
+ mail/WidgetHeadlines.js |    2 +-
+ mail/mail.js            |   34 +++++++++++++++++++++-------------
+ 3 files changed, 24 insertions(+), 17 deletions(-)
+
+commit 06bec075da240aad927bb39323f607185db86728
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Mar 9 11:17:54 2015 -0300
+
+    Task #11837 - Lite: fixed search result with 50+ mails
+    
+    - SearchHeadlines.php: fixed missing totalCount parameter
+    
+    Change-Id: I76ba6ae632c4fca30c5a32ea5d62820cecc2b8e3
+
+ .../Backend/Request/SearchHeadlines.php            |    9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+commit d0337b37ff7a8c7a8f22dc53cca0f8c2648d78cc
+Author: Fatima Tonon <fatima.tonon@serpro.gov.br>
+Date:   Fri Mar 6 11:20:01 2015 -0300
+
+    Task #11700 - Lite: Remove trailing whitespace from search term
+    
+    - On WidgetHeadlines.js, remove trailing whitespaces of text parameter
+      passed to the request searchHeadlines
+    
+    Change-Id: I0ca4a23d966a22da1ccba7ea237013d2521d8191
+
+ mail/WidgetHeadlines.js |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 05cb2b334078dc13c31a2c7af3da78596b6f168b
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Mar 4 15:13:02 2015 -0300
+
+    Task #11564 - Lite: fixed attachments losing filenames
+    
+    - Fixed ternary operator misspelling
+    
+    Change-Id: I733407a372a2f7ef6fffbc3e466466825db14301
+
+ .../Backend/Request/UploadTempFile.php             |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ba20e95a45ad039d2df068984aff16c7c0c97042
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Mar 3 11:27:21 2015 -0300
+
+    Task #11786 - Lite: fixing picture contact retrieval
+    
+    - On SearchContactsByEmail.php, ignore contact picture blobs which are
+      actually HTML pages
+    - On SearchContactsByEmail.php, picture URL retrieval assembling
+      moved to a dedicated function
+    
+    Change-Id: Ia907caeee3cc4bca912ee9a587e048405c8dccdd
+
+ .../Backend/Request/SearchContactsByEmail.php      |   32 +++++++++++++++++---
+ 1 file changed, 27 insertions(+), 5 deletions(-)
+
+commit 7c497d2cb68c23eb69e0830f54d04e9444147749
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Feb 26 11:25:16 2015 -0300
+
+    Task #11701 - Lite: fixed bug, search was broken
+    
+    - GetFolderHeadlines method renamed to SearchHeadlines, which serves
+      ordinary headline retrieval and search filtering
+    - Method calls renamed where needed
+    - Trimmed line on SaveMessageDraft.php file
+    
+    Change-Id: Ia0cbea511cfab45b59290652e2d03047035e4566
+
+ .../Backend/Request/GetFolderHeadlines.php         |  114 ---------------
+ .../Backend/Request/SaveMessageDraft.php           |    6 +-
+ .../Backend/Request/SearchHeadlines.php            |  147 ++++++++++++++++++++
+ mail/ThreadMail.js                                 |   67 ++++-----
+ mail/WidgetHeadlines.js                            |   52 ++++---
+ 5 files changed, 214 insertions(+), 172 deletions(-)
+
+commit fab326ba90492cb1efe1eecfb0e811bc678a996c
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Feb 26 16:09:18 2015 -0300
+
+    Task #11443 - Lite: fixed logoff issue
+    
+    - JSON key member variable is set to null in TineSession::logout
+    
+    Change-Id: Ia5f36251d01ed76a0e63798966b5f8de1a30eab0
+
+ inc/ExpressoLite/TineTunnel/TineSession.php |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 5721af388d3647c3c80e3874bdb2c18b1b6a2716
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Feb 27 10:21:28 2015 -0300
+
+    Task #11774 - Lite: removing explicit SetLocale call
+    
+    - After back-end refactoring, SetLocale is done automatically, so
+      explicit call was removed from login.js
+    
+    Change-Id: I60213e36ea9972c8265903b7762ff4996085fbdc
+
+ login.js |    1 -
+ 1 file changed, 1 deletion(-)
+
+commit b2ec71302d6a15ae0c6db9e2a4519db2695b9144
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Feb 25 10:06:27 2015 -0300
+
+    Task #11646 - Lite: search only on current folder
+    
+    - All email searches, then on all folders, are now restricted to the
+      current folder only
+    - Removed function to clear cache of all folders, not needed anymore
+    - Removed function to recursively get IDs of all folders
+    - Search result returns as a virtual folder; currently searched folder
+      is kept under searchedFolder property; currently searched text is
+      kept under searchedText property
+    - Cosmetic: slightly larger padding on the bottom of headlines listing
+    
+    Change-Id: I40ac68c3299a5a7ad2b5e3157b25d7
+
+ mail/ThreadMail.js      |   12 ------
+ mail/WidgetHeadlines.js |  108 +++++++++++++++++++++++------------------------
+ mail/WidgetMessages.js  |    9 ++--
+ mail/mail.css           |    2 +-
+ mail/mail.js            |   11 +++--
+ 5 files changed, 67 insertions(+), 75 deletions(-)
+
+commit 933b93276a5bfadb42215c3040f57b6638dbfd6a
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Mon Nov 17 13:58:26 2014 -0200
+
+    Task #11191 - Refactor Expresso Lite backend architecture
+    
+    - All functionality related to communication with Tine is encapsulated
+      is encapsulated in TineSession and other related classes
+    - All AJAX requests are processed by AjaxProcessor, which parses the
+      call name and parameters and processes them with
+      LiteRequestProcessor
+    - LiteRequestProcessor creates appropriate LiteRequest objects to
+      process the calls
+    - Each method of former Tine.class was refactored as a specific request
+      handler class
+    
+    Change-Id: Ic5d6a8216b9e86aded188b4855113dffb689db65
+
+ conf.php                                           |   11 +
+ inc/Ajax.class.php                                 |  354 --------
+ inc/ExpressoLite/Backend/AjaxProcessor.php         |  132 +++
+ .../Backend/Exception/LiteException.php            |   64 ++
+ .../Backend/Exception/NoTineSessionException.php   |   30 +
+ inc/ExpressoLite/Backend/LiteRequestProcessor.php  |   86 ++
+ .../Backend/Request/ChangeExpiredPassword.php      |   40 +
+ .../Backend/Request/DeleteMessages.php             |   34 +
+ .../Backend/Request/DownloadAttachment.php         |  108 +++
+ inc/ExpressoLite/Backend/Request/EchoParams.php    |   35 +
+ .../Backend/Request/GetAllRegistryData.php         |   37 +
+ .../Backend/Request/GetFolderHeadlines.php         |  114 +++
+ inc/ExpressoLite/Backend/Request/GetMessage.php    |  141 +++
+ .../Backend/Request/GetPersonalContacts.php        |   71 ++
+ inc/ExpressoLite/Backend/Request/JoinTempFiles.php |   31 +
+ inc/ExpressoLite/Backend/Request/LiteRequest.php   |  181 ++++
+ inc/ExpressoLite/Backend/Request/Login.php         |   51 ++
+ inc/ExpressoLite/Backend/Request/Logoff.php        |   27 +
+ .../Backend/Request/MarkAsHighlighted.php          |   30 +
+ inc/ExpressoLite/Backend/Request/MarkAsRead.php    |   30 +
+ inc/ExpressoLite/Backend/Request/MoveMessages.php  |   30 +
+ inc/ExpressoLite/Backend/Request/SaveMessage.php   |   78 ++
+ .../Backend/Request/SaveMessageDraft.php           |   90 ++
+ .../Backend/Request/SearchContactsByEmail.php      |  136 +++
+ .../Backend/Request/SearchContactsByToken.php      |   72 ++
+ inc/ExpressoLite/Backend/Request/SearchFolders.php |   89 ++
+ .../Backend/Request/UpdateMessageCache.php         |   35 +
+ .../Backend/Request/UploadTempFile.php             |   65 ++
+ .../Backend/Request/Utils/MessageUtils.php         |  142 +++
+ inc/ExpressoLite/Backend/TineSessionRepository.php |   90 ++
+ inc/ExpressoLite/TineTunnel/CookieHandler.php      |   31 +
+ .../TineTunnel/Exception/RpcException.php          |   19 +
+ .../TineTunnel/Exception/TineTunnelException.php   |   19 +
+ inc/ExpressoLite/TineTunnel/JsonRpc.php            |   82 ++
+ inc/ExpressoLite/TineTunnel/Request.php            |  330 +++++++
+ inc/ExpressoLite/TineTunnel/TineJsonRpc.php        |  163 ++++
+ inc/ExpressoLite/TineTunnel/TineSession.php        |  340 ++++++++
+ inc/JsonRpc.class.php                              |   32 -
+ inc/Request.class.php                              |  124 ---
+ inc/SplClassLoader.php                             |  155 ++++
+ inc/Tine.class.php                                 |  902 --------------------
+ inc/bootstrap.php                                  |   24 +
+ index.php                                          |   19 +-
+ login.js                                           |   41 +-
+ mail/index.php                                     |   15 +-
+ 45 files changed, 3285 insertions(+), 1445 deletions(-)
+
+commit 9e69b4a236914177423e73bf3cad5d097cc69ff9
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Feb 20 10:35:27 2015 -0200
+
+    Task #11649 - Lite: created links to switch between modules
+    
+    - On Layout.html, filled entries for mail, addressbook and calendar
+      modules, currently commented out
+    - Layout.js handling for module entries
+    - Layout.css entries for module options
+    - New icons for modules
+    - WidgetMessages reusing context menu icon from Layout widget
+    
+    Change-Id: Ic33f4294e9079043140457e4ea917a4fa3311924
+
+ img/layout-icons32.png   |  Bin 0 -> 3177 bytes
+ img/top-3dots.png        |  Bin 190 -> 0 bytes
+ img/top-3lines.png       |  Bin 255 -> 0 bytes
+ img/top-arrow-left.png   |  Bin 490 -> 0 bytes
+ img/top-search.png       |  Bin 814 -> 0 bytes
+ inc/Layout.css           |   35 ++++++++++++++++++++++++++---------
+ inc/Layout.html          |   20 ++++++++++----------
+ inc/Layout.js            |   27 +++++++++++++++++++++++++++
+ mail/WidgetMessages.html |    2 +-
+ mail/mail.js             |    2 +-
+ 10 files changed, 65 insertions(+), 21 deletions(-)
+
+commit 9d822a2be68917d49c0c511bd7cfc0fa6f1aeb3d
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Feb 3 11:17:55 2015 -0200
+
+    Task #11574 - Lite: synchronizing searched messages
+    
+    - When a message, from a search result, is moved or deleted, update the
+      folder counters and clear the cache
+    - When a search returns no results, make sure the counter is set to zero
+    
+    Change-Id: I62c6eb9d6d1f51ae76b7cfd75b6f65582dbaac92
+
+ inc/Tine.class.php |    5 +++--
+ mail/mail.js       |   20 ++++++++++++--------
+ 2 files changed, 15 insertions(+), 10 deletions(-)
+
+commit 08b9d86b43b8f1c5b4ac48604af4dd0862192180
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Feb 2 16:54:42 2015 -0200
+
+    Task #11120 - Lite: implemented mail search
+    
+    - Added search handling on mail.js
+    - Headlines will render search result just like any other folder
+    - On a search result, headlines will display the folder to which each
+      thread belongs to
+    - On Tine.class.php, added routine to crack message ID
+    - Minor optimizations on Layout JS class
+    
+    Change-Id: I2b4232d7782c79ef8677ace3c48d456b0455cbf1
+
+ inc/Ajax.class.php       |    4 +-
+ inc/Layout.css           |    8 +--
+ inc/Layout.html          |    4 +-
+ inc/Layout.js            |  120 ++++++++++++++++++--------------
+ inc/Tine.class.php       |   86 +++++++++++------------
+ mail/ThreadMail.js       |   12 ++++
+ mail/WidgetFolders.js    |   33 ++++++---
+ mail/WidgetHeadlines.css |    1 +
+ mail/WidgetHeadlines.js  |  174 ++++++++++++++++++++++++++++++++++++----------
+ mail/WidgetMessages.js   |   34 ++++++---
+ mail/mail.js             |   47 ++++++++++---
+ 11 files changed, 355 insertions(+), 168 deletions(-)
+
+commit be552c69ca8d20ddeb8be7b53944b7112a010961
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Jan 26 10:29:34 2015 -0200
+
+    Task #11556 - Lite: Implement Asynchronous Module Definition
+    
+    - Created App class to centralize functions commons to all modules
+    - All $.post() calls now handled by App class
+    - All HTML templates and CSS now loaded and appended by App class
+    - LoadCss class now obsolete, removed
+    - JS dependencies now managed via Asynchronous Module Definition, by
+      using RequireJS library
+    - jQuery library file renamed, won't have version on file name anymore
+    - Minor cosmetic tweaks
+    - Minor syntax fixes, standardization
+    
+    Change-Id: Iaf00160ab0a1b3967c44bd1ae3957c56d45804a3
+
+ inc/App.js               |   46 +++++++++++++++++++
+ inc/ContextMenu.js       |   28 +++++++-----
+ inc/DateFormat.js        |   24 +++++-----
+ inc/Layout.js            |   86 +++++++++++++++++-----------------
+ inc/LoadCss.js           |   22 ---------
+ inc/ModelessDialog.js    |   11 ++---
+ inc/UploadFile.js        |    6 +--
+ inc/UrlStack.js          |   29 ++++++------
+ inc/jquery-2.1.3.min.js  |    4 --
+ inc/jquery.min.js        |    4 ++
+ inc/require.min.js       |   36 +++++++++++++++
+ index.php                |    9 +---
+ login.js                 |   18 +++++---
+ mail/Contacts.js         |   61 +++++++++++++------------
+ mail/ThreadMail.js       |   75 ++++++++++++++++++------------
+ mail/WidgetAttacher.js   |   32 ++++++-------
+ mail/WidgetCompose.js    |   20 ++++----
+ mail/WidgetFolders.js    |   19 ++++----
+ mail/WidgetHeadlines.js  |  114 +++++++++++++++++++++++++++-------------------
+ mail/WidgetMessages.js   |   27 +++++------
+ mail/WidgetSearchAddr.js |   25 +++++-----
+ mail/index.php           |   62 ++++++++++---------------
+ mail/mail.css            |    4 +-
+ mail/mail.js             |   38 ++++++++++++----
+ 24 files changed, 452 insertions(+), 348 deletions(-)
+
+commit d12e004422174a354b975aaebbbd4a781433ae74
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Jan 21 16:35:36 2015 -0200
+
+    Task #11541 - Lite: Widgets splitted into JS/HTML/CSS
+    
+    - Inline HTML code inside widgets extracted from JS into HTML templates
+    - Inline CSS code extracted into CSS stylesheets
+    - Removed sprintf module
+    - Fixed small issue with extensionless attachments
+    
+    Change-Id: I57c52e0c944bf6023ee5ccf30ae9c1a4c750122d
+
+ inc/Ajax.class.php         |    7 +++--
+ inc/Layout.js              |    2 +-
+ inc/Tine.class.php         |    2 +-
+ inc/UploadFile.js          |   27 +++++++++--------
+ inc/sprintf.min.js         |    1 -
+ mail/WidgetAttacher.css    |   19 ++++++++++++
+ mail/WidgetAttacher.html   |   27 +++++++++++++++++
+ mail/WidgetAttacher.js     |   72 ++++++++++++++++++++++++--------------------
+ mail/WidgetCompose.js      |   18 +++++++++--
+ mail/WidgetSearchAddr.css  |    1 +
+ mail/WidgetSearchAddr.html |   18 +++++++++++
+ mail/WidgetSearchAddr.js   |   59 ++++++++++++++++++++++--------------
+ 12 files changed, 178 insertions(+), 75 deletions(-)
+
+commit eaf2cc6deb094eff8ce3b418dfa9c369dcbce428
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Jan 16 11:34:08 2015 -0200
+
+    Task #11535 - Lite: Minor CSS fixes on mail module
+    
+    - Fixed alignment padding on 'updating folders' text to match the height
+      of 'update' and new mail buttons
+    - Folder tree arrow now toggling right/down as it should
+    - Cleaner folder tree: won't show 'zero unread emails', just the total
+      mail count
+    
+    Change-Id: I7da72f151f9619f04b3cb1469954e45be66b3ab3
+
+ mail/WidgetFolders.css |   14 ++++++++++----
+ mail/WidgetFolders.js  |   15 ++++++++-------
+ mail/mail.css          |    2 +-
+ mail/mail.js           |    4 ++--
+ 4 files changed, 21 insertions(+), 14 deletions(-)
+
+commit 1e321736183923aaa3d498f9a73d0761f76991ae
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Jan 14 15:30:18 2015 -0200
+
+    Task #11487 - JS frontend refactored
+    
+    - Created Layout class, for decoupling the main page layout for all
+      modules across the application
+    - Almost all JS modules now have decoupled HTML, JS and CSS files
+    - Most mail.css styles moved to components' specific CSS files
+    - Most index.php templates moved to components' specific HTML files
+    - All asynchronous functions that can be potentially be optimized by
+      running in parallel, now returning deferred objects instead of
+      receiving ordinary callbacks
+    - New ContextMenu class to replace DropdownMenu class
+    - Overall design improvements
+    - HTML templates started getting ready for future internationalization
+      implementation
+    
+    Change-Id: I385ec29e0b5d71bc8e893dd23b8d2a8ef7c9b723
+
+ img/flags.png             |  Bin 1119 -> 1119 bytes
+ img/top-3dots.png         |  Bin 0 -> 190 bytes
+ img/top-3lines.png        |  Bin 0 -> 255 bytes
+ img/top-arrow-left.png    |  Bin 0 -> 490 bytes
+ img/top-search.png        |  Bin 0 -> 814 bytes
+ inc/ContextMenu.css       |   20 ++
+ inc/ContextMenu.js        |  151 +++++++++++++
+ inc/DropdownMenu.css      |   25 ---
+ inc/DropdownMenu.js       |  181 ---------------
+ inc/Layout.css            |   64 ++++++
+ inc/Layout.html           |   33 +++
+ inc/Layout.js             |  198 +++++++++++++++++
+ inc/ModelessDialog.js     |   71 +++---
+ inc/general.css           |    6 +-
+ inc/jquery-2.1.1.min.js   |    4 -
+ inc/jquery-2.1.3.min.js   |    4 +
+ inc/jquery-serialize.js   |   16 --
+ index.php                 |    3 +-
+ mail/Contacts.js          |   27 ++-
+ mail/ThreadMail.js        |   12 +-
+ mail/WidgetAttacher.js    |   34 +--
+ mail/WidgetCompose.css    |   20 ++
+ mail/WidgetCompose.html   |   32 +++
+ mail/WidgetCompose.js     |  381 +++++++++++++++++---------------
+ mail/WidgetFolders.css    |   25 +++
+ mail/WidgetFolders.js     |  169 +++++++-------
+ mail/WidgetHeadlines.css  |   38 ++++
+ mail/WidgetHeadlines.html |   21 ++
+ mail/WidgetHeadlines.js   |  277 +++++++++++++----------
+ mail/WidgetMessages.css   |   54 +++++
+ mail/WidgetMessages.html  |   42 ++++
+ mail/WidgetMessages.js    |  276 ++++++++++++-----------
+ mail/WidgetSearchAddr.css |   15 ++
+ mail/WidgetSearchAddr.js  |   51 +++--
+ mail/index.php            |  141 +++---------
+ mail/mail.css             |  183 ++--------------
+ mail/mail.js              |  533 +++++++++++++++++++++------------------------
+ 37 files changed, 1755 insertions(+), 1352 deletions(-)
+
+commit 44628e56642f075f94b29d3ba105f0dd86385892
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Dec 12 15:36:53 2014 -0200
+
+    Task #11431 - Lite: fixing minor syntax formatting
+    
+    - On PHP and JS files which are not standardized, added a space after
+      statement keywords
+    
+    Change-Id: Id3f9896e84fc799607121e8f05edbf78d194fa6c
+
+ inc/Ajax.class.php       |  112 +++++++++++++++++-----------------
+ inc/DateFormat.js        |    6 +-
+ inc/DropdownMenu.js      |   24 ++++----
+ inc/LoadCss.js           |    2 +-
+ inc/ModelessDialog.js    |   30 +++++-----
+ inc/Request.class.php    |   24 ++++----
+ inc/Tine.class.php       |  128 +++++++++++++++++++--------------------
+ inc/UploadFile.js        |   12 ++--
+ inc/UrlStack.js          |    8 +--
+ index.php                |   10 ++--
+ login.js                 |   24 ++++----
+ mail/Contacts.js         |   46 +++++++-------
+ mail/ThreadMail.js       |  108 ++++++++++++++++-----------------
+ mail/WidgetAttacher.js   |   16 ++---
+ mail/WidgetCompose.js    |  104 ++++++++++++++++----------------
+ mail/WidgetFolders.js    |   48 +++++++--------
+ mail/WidgetHeadlines.js  |  150 +++++++++++++++++++++++-----------------------
+ mail/WidgetMessages.js   |   86 +++++++++++++-------------
+ mail/WidgetSearchAddr.js |   36 +++++------
+ mail/index.php           |    2 +-
+ mail/mail.js             |   34 +++++------
+ 21 files changed, 505 insertions(+), 505 deletions(-)
+
+commit 79da24e0fb5e794dbe614a181d4309d7f87539ba
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Nov 17 15:27:46 2014 -0200
+
+    Task #11225 - Smartphone usability fixes
+    
+    - More spacing for folders and menu entries
+    - Bigger checkbox icons for headlines
+    - Better menu event handling, now appears faster
+    - Better animation on login page
+    
+    Change-Id: I6c3fa43177ee7cb351ac426f0c89b468f6325d78
+
+ inc/DropdownMenu.css |   10 +++++++---
+ inc/DropdownMenu.js  |   20 ++++++++++----------
+ login.js             |    2 +-
+ mail/mail.css        |   11 ++++++++++-
+ mail/mail.js         |    1 +
+ 5 files changed, 29 insertions(+), 15 deletions(-)
+
+commit 670cd9dff9f6b6da2ad9cf878350db7d09d877ad
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Nov 17 09:02:54 2014 -0200
+
+    Task #11222 - Lines will break on PRE body text
+    
+    - On PRE-formatted texts within email body, long lines will now break
+      following the same pattern of Tine
+    - Added new PRE style on mail.css
+    
+    Change-Id: Ifa3393cfd1b54440e151fe9aa111cf75a29e65e6
+
+ mail/mail.css |    1 +
+ 1 file changed, 1 insertion(+)
+
+commit a4f7634259f86b2c9126ff0db2505d3609ff64a6
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Nov 11 16:03:21 2014 -0200
+
+    Task #11190 - CSS files programmatically loaded
+    
+    - Created LoadCss plugin
+    - Plugins now load their CSS files with LoadCss call
+    - Fixed indentation on login.js file
+    - Standardized architecture on /inc modules
+    
+    Change-Id: I65e0186fa0eccf952bc70314e38e2903c258d279
+
+ inc/DateFormat.js            |    2 +-
+ inc/DropdownMenu.css         |   21 ++++
+ inc/DropdownMenu.js          |  181 ++++++++++++++++++++++++++++
+ inc/LoadCss.js               |   22 ++++
+ inc/ModelessDialog.css       |   18 +++
+ inc/ModelessDialog.js        |  230 +++++++++++++++++++++++++++++++++++
+ inc/UploadFile.js            |   88 ++++++++++++++
+ inc/UrlStack.js              |    2 +-
+ inc/jquery-dropdownMenu.js   |  195 ------------------------------
+ inc/jquery-modelessDialog.js |  243 -------------------------------------
+ inc/jquery-uploadFile.js     |   90 --------------
+ index.php                    |    5 +-
+ login.js                     |  270 +++++++++++++++++++++---------------------
+ mail/Contacts.js             |    2 +-
+ mail/ThreadMail.js           |    2 +-
+ mail/WidgetAttacher.js       |    8 +-
+ mail/WidgetCompose.js        |   11 +-
+ mail/WidgetHeadlines.js      |    2 +-
+ mail/WidgetMessages.js       |    8 +-
+ mail/WidgetSearchAddr.js     |    2 +-
+ mail/index.php               |   11 +-
+ mail/mail.js                 |    6 +-
+ 22 files changed, 727 insertions(+), 692 deletions(-)
+
+commit 96a95b30fa4873879acf7ed5fffd123ea03e5ddf
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Tue Nov 11 10:17:23 2014 -0200
+
+    Task #11145 - Include Lite version number in login screen
+    
+    - Added Lite version number in version info div
+    - Removed irrelevant information from version info div
+    
+    Change-Id: Ib34b6caf4b9a66257df02214b190660e37eaa0b4
+
+ index.php |    8 +++++++-
+ login.js  |    4 +---
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+commit 1d288c2629d1eafa9de3511a59710f3bacd03177
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Nov 5 11:36:45 2014 -0200
+
+    Task #11142 - Classic version link anchored at top
+    
+    - On login.css, link to classic version is now anchored at page top, so
+      it won't be placed over password field on small smartphone screens
+    
+    Change-Id: I78ca6fc8392692aa2ff066546675fb1b4331f46e
+
+ login.css |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b65eaacac9ebbf7974fb00e2d8f8b880ff59c9e4
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Nov 4 15:47:28 2014 -0200
+
+    Task #10572 - Mail JS modules with better structure
+    
+    - All widgets are now instantiated with new operator, instead of jQuery
+      plugin syntax
+    - New instantiating syntax applied to where it belongs
+    
+    Change-Id: I2b6f111a2cb5f7af19decc5bf5f004bb76184495
+
+ login.js                  |   10 +-
+ mail/WidgetAttacher.js    |  127 ++++++++++
+ mail/WidgetCompose.js     |  434 ++++++++++++++++++++++++++++++++++
+ mail/WidgetFolders.js     |  257 ++++++++++++++++++++
+ mail/WidgetHeadlines.js   |  571 ++++++++++++++++++++++++++++++++++++++++++++
+ mail/WidgetMessages.js    |  420 +++++++++++++++++++++++++++++++++
+ mail/WidgetSearchAddr.js  |  151 ++++++++++++
+ mail/index.php            |   12 +-
+ mail/mail.js              |    8 +-
+ mail/widget-attacher.js   |  129 ----------
+ mail/widget-compose.js    |  437 ----------------------------------
+ mail/widget-folders.js    |  259 --------------------
+ mail/widget-headlines.js  |  573 ---------------------------------------------
+ mail/widget-messages.js   |  422 ---------------------------------
+ mail/widget-searchAddr.js |  153 ------------
+ 15 files changed, 1975 insertions(+), 1988 deletions(-)
+
+commit 81c236cc27d305d28a12c081acae0781f16bdf2f
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Mon Nov 3 15:23:48 2014 -0200
+
+    Task #11124 - Apply coding standards to project
+    
+    - Replaced all tabs by 4 spaces (as per PSR-2)
+    - Improved mail.css structure
+    
+    Change-Id: I76705574d1a00d72fe88c98de2129d2f1f856542
+
+ conf.php                     |    2 +-
+ inc/Ajax.class.php           |  653 ++++++++--------
+ inc/DateFormat.js            |  112 +--
+ inc/JsonRpc.class.php        |   30 +-
+ inc/Request.class.php        |  208 ++---
+ inc/Tine.class.php           | 1731 +++++++++++++++++++++---------------------
+ inc/UrlStack.js              |   58 +-
+ inc/general.css              |   10 +-
+ inc/index.php                |    1 -
+ inc/jquery-dropdownMenu.js   |  358 ++++-----
+ inc/jquery-modelessDialog.js |  452 +++++------
+ inc/jquery-serialize.js      |    6 +-
+ inc/jquery-uploadFile.js     |  134 ++--
+ index.php                    |   94 +--
+ login.css                    |   18 +-
+ login.js                     |  268 +++----
+ mail/Contacts.js             |  230 +++---
+ mail/ThreadMail.js           |  442 +++++------
+ mail/index.php               |  268 +++----
+ mail/mail.css                |  227 +++---
+ mail/mail.js                 |  636 ++++++++--------
+ mail/widget-attacher.js      |  208 ++---
+ mail/widget-compose.js       |  848 ++++++++++-----------
+ mail/widget-folders.js       |  434 +++++------
+ mail/widget-headlines.js     | 1120 +++++++++++++--------------
+ mail/widget-messages.js      |  818 ++++++++++----------
+ mail/widget-searchAddr.js    |  254 +++----
+ 27 files changed, 4844 insertions(+), 4776 deletions(-)
+
+commit 5a0dde27a837d64ea2846e7ff0203ba193d26def
+Author: Charles Wust <charles.wust@serpro.gov.br>
+Date:   Fri Oct 31 09:24:59 2014 -0200
+
+    Task #11117 - Allow access by Apple devices
+    
+    - Changed browser verification to allow the Safari browser
+    
+    Change-Id: Iae4609404c4357ffee01493e5e84564666adcb65
+
+ login.js |   25 ++++++++++++++++++++-----
+ 1 file changed, 20 insertions(+), 5 deletions(-)
+
+commit 55f7dc7d0dcc8bde2d4fa05ef9fa6b3bc4d4808d
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Oct 30 15:59:03 2014 -0200
+
+    Task #10881 - Change expired password
+    
+    - On login page, if user password is expired, he will be prompted to
+      change it
+    - New form added to index.php of login page
+    - New method created on Tine class, new handler on Ajax class
+    
+    Change-Id: Iced15be0b64960c6080e957cc1c9362d05b4f2b0
+
+ inc/Ajax.class.php |   13 ++++++++
+ inc/Tine.class.php |   27 +++++++++++++---
+ index.php          |   11 ++++++-
+ login.css          |    6 ++--
+ login.js           |   88 ++++++++++++++++++++++++++++++++++++++++------------
+ 5 files changed, 119 insertions(+), 26 deletions(-)
+
+commit 8efb4d634b30225a014ed2ad8152574b0aecd748
+Author: Cassiano Dal Pizzol <cassiano.dalpizzol@serpro.gov.br>
+Date:   Fri Oct 31 11:03:36 2014 -0200
+
+    Revert "Task #10881 - Change expired password"
+    
+    This reverts commit 1388b9843a6b4540f7beff798a53b03ac59843c5.
+    
+    Change-Id: I3f5bd808020ba05e0c2c85b38337c34ac0aab7d6
+
+ inc/Ajax.class.php |   13 --------
+ inc/Tine.class.php |   27 +++-------------
+ index.php          |   11 +------
+ login.css          |    4 +--
+ login.js           |   88 ++++++++++++----------------------------------------
+ 5 files changed, 26 insertions(+), 117 deletions(-)
+
+commit 0d33cd5c8a7ba294e60387c7f867cc3d8df0b92b
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Oct 30 15:59:03 2014 -0200
+
+    Task #10881 - Change expired password
+    
+    - On login page, if user password is expired, he will be prompted to
+      change it
+    - New form added to index.php of login page
+    - New method created on Tine class, new handler on Ajax class
+    
+    Change-Id: I461e3ccf232c5f74f9f7d1e2328f0e66f2a139ce
+
+ inc/Ajax.class.php |   13 ++++++++
+ inc/Tine.class.php |   27 +++++++++++++---
+ index.php          |   11 ++++++-
+ login.css          |    4 +--
+ login.js           |   88 ++++++++++++++++++++++++++++++++++++++++------------
+ 5 files changed, 117 insertions(+), 26 deletions(-)
+
+commit f56bd514b638df331c61033dcca0af62af5ab86c
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Oct 30 10:31:20 2014 -0200
+
+    Task #11090 - Fix: message for login without password
+    
+    - Better message on login.js when user tries to login without password
+    - Also better message when user doesn't inform username
+    
+    Change-Id: Ib4b3b5846070cc4a1225af6d14f5e32551a44318
+
+ login.js |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 7aa1089945d1eb937471502d640e2d629d755656
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Oct 30 10:07:47 2014 -0200
+
+    Task #11091 - Fix: bad login error message
+    
+    - Fixed error message when login fails, on login.js
+    
+    Change-Id: I3e7bac5f879c44903d3b80950bf8e1364e497f0b
+
+ login.js |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit c6af23243af302774e9be3daf6309bf2c1305729
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Oct 30 09:52:22 2014 -0200
+
+    Task #11105 - Fix: menu button won't hide when change folder
+    
+    - When a headline is checked, then the folder is changed, the menu
+      button changes
+    - Added triggers to hide the menu on mail.js
+    
+    Change-Id: I437fcc888ac3d00feb96989a1563da78cf68975b
+
+ mail/mail.js |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit b3ba981b9a1261a407b954b58f72d0b4e1266058
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Oct 29 16:26:15 2014 -0200
+
+    Task #11087 - Fix: shared inbox error
+    
+    - When a folder with no messages is clicked, application won't request
+      the folder messages to the back-end anymore
+    
+    Change-Id: I08baa114a4279c77405a5157bb326751f026dac9
+
+ mail/widget-headlines.js |   40 +++++++++++++++++++++++-----------------
+ 1 file changed, 23 insertions(+), 17 deletions(-)
+
+commit 6aadea136431a6542c1135b25f19a1c0559656a7
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Oct 28 09:54:27 2014 -0200
+
+    Task #11095 - Better menu usability
+    
+    - Menu behavior now close to common market email apps
+    - Headlines floating menu is now displayed contextually at top, when one
+      or more messages are selected
+    - Message menu is always shown when a message is opened
+    - On desktop, menu is activated when cursor goes over it; on mobile,
+      when it's clicked
+    - Disabled: right-click menus for desktop
+    - Disabled: long-touch menus for smartphone
+    
+    Change-Id: I5a4a8fe43efecc5b4d04d88c549764e074732021
+
+ inc/jquery-contextMenu.js  |  162 ------------------------------------
+ inc/jquery-dropdownMenu.js |  195 ++++++++++++++++++++++++++++++++++++++++++++
+ inc/toe.min.js             |    7 --
+ mail/index.php             |   53 ++++++++++--
+ mail/mail.css              |   47 +++++------
+ mail/mail.js               |   57 +++++++++++--
+ mail/widget-folders.js     |   11 ---
+ mail/widget-headlines.js   |  111 ++++++++++---------------
+ mail/widget-messages.js    |   96 ++++++++++------------
+ 9 files changed, 402 insertions(+), 337 deletions(-)
+
+commit ca06836b7e09a066ecb31ec6206b688db8920f36
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Oct 24 10:45:05 2014 -0200
+
+    Task #11080 - Isolate login CSS
+    
+    - Created login.css file
+    - Removed embedded CSS off of index.php
+    - Added reference to login.css into index.php
+    
+    Change-Id: Ia27ba99b26b955010993e044677a359e59877f36
+
+ index.php |   25 +------------------------
+ login.css |   32 ++++++++++++++++++++++++++++++++
+ 2 files changed, 33 insertions(+), 24 deletions(-)
+
+commit 99190a902073a2c460a4f88660c51bd838ad2674
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Oct 9 11:05:44 2014 -0300
+
+    Task #10983 - Fix: bad unread mail counter on page title
+    
+    - Additional UpdatePageTitle() calls added on mail.js
+    - When thread is marked read/unread, checkbox status is now preserved
+    
+    Change-Id: Ibba8646f5f23e93deca36d3ace3f5998dd858b99
+
+ mail/mail.js             |    3 ++-
+ mail/widget-headlines.js |    7 +++++--
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+commit e441ea6dc177bac57c94e4a4cc2fc05aa47d3f6e
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Oct 10 09:55:34 2014 -0300
+
+    Task #11002 - Fix: adding new quote pattern
+    
+    - Added new quote pattern, as a regular expression, to be checked
+    
+    Change-Id: I05892e37ca803612e3346ef196cd48dae008a9c9
+
+ inc/Tine.class.php |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0c0251179dec86a99fba3207175d82a5d0f2d5df
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Thu Oct 2 16:24:20 2014 -0300
+
+    Task #10947 - Fix: moved thread badly rendered on source folder
+    
+    - Thread moving algorithm fixed
+    - All jQuery.merge calls replaced by ordinary array concatenation
+    - Unread count on page title fixed when marking messages read/unread
+    
+    Change-Id: I487004904d6373f32fad19dbfda9cb5211469335
+
+ mail/ThreadMail.js       |   13 ++++++-------
+ mail/mail.js             |    2 +-
+ mail/widget-folders.js   |    4 ++--
+ mail/widget-headlines.js |   20 ++++++++++----------
+ 4 files changed, 19 insertions(+), 20 deletions(-)
+
+commit ef13f13f01e30fda07fb5829e3c5f2fd9ed15cae
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Oct 3 13:30:46 2014 -0300
+
+    Task #10950 - Update jQuery to 2.1.1 on Lite
+    
+    - Library file updated
+    - References updated
+    
+    Change-Id: I23f8b611b02ccb3493c552ca98482b48e35d6f26
+
+ inc/jquery-2.1.0.min.js |    4 ----
+ inc/jquery-2.1.1.min.js |    4 ++++
+ index.php               |    2 +-
+ mail/index.php          |    2 +-
+ 4 files changed, 6 insertions(+), 6 deletions(-)
+
+commit b20c9ec7a51b89e938d5940217952b8b8affb4be
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Sep 26 16:33:56 2014 -0300
+
+    Task #10783 - Added badges to Play and Apple store
+    
+    - Added two PNG badges
+    - Added copyright notice for both badges
+    - On login page, badges are shown if link to download exists on conf
+    
+    Change-Id: Ibc267d1e5b550d059cd9c8d6f5a4bad39d453d07
+
+ img/store-apple.png |  Bin 0 -> 6991 bytes
+ img/store-play.png  |  Bin 0 -> 6831 bytes
+ index.php           |   11 ++++++++++-
+ 3 files changed, 10 insertions(+), 1 deletion(-)
+
+commit cf58033b3e0c237a3b5600efe93f17147775fa56
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Sep 30 11:16:40 2014 -0300
+
+    Task #10895 - Fix: escaping subject HTML tags, back and forth
+    
+    - Tine class now returns non-escaped HTML chars
+    - Rendered headlines now processes subject with native jQuery text()
+      method, to escape HTML chars
+    
+    Change-Id: I0f27f7d19b52046e578b46e1530f32b92b48ef63
+
+ inc/Tine.class.php       |    2 +-
+ mail/widget-headlines.js |    6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 42f71a8fc48d0392b787baad8d49071ead19b6a0
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Sep 29 11:27:08 2014 -0300
+
+    Task #10927 - Fix: load personal contacts with non-CPF login
+    
+    - The path to addressbook contacts has a different ID, now correctly
+      assembled in getAllRegistryData processing on Ajax.class.php
+    - Method Tine::getPersonalContacts adjusted
+    
+    Change-Id: I51737da2c560ad52ad0048a9b742bea144183eb3
+
+ inc/Ajax.class.php |   14 +++++++-------
+ inc/Tine.class.php |    7 ++++---
+ 2 files changed, 11 insertions(+), 10 deletions(-)
+
+commit 5e8251bb06d460795c34be498f140d974ae3a525
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Tue Sep 23 19:03:13 2014 -0300
+
+    Task #10859 - Editing saved drafts
+    
+    - New drafts are always saved as read (not unread)
+    - When a draft message is clicked, the compose window is opened
+    - When a draft is modified and saved, previous old draft is deleted
+    - When a draft is send, draft is deleted
+    
+    Change-Id: I8b1135edbce0c4322dc0124562a169d81857d68e
+
+ inc/Ajax.class.php       |   11 ++-
+ inc/Tine.class.php       |   31 +++++--
+ mail/ThreadMail.js       |   76 +++++++++--------
+ mail/mail.js             |   68 +++++++--------
+ mail/widget-compose.js   |  209 +++++++++++++++++++++++++++++-----------------
+ mail/widget-headlines.js |   59 ++++++++++---
+ mail/widget-messages.js  |    8 +-
+ 7 files changed, 284 insertions(+), 178 deletions(-)
+
+commit de55ce38173710d31dba698d916eaf887d305312
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Sep 26 10:06:26 2014 -0300
+
+    Task #10904 - Fix: cookies correctly saved
+    
+    - On Request PHP class, only name, value and expiration of cookie is
+      saved, other field left to server default
+    - On Tine class, user agent grabbed from user browser
+    
+    Change-Id: Ie5fef9fc154e59f990c48776699452afb496281c
+
+ inc/Request.class.php |   10 +++++-----
+ inc/Tine.class.php    |    9 ++++-----
+ 2 files changed, 9 insertions(+), 10 deletions(-)
+
+commit d414584e58fa6d3a9225693a39a30e9f08188a19
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Sep 24 15:09:48 2014 -0300
+
+    Task #10853 - Escaping HTML tags on subjects
+    
+    - Added htmlspecialchars() in Tine class when outputting retrieved
+      subject fields
+    
+    Change-Id: I86a1ef1278800169608330703a8a138a6cd72809
+
+ inc/Tine.class.php |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3bc01bea721826c90bd60be2dba9b481b30b57b9
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Sep 24 10:36:01 2014 -0300
+
+    Task #10782 - Adding link to classic desktop version
+    
+    - On Lite login page, added link to classic desktop version, as pointed
+      by conf.php setting
+    - New CSS class to link placement, different in smartphones/desktop
+    
+    Change-Id: I966b54a02d511bbfda310a36dd61912247647494
+
+ index.php |    9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+commit c6a97dd30781e92ee4c65e057cf7cfc1a53a4622
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Sep 19 16:58:41 2014 -0300
+
+    Task #10871 - Fix: autocomplete email list with wrong formatting
+    
+    - Treating different email formatting when outputting personal contact
+      list in Tine class
+    
+    Change-Id: I4ef9acab9cc92f6543d56de22b385cf0f910e51d
+
+ inc/Tine.class.php |   19 ++++++++++++++++---
+ 1 file changed, 16 insertions(+), 3 deletions(-)
+
+commit d66b963030b68f713b58c52b3f1aa992bdf66dfe
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Sep 15 11:14:28 2014 -0300
+
+    Task #10836 - Visual mark on digitally signed messages
+    
+    - Added padlock image to flags.png sprite
+    - Added 'signed' field on returned mail object from Tine class
+    - Added 'icoSigned' icon CSS class
+    - Added treatment on widget-headlines.js and widget-messages.js
+    
+    Change-Id: I17f7f90fe8907d40d562dfd0a1383bffb635743e
+
+ img/flags.png            |  Bin 899 -> 1119 bytes
+ inc/Tine.class.php       |    1 +
+ mail/index.php           |    1 +
+ mail/mail.css            |    7 ++++---
+ mail/widget-headlines.js |    3 +++
+ mail/widget-messages.js  |    1 +
+ 6 files changed, 10 insertions(+), 3 deletions(-)
+
+commit 231a168b62ba448847819348775ab411e387ef34
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Fri Sep 12 11:51:34 2014 -0300
+
+    Task #10769 - Creating config file for relevant settings.
+    
+    Change-Id: Ic8f20adf3564d24b9f8f8b85e0fe17a9a03edcd4
+
+ conf.php           |   17 +++++++++++++++++
+ inc/Ajax.class.php |    5 +++--
+ mail/index.php     |    4 +++-
+ mail/mail.js       |    4 +++-
+ 4 files changed, 26 insertions(+), 4 deletions(-)
+
+commit c74a485ca96dc05506f4271a6bfc8b76ae640130
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed May 14 09:36:29 2014 -0300
+
+    Task #10136 - Fix duplicated emails on list
+    
+    Change-Id: Ibdeeb569575c45d107273b91c24b2fccdc84da6a
+
+ mail/ThreadMail.js       |    2 +-
+ mail/widget-headlines.js |   38 +++++---------------------------------
+ 2 files changed, 6 insertions(+), 34 deletions(-)
+
+commit bb4da21eada6c9a476c5c6f529f43594f791ac28
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon May 12 10:40:22 2014 -0300
+
+    Task #9965 - Fixed corrupted attachment download.
+
+ inc/Tine.class.php |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a3b7aeb07747a23e55935dab207f6a662520b776
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Wed Apr 30 16:15:32 2014 -0300
+
+    Task #9995 - Checking php5-curl module.
+    
+    - Only effective in the Expressolite app.
+    
+    Change-Id: I0bab45b532796f891b5dfcc818e410d8b9fd727f
+
+ index.php |    1 +
+ 1 file changed, 1 insertion(+)
+
+commit 77f5d2af6cd5191d4435e431ba134a9ef501c42e
+Author: Rodrigo Dias <rodrigo.dias@serpro.gov.br>
+Date:   Mon Apr 28 14:54:00 2014 -0300
+
+    Task #9897 - Adding Expresso Lite to repository.
+
+ img/arrows.png               |  Bin 0 -> 164 bytes
+ img/check0.png               |  Bin 0 -> 168 bytes
+ img/check1.png               |  Bin 0 -> 339 bytes
+ img/chromiumthrobber.svg     |    5 +
+ img/flags.png                |  Bin 0 -> 899 bytes
+ img/fondo.jpg                |  Bin 0 -> 170579 bytes
+ img/index.php                |    1 +
+ img/logo-lite-165.png        |  Bin 0 -> 5652 bytes
+ img/person-generic.gif       |  Bin 0 -> 2153 bytes
+ img/person-gmail.png         |  Bin 0 -> 904 bytes
+ img/person-govbr.png         |  Bin 0 -> 1572 bytes
+ img/person-outlook.png       |  Bin 0 -> 742 bytes
+ img/person-yahoo.png         |  Bin 0 -> 1117 bytes
+ img/person-zabbix.png        |  Bin 0 -> 717 bytes
+ inc/Ajax.class.php           |  325 +++++++++++++++++
+ inc/DateFormat.js            |   74 ++++
+ inc/JsonRpc.class.php        |   32 ++
+ inc/Request.class.php        |  124 +++++++
+ inc/Tine.class.php           |  820 ++++++++++++++++++++++++++++++++++++++++++
+ inc/UrlStack.js              |   47 +++
+ inc/general.css              |   52 +++
+ inc/index.php                |    1 +
+ inc/jquery-2.1.0.min.js      |    4 +
+ inc/jquery-contextMenu.js    |  162 +++++++++
+ inc/jquery-modelessDialog.js |  243 +++++++++++++
+ inc/jquery-serialize.js      |   16 +
+ inc/jquery-uploadFile.js     |   90 +++++
+ inc/sprintf.min.js           |    1 +
+ inc/toe.min.js               |    7 +
+ index.php                    |   72 ++++
+ login.js                     |  106 ++++++
+ mail/Contacts.js             |  138 +++++++
+ mail/ThreadMail.js           |  223 ++++++++++++
+ mail/index.php               |  112 ++++++
+ mail/mail.css                |  167 +++++++++
+ mail/mail.js                 |  295 +++++++++++++++
+ mail/widget-attacher.js      |  129 +++++++
+ mail/widget-compose.js       |  382 ++++++++++++++++++++
+ mail/widget-folders.js       |  270 ++++++++++++++
+ mail/widget-headlines.js     |  579 +++++++++++++++++++++++++++++
+ mail/widget-messages.js      |  427 ++++++++++++++++++++++
+ mail/widget-searchAddr.js    |  153 ++++++++
+ 42 files changed, 5057 insertions(+)
index bf57083..3b325bf 100755 (executable)
@@ -110,7 +110,7 @@ CORDOVA_APP_NAME=ExpressoBr
 
 
 
-#Delete the cordova app dir to force its regenaration, it that is the case
+#Delete the cordova app dir to force its regenaration, if that is the case
 if [ "$MODE" = "$REGENERATE" ]
 then
   echo "Cleaning $CORDOVA_APP_DIR to regenerate project from scratch"
@@ -131,6 +131,10 @@ then
   echo "Adding Android platform"
   cd $CORDOVA_APP_DIR
   cordova platform add android
+  echo "Adding network-information plugin"
+  cordova plugin add cordova-plugin-network-information
+  echo "Adding AccountManager plugin"
+  cordova plugin add https://github.com/polychrom/cordova-android-accountmanager.git
 fi
 
 
@@ -155,7 +159,7 @@ done
 
 #Overwrite what needs to be overwritten in the cordova project
 echo "Overwriting cordova project specific files..."
-cp -rf $CORDOVA_MAIN_DIR/cordova-build-src/* $CORDOVA_APP_DIR/www
+cp -rf $CORDOVA_MAIN_DIR/cordova-build-src/* $CORDOVA_APP_DIR
 
 
 #All done, let's call cordova to do what the user asked for
index 16d68b6..39ebc82 100644 (file)
@@ -8,6 +8,7 @@
         Equipe de desenvolvimento do ExpressoBr
     </author>
     <content src="index.html" />
+    <plugin name="cordova-plugin-whitelist" spec="1" />
     <access origin="*" />
     <platform name="android">
         <icon src="icons/expressobr-ldpi.png" density="ldpi" />
diff --git a/clients/ExpressoLite/build/cordova/cordova-build-src/platforms/android/res/xml/authenticator.xml b/clients/ExpressoLite/build/cordova/cordova-build-src/platforms/android/res/xml/authenticator.xml
new file mode 100644 (file)
index 0000000..d2ba828
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
+    android:accountType="br.gov.serpro.expressobr.Login"
+    android:icon="@drawable/icon"
+    android:smallIcon="@drawable/icon"
+    android:label="@string/app_name"
+/>
diff --git a/clients/ExpressoLite/build/cordova/cordova-build-src/www/common-js/CordovaConfig.js b/clients/ExpressoLite/build/cordova/cordova-build-src/www/common-js/CordovaConfig.js
new file mode 100644 (file)
index 0000000..f84b0ea
--- /dev/null
@@ -0,0 +1,18 @@
+/*!
+ * Expresso Lite
+ * File containing Cordova relevant information.
+ * This is the version used in the phone application, and replaces
+ * the default version used in the server environment.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Charles Wust <charles.wust@serpro.gov.br>
+ * @copyright Copyright (c) 2015 Serpro (http://www.serpro.gov.br)
+ */
+
+define({
+    isEnabled: true,
+    liteBackendUrl: 'https://m.expressobr.serpro.gov.br'
+    // This should be the address where Expresso Lite is
+    // available (without trailing '/' )
+});
diff --git a/clients/ExpressoLite/src/accessible/Accessible/Calendar/EventConfirmation.php b/clients/ExpressoLite/src/accessible/Accessible/Calendar/EventConfirmation.php
new file mode 100644 (file)
index 0000000..cabcb8e
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Expresso Lite Accessible
+ * Calendar event confirmation.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Diogo Santos <diogo.santos@serpro.gov.br>
+ * @copyright Copyright (c) 2015 Serpro (http://www.serpro.gov.br)
+ */
+
+namespace Accessible\Calendar;
+
+use Accessible\Handler;
+use ExpressoLite\Backend\LiteRequestProcessor;
+use ExpressoLite\Backend\TineSessionRepository;
+use Accessible\Dispatcher;
+use Accessible\Core\ShowFeedback;
+
+class EventConfirmation extends Handler
+{
+    /**
+     * @see Accessible\Handler::execute
+     */
+    public function execute($params)
+    {
+        $liteRequestProcessor = new LiteRequestProcessor();
+        $message = $liteRequestProcessor->executeRequest('setEventConfirmation', (object) array(
+            'id' => $params->idEvent,
+            'confirmation' => $params->confirmation
+        ));
+
+        if ((isset($message->eventId) && isset($message->confirmation))) {
+            $outMsg = 'Confirmação de evento realizada com sucesso.';
+            $feedbackType = ShowFeedback::MSG_SUCCESS;
+        } else {
+            $outMsg = 'Não foi possível realizar a confirmação do evento.';
+            $feedbackType = ShowFeedback::MSG_SUCCESS;
+        }
+
+        Dispatcher::processRequest('Core.ShowFeedback', (object) array (
+            'typeMsg' => $feedbackType,
+            'message' => $outMsg,
+            'destinationText' => 'Voltar para o evento',
+            'destinationUrl' => (object) array(
+                'action' => 'Calendar.OpenEvent',
+                'params' => array (
+                    'from' => $params->from,
+                    'until' => $params->until,
+                    'idEvent' => $params->idEvent,
+                    'calendarId' => $params->calendarId,
+                    'monthVal' => $params->month,
+                    'yearVal' => $params->year
+                )
+            )
+        ));
+    }
+}
diff --git a/clients/ExpressoLite/src/accessible/Accessible/Calendar/Main.php b/clients/ExpressoLite/src/accessible/Accessible/Calendar/Main.php
new file mode 100644 (file)
index 0000000..5a82bb4
--- /dev/null
@@ -0,0 +1,270 @@
+<?php
+/**
+ * Expresso Lite Accessible
+ * Manipulates data for the calendar application main screen,
+ * loading information about calendar events.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Diogo Santos <diogo.santos@serpro.gov.br>
+ * @copyright Copyright (c) 2016 Serpro (http://www.serpro.gov.br)
+ */
+
+namespace Accessible\Calendar;
+
+use Accessible\Handler;
+use ExpressoLite\Backend\LiteRequestProcessor;
+use Accessible\Core\DateUtils;
+use Accessible\Core\EventUtils;
+use ExpressoLite\Backend\TineSessionRepository;
+
+class Main extends Handler
+{
+    /**
+     * @see Accessible\Handler::execute
+     */
+    public function execute($params)
+    {
+        $currCalendar  = $this->getCurrentCalendar($params);
+        $currDateRange = $this->formatCurrentCalendarDateRange($params);
+        $currNavigationDateRange = EventUtils::getPreparedDateRangeForCalendarNavigation( (object) array(
+            'month' => $currDateRange->monthVal,
+            'year'  => $currDateRange->yearVal
+        ));
+
+        // The complete list of events according to the current calendar date range
+        $allEvents = $this->getEventListing($currCalendar->id, $currDateRange);
+
+        // Entire event listing filtered by current day
+        $todayEvents = $this->formatTodaysEventListing($allEvents->listing);
+        $showTodayEvents = DateUtils::isCurentDayWithinCurrentCalendarDateRange($currDateRange);
+
+        $this->showTemplate('MainTemplate', (object) array(
+            'calendarMainTitle' => $this->prepareCalendarMainTitle($currDateRange, $currCalendar),
+            'isTodayExhibition' => $showTodayEvents,
+            'hasTodayEvents' => $todayEvents->hasEvents,
+            'todayEventListing' => $this->formatEventsForVisualization(
+                $todayEvents->listing,
+                $currCalendar->id,
+                $currDateRange
+            ),
+            'dateRangeTodayEventsSummary' => EventUtils::setTodayEventsDateRangeSummary($todayEvents->listing),
+            'hasEvents' => $allEvents->hasEvents,
+            'eventListing' => $this->formatEventsForVisualization(
+                $allEvents->listing,
+                $currCalendar->id,
+                $currDateRange
+             ),
+            'dateRangeEventsSummary' => EventUtils::setEventsDateRangeSummary($allEvents->listing, $currDateRange),
+            'lnkEmail' => $this->makeUrl('Mail.Main'),
+            'lnkLogoff' => $this->makeUrl('Login.Logoff'),
+            'lnkChangeCalendar' => $this->makeUrl('Calendar.OpenCalendar'),
+            'lnkBack' => $this->makeUrl('Calendar.Main', array(
+                'calendarId' => $currCalendar->id,
+            )),
+            'calendarNavigation' => $this->formatCalendarNavigationLinks(
+                $currCalendar->id,
+                $currNavigationDateRange
+            ),
+            'lnkChangeCalendar' => $this->makeUrl('Calendar.OpenCalendar', array(
+                'calendarId' => $currCalendar->id,
+                'month' => $currDateRange->monthVal,
+                'year' => $currDateRange->yearVal
+            ))
+        ));
+    }
+
+    /**
+     * Return the current calendar as is passed or not a calendar id, if any id is
+     * provided or is invalid, so the personal calendar of the user will be used as
+     * default.
+     *
+     * @param StdClass $params Contains the initial request to calendar module
+     * @return StdClass Calendar object
+     */
+    private function getCurrentCalendar($params)
+    {
+        $lrp = new LiteRequestProcessor();
+        $calendars = $lrp->executeRequest('GetCalendars', (object) array());
+
+        if (!isset($params->calendarId)) {
+            // If no calendar id is set, use the personal calendar as the default
+            return $calendars[0];
+        } else {
+            foreach ($calendars as $cal) {
+                if (intval($cal->id) === intval($params->calendarId)) {
+                    return $cal;
+                }
+            }
+            return null; // return null if no calendar with the specified id is found
+        }
+    }
+
+    /**
+     * Checks if any time parameter was supplied , if not then the year and month
+     * of the current day will be used as date range reference.
+     *
+     * @param StdClass $params Initial request to calendar module
+     * @return StdClass An object with a month value (->monthVal) and
+     *                  year value (->yearVal)
+     */
+    private function formatCurrentCalendarDateRange($params)
+    {
+        // Validating provided parameters and formats event date range
+        return (object) array(
+            'monthVal' => isset($params->month) ?
+                $params->month :
+                DateUtils::getCurrentMonthNumber(),
+            'yearVal' => isset($params->year) ?
+                $params->year :
+                DateUtils::getCurrentYear()
+        );
+    }
+
+    /**
+     * Given an event listing in an arbitrary date range, this method returns
+     * a new listing containing only the events of the current day
+     *
+     * @param StdClass $eventListing Listing of events in a given date range
+     * @return StdClass Today event listing content (->listing) and a
+     *                  boolean (->hasEvents) indicating whether or not
+     *                  there are events in current day
+     */
+    private function formatTodaysEventListing($eventListing)
+    {
+        $todayEventList = array();
+        if (isset($eventListing) && count((array) $eventListing) > 0) {
+            foreach ($eventListing as $event) {
+                if (EventUtils::isEventScheduledForToday($event->from)) {
+                    $todayEventList[] = $event;
+                }
+            }
+        }
+
+        return (object) array(
+            'hasEvents' => count($todayEventList) > 0,
+            'listing' => (object) $todayEventList
+        );
+    }
+
+    /**
+     * Prepares the calendar main title which is composed by the current
+     * calendar name concatenated with the month and year of the current
+     * used calendar.
+     *
+     * @param StdClass $currDateRange Formatted date range with month and
+     *                                year values
+     * @param StdClass $currentCalendar The current calendar in use
+     * @return string Calendar main title
+     */
+    private function prepareCalendarMainTitle($currDateRange, $currentCalendar)
+    {
+        return
+            $currentCalendar->name . ' em ' .
+            DateUtils::getMonthName($currDateRange->monthVal) . ' de ' .
+            $currDateRange->yearVal . ' ';
+    }
+
+    /**
+     * Returns an ordered listing of events according to the provided events
+     * date range and to the currently selected user calendar.
+     *
+     * @param string $calendarId Current calendar to be used
+     * @param StdClass $currDateRange Formatted date range with month and year values
+     *                                to use as the event date range
+     * @return StdClass Event listing content (->listing) and a boolean (->hasEvents)
+     *                  indicating whether or not there are calendar events
+     */
+    private function getEventListing($calendarId, $currDateRange)
+    {
+        // Setting properly the correct timezone based on login user timezone
+        $timeZone = TineSessionRepository::getTineSession()->getAttribute('Tinebase.timeZone');
+
+        $lrp = new LiteRequestProcessor();
+        $preparedEventDateRange = EventUtils::prepareEventsDateRange($currDateRange);
+        $message = $lrp->executeRequest('SearchEvents', (object) array(
+                'from'  => $preparedEventDateRange->from,
+                'until' => $preparedEventDateRange->until,
+                'timeZone' => $timeZone,
+                'calendarId' => $calendarId
+        ));
+
+        // Sorts the event list comparing each event start time (->from)
+        usort($message->events, function($e1, $e2) {
+            return strcmp($e1->from, $e2->from);
+        });
+
+        return (object) array(
+            'hasEvents' => count($message->events) > 0,
+            'listing' => (object) $message->events
+        );
+    }
+
+    /**
+     * Formats information about events to be displayed on calendar events
+     * main screen.
+     *
+     * @param array $eventListing Event listing in a given date range to be
+     *                            formatted for visualization
+     * @param int $currCalendarId The id of the current calendar in use
+     * @param stdClass $currDateRange Formatted date range with month and
+     *                                year values
+     * @return array Formatted list of events
+     */
+    private function formatEventsForVisualization($eventListing, $currCalendarId, $currDateRange)
+    {
+        if (isset($eventListing) && count($eventListing) > 0) {
+            foreach ($eventListing as &$event) {
+                $fromData  = DateUtils::getInfomationAboutDate($event->from);
+                $untilData = DateUtils::getInfomationAboutDate($event->until);
+                $event->formattedDay =     $fromData->dayVal;
+                $event->formattedFrom =    $fromData->timeVal;
+                $event->formattedUntil =   $untilData->timeVal;
+                $event->formattedMonth =   $fromData->monthName;
+                $event->formattedWeekDay = $fromData->weekdayName;
+                $event->notYetOccurred =   DateUtils::compareToCurrentDate($event->from);
+                $event->lnkOpenEvent = $this->makeUrl('Calendar.OpenEvent', array(
+                    'from' => $event->from,
+                    'until' => $event->until,
+                    'idEvent' => $event->id,
+                    'calendarId' => $currCalendarId,
+                    'monthVal' => $currDateRange->monthVal,
+                    'yearVal' => $currDateRange->yearVal
+                ));
+            }
+            return $eventListing;
+        } else {
+            return array();
+        }
+    }
+
+    /**
+     * Format links for calendar navigation.
+     *
+     * @param int $calendarId The id of the current calendar in use
+     * @param array $eventDateRange An array of prepared event date range objects
+     * @return array Formatted link objects to calendar navigation, each element
+     *               contains a link to navigate through calendar (->lnk), the text
+     *               of the link (->lnkText) and a title for the link (->lnkTitle)
+     */
+    private function formatCalendarNavigationLinks($calendarId, $eventDateRange)
+    {
+        $calendarNavigationLinks = array();
+
+        // Formatting links
+        foreach ($eventDateRange as $edr) {
+            $monthName = DateUtils::getMonthName($edr->month);
+
+            $calendarNavigationLinks[] = (object) array(
+                'lnk' => $this->makeUrl('Calendar.Main', array(
+                    'month' => $edr->month,
+                    'year' => $edr->year,
+                    'calendarId' => $calendarId
+                )),
+                'lnkText' => $edr->order . ' - ' . $monthName . ' de ' . $edr->year,
+                'lnkTitle' => EventUtils::EVENTS_CALENDAR_NAME . ' de ' . $monthName . ' de ' . $edr->year
+            );
+        }
+        return $calendarNavigationLinks;
+    }
+}
diff --git a/clients/ExpressoLite/src/accessible/Accessible/Calendar/OpenCalendar.php b/clients/ExpressoLite/src/accessible/Accessible/Calendar/OpenCalendar.php
new file mode 100644 (file)
index 0000000..7d6f3e9
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Expresso Lite Accessible
+ * Show all calendars (personal or shared) for the user to choose one
+ * and view it's events.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Diogo Santos <diogo.santos@serpro.gov.br>
+ * @copyright Copyright (c) 2016 Serpro (http://www.serpro.gov.br)
+ */
+
+namespace Accessible\Calendar;
+
+use Accessible\Handler;
+use ExpressoLite\Backend\LiteRequestProcessor;
+use Accessible\Core\DateUtils;
+use Accessible\Core\EventUtils;
+
+class OpenCalendar extends Handler
+{
+    /**
+     * @see Accessible\Handler::execute
+     */
+    public function execute($params)
+    {
+        $lrp = new LiteRequestProcessor();
+
+        // Gets personals and shared calendars
+        $calendars = $lrp->executeRequest('GetCalendars', (object) array());
+
+        $this->showTemplate('OpenCalendarTemplate', (object) array(
+            'calendars' => self::formatCalendarTree($calendars, $params),
+            'lnkBack' => $this->makeUrl('Calendar.Main', array(
+                'calendarId' => $params->calendarId,
+                'month' => $params->month,
+                'years' => $params->year
+             ))
+        ));
+    }
+
+    /**
+     * Format information about all calendars (personal and shared) that the
+     * user has some kind of access.
+     *
+     * @param array $arrCalendars An array of calendar objects
+     * @return array An array of objects in which each contains formatted
+     *               information about the calendars, like the id of the
+     *               calendar (->id), the calendar name (->name) and a
+     *               link to load other calendar (->lnkOpenCalendar)
+     */
+    private function formatCalendarTree($arrCalendars)
+    {
+        $retCalendars = array();
+        foreach ($arrCalendars as $cal) {
+            $retCalendars[] = (object) array(
+                'id' => $cal->id,
+                'name' => $cal->name,
+                'lnkOpenCalendar' => $this->makeUrl('Calendar.Main', array(
+                    'calendarId' => $cal->id
+                ))
+            );
+        }
+
+        return $retCalendars;
+    }
+}
diff --git a/clients/ExpressoLite/src/accessible/Accessible/Calendar/OpenEvent.php b/clients/ExpressoLite/src/accessible/Accessible/Calendar/OpenEvent.php
new file mode 100644 (file)
index 0000000..8b7454e
--- /dev/null
@@ -0,0 +1,232 @@
+<?php
+/**
+ * Expresso Lite Accessible
+ * Shows information about a calendar event.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Diogo Santos <diogo.santos@serpro.gov.br>
+ * @copyright Copyright (c) 2016 Serpro (http://www.serpro.gov.br)
+ */
+
+namespace Accessible\Calendar;
+
+use Accessible\Handler;
+use ExpressoLite\Backend\LiteRequestProcessor;
+use ExpressoLite\Backend\TineSessionRepository;
+use Accessible\Core\DateUtils;
+use Accessible\Dispatcher;
+use Accessible\Core\ShowFeedback;
+use Accessible\Core\EventUtils;
+
+class OpenEvent extends Handler
+{
+    /**
+     * @see Accessible\Handler::execute
+     */
+    public function execute($params)
+    {
+        $isParamsOkToOpenEvent = $this->validateParamsToOpenEvent($params);
+        $event = $isParamsOkToOpenEvent ? $this->retrieveCalendarEvent($params) : null;
+
+        if ($isParamsOkToOpenEvent && !is_null($event)) {
+            $formtEvInfo = $this->formatEventInformation($event);
+            $currentEmailUser = TineSessionRepository::getTineSession()->getAttribute('Expressomail.email');
+            $eventHasNotOccurred = EventUtils::checkEventHasNotOccurred($event->from);
+            $userAllowedToConfirm = EventUtils::isUserAllowedToConfirmEvent( (object) array(
+                    'currentEmailUser' => $currentEmailUser,
+                    'attendees'        => (object) $event->attendees,
+            ));
+
+            $this->showTemplate('OpenEventTemplate', (object) array(
+                'lnkBackToCalendar' => $this->makeUrl('Calendar.Main', array(
+                    'month' => $params->monthVal,
+                    'year' => $params->yearVal,
+                    'calendarId' => $params->calendarId
+                )),
+                'date'                   => $formtEvInfo->date,
+                'summary'                => $formtEvInfo->summary,
+                'schedule'               => $formtEvInfo->schedule,
+                'location'               => $formtEvInfo->location,
+                'description'            => $formtEvInfo->description,
+                'organizerName'          => $formtEvInfo->organizerName,
+                'organizerOrgUnitRegion' => $formtEvInfo->organizerOrgUnitRegion,
+                'countAttendees'         => count($formtEvInfo->attendees),
+                'attendeesInformation'   => $this->formatAttendeesInformation(
+                    $formtEvInfo->attendees
+                ),
+                'lnkAccepted' => $this->makeUrl('Calendar.EventConfirmation', array(
+                    'idEvent'      => $params->idEvent,
+                    'confirmation' => EventUtils::EVENTS_CONFIRM_ACCEPTED,
+                    'month'        => $params->monthVal,
+                    'year'         => $params->yearVal,
+                    'calendarId'   => $params->calendarId,
+                    'from'         => $params->from,
+                    'until'        => $params->until
+                )),
+                'lnkDeclined' => $this->makeUrl('Calendar.EventConfirmation', array(
+                    'idEvent'      => $params->idEvent,
+                    'confirmation' => EventUtils::EVENTS_CONFIRM_DECLINED,
+                    'month'        => $params->monthVal,
+                    'year'         => $params->yearVal,
+                    'calendarId'   => $params->calendarId,
+                    'from'         => $params->from,
+                    'until'        => $params->until
+                )),
+                'lnkTentative' => $this->makeUrl('Calendar.EventConfirmation', array(
+                    'idEvent'      => $params->idEvent,
+                    'confirmation' => EventUtils::EVENTS_CONFIRM_TENTATIVE,
+                    'month'        => $params->monthVal,
+                    'year'         => $params->yearVal,
+                    'calendarId'   => $params->calendarId,
+                    'from'         => $params->from,
+                    'until'        => $params->until
+                )),
+                'lnkNeedsAction'   => $this->makeUrl('Calendar.EventConfirmation', array(
+                    'idEvent'      => $params->idEvent,
+                    'confirmation' => EventUtils::EVENTS_CONFIRM_NEEDS_ACTION,
+                    'month'        => $params->monthVal,
+                    'year'         => $params->yearVal,
+                    'calendarId'   => $params->calendarId,
+                    'from'         => $params->from,
+                    'until'        => $params->until
+                )),
+                'isUserAllowedToConfirm' => $eventHasNotOccurred && $userAllowedToConfirm
+            ));
+        } else { // At this point something was not properly correct to open the event
+            Dispatcher::processRequest('Core.ShowFeedback', (object) array (
+                'typeMsg' => ShowFeedback::MSG_ERROR,
+                'message' => 'Não foi possível acessar as informações desse evento!',
+                'destinationText' => 'Voltar para o calendário',
+                'destinationUrl' => (object) array(
+                    'action' => 'Calendar.Main',
+                    'params' => array (
+                        'calendarId' => $params->calendarId,
+                        'month' => $params->monthVal,
+                        'year' => $params->yearVal,
+                    )
+                )
+            ));
+        }
+    }
+
+    /**
+     * Validate the parameters required for viewing a particular event.
+     *
+     * @param stdClass $params Initial request to calendar module. It is expected the information
+     *                         about date and time in from (->from) and until values (->until),
+     *                         the id of the current calendar (->calendarId) and the id of the
+     *                         event (->idEvent) to be viewed.
+     * @return boolean True if all params (->calendarId), (->from), (->until) and (->eventId)
+     *                 were set, false otherwise
+     */
+    private function validateParamsToOpenEvent($params)
+    {
+        return isset($params->from) && isset($params->until)
+            && isset($params->calendarId) && isset($params->idEvent);
+    }
+
+    /**
+     * Retrieve the calendar event object.
+     *
+     * @param stdClass $params Contains the request's parameters to calendar module. The information
+     *                         about date and time in from value (->from) and until value (->until);
+     *                         also, it must be informed the id of the current calendar (->calendarId)
+     * @return stdClass The Event object if it possible to retrieve the event data, null otherwise
+     */
+    private function retrieveCalendarEvent($params)
+    {
+        $foundEvent = null;
+        $liteRequestProcessor = new LiteRequestProcessor();
+
+        $message = $liteRequestProcessor->executeRequest('SearchEvents', (object) array(
+            'from' => $params->from,
+            'until' => $params->until,
+            'calendarId' => $params->calendarId,
+            'timeZone' => TineSessionRepository::getTineSession()->getAttribute('Tinebase.timeZone')
+        ));
+
+        foreach ($message->events AS $event) {
+            if ($params->idEvent === $event->id) {
+                $foundEvent = $event;
+                break;
+            }
+        }
+
+        return $foundEvent;
+    }
+
+    /**
+     * Format information about a particular calendar event to be viewed.
+     *
+     * @param stdClass $event The Event object
+     * @return stdClass An object containning formatted event information like date (->date),
+     *                  time (->schedule), the organizer's name (->organizerName), organization
+     *                  unit and region (->orgUnitRegion), the total count of attendees
+     *                  (->countAttendees), the list of attendees (->attendees), the event's
+     *                  summary (->summary) and the description about the event (->description)
+     */
+    private function formatEventInformation($event)
+    {
+        $fromInfo  = DateUtils::getInfomationAboutDate($event->from);
+        $untilInfo = DateUtils::getInfomationAboutDate($event->until);
+
+        return (object) array(
+            'schedule' => $fromInfo->timeVal . ' às ' . $untilInfo->timeVal,
+            'date' => $fromInfo->weekdayName . ', ' . $fromInfo->dayVal . ' de '
+                    . $fromInfo->monthName . ' de ' . $fromInfo->yearVal . '.',
+            'attendees'     => $event->attendees,
+            'organizerName' => $event->organizer->name,
+            'organizerOrgUnitRegion' => $event->organizer->orgUnit . ', ' . $event->organizer->region,
+            'summary'     => empty($event->summary) ?
+                EventUtils::EVENTS_WITHOUT_SUMMARY : $event->summary,
+            'location'    => empty($event->location) ?
+                EventUtils::EVENTS_WITHOUT_LOCATION : $event->location,
+            'description' => empty($event->description) ?
+                EventUtils::EVENTS_WITHOUT_DESCRIPTION : nl2br($event->description),
+        );
+    }
+
+    /**
+     * Format information, about the attendees of a calendar event, to be viewed. The current user
+     * logged in, if he is one of the attendees, so he must be the first exhibited attendee. The
+     * remaining attendees will be group by, in the following order, that have the confirmation
+     * type: ACCEPTED, TENTATIVE, NEEDS-ACTION and DECLINED.
+     *
+     * @param array $attendees An array of attendees objects
+     * @return array An array of formatted information about attendees in wich element contains
+     *               the name (->name) of the attendee, it's current confirmation (->userConfirm),
+     *               the icon css class of the current confirmation type (->userConfirmIcon) and
+     *               the organization and region about attendee's role
+     */
+    private function formatAttendeesInformation($attendees)
+    {
+        // Email of current logged in user, because we'll search for it in attendees list
+        $currUserEmail = TineSessionRepository::getTineSession()->getAttribute('Expressomail.email');
+
+        // Array which indexes are confirmation types, each one containing an empty list of attendees
+        $result = EventUtils::prepareListOfConfirmationTypesToGroupAttendees();
+
+        $currUserAttendee = null;
+        $userHasNotFounded = true;
+        foreach($attendees as $attendee) {
+            // Formatting the description for the current attendee event confirmation type
+            $attendee->confirmStatus = EventUtils::getConfirmationDescription($attendee->confirmation);
+
+            // Verifying if the logged in user is also an attendee of the event.
+            if ($userHasNotFounded && $attendee->email === $currUserEmail) {
+                $currUserAttendee = $attendee;
+                $userHasNotFounded = false;
+            } else {
+                $result[$attendee->confirmation][] = $attendee;
+            }
+        }
+
+        // Checking whether the logged in user is a attendee of the current event
+        if (!$userHasNotFounded && !is_null($currUserAttendee)) {
+            array_unshift($result, array($currUserAttendee)); // First one to be displayed
+        }
+
+        return EventUtils::sortAttendeesByName($result);
+    }
+}
diff --git a/clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/MainTemplate.css b/clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/MainTemplate.css
new file mode 100644 (file)
index 0000000..62012c5
--- /dev/null
@@ -0,0 +1,31 @@
+/*!
+ * Expresso Lite
+ * CSS for calendar screen.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Diogo Dantas <diogo.santos@serpro.gov.br>
+ * @copyright Copyright (c) 2016 Serpro (http://www.serpro.gov.br)
+ */
+
+/* --- MAIN MENU --- */
+#menu ul { margin-left:-30px; margin-right:10px; }
+
+/* --- HEADLINES --- */
+.eventsTable { width:calc(100% - 20px); margin-bottom:1em; border:1; }
+.eventsTable { border:1px solid #FFF; border-collapse:collapse; }
+.eventsTable caption { padding:5px 10px; font-size:110%; font-weight:600; }
+
+.eventsTable th, td { border:2px solid #FFF; background-color:#F4F4F4; }
+.eventsTable th { font-weight:400; font-size:110%; padding:5px; background-color:#005076; color:#FFF; }
+.eventsTable th:first-of-type { border-top-left-radius:6px; }
+.eventsTable th:last-of-type { border-top-right-radius:6px; }
+
+.alignCenter { text-align:center; }
+.alignLeft { padding:10px 10px; text-align:left; }
+.emptyEvents { font-size:110%; font-weight:600; }
+.adjustCol { width:220px; }
+.notYetOccurred { font-weight:600; }
+.adjustSeq { width:20px; }
+
+#monthNavigation ul { margin-left:-30px; margin-top:25px; }
diff --git a/clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/MainTemplate.php b/clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/MainTemplate.php
new file mode 100644 (file)
index 0000000..e890101
--- /dev/null
@@ -0,0 +1,176 @@
+<!DOCTYPE html>
+<!--
+ * Expresso Lite Accessible
+ * Entry index page for calendar module.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Diogo Santos <diogo.santos@serpro.gov.br>
+ * @copyright Copyright (c) 2015 Serpro (http://www.serpro.gov.br)
+-->
+<html lang="pt-BR">
+<head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1" />
+    <link rel="icon" type="image/png" href="../img/favicon.png" />
+    <link type="text/css" rel="stylesheet" href="./Accessible/Core/Template/general.css" />
+    <link type="text/css" rel="stylesheet" href="./Accessible/Calendar/Template/MainTemplate.css" />
+    <title> <?= $VIEW->calendarMainTitle ?>- ExpressoBr Acessível</title>
+</head>
+<body>
+
+<div id="top" name="top" >
+    <div id="anchors" name="anchors" class="links systemLinks">
+        <nav class="contentAlign">
+            <ul>
+                <li><a href="#menu" accesskey="1">Ir para o menu [1]</a></li>
+                <?php IF($VIEW->isTodayExhibition) : ?>
+                    <li><a href="#dayEvents" accesskey="2">Ir para eventos de hoje [2]</a></li>
+                <?php ENDIF; ?>
+                <li><a href="#monthEvents" accesskey="3">Ir para eventos do mês [3]</a></li>
+                <li><a href="#monthNavigation" accesskey="4">Ir para navegação por mês [4]</a></li>
+            </ul>
+        </nav>
+    </div>
+</div>
+
+<div id="menu" name="menu">
+    <h2 class="anchorsTitle">Menu</h2>
+    <div class="links systemLinks">
+        <ul>
+            <li><a href="<?= $VIEW->lnkEmail ?>" accesskey="e">Módulo Email [e]</a></li>
+            <li><a href="<?= $VIEW->lnkChangeCalendar ?>" accesskey="q">Selecionar calendário [q]</a></li>
+            <li><a href="<?= $VIEW->lnkLogoff ?>" title="Sair do expressobr acessível" accesskey="s">Sair do sistema [s]</a></li>
+        </ul>
+    </div>
+</div>
+
+<!--
+ * This element is a top page anchor link, it can be repeated on template files.
+ * But only one link element, of these repeated, should contain 'accesskey="t"' attribute.
+ -->
+<div class="backToTop links systemLinks contentAlign">
+    <ul>
+        <li><a href="#top" accesskey="t">voltar ao topo [t]</a></li>
+    </ul>
+</div>
+
+<?php IF($VIEW->isTodayExhibition) : ?>
+<div id="dayEvents" name="dayEvents">
+    <h2 class="anchorsTitle">Eventos de hoje</h2>
+    <?php IF($VIEW->hasTodayEvents) : ?>
+    <table id="dailyEventsTable" name="dailyEventsTable" class="clickableCell contentAlign eventsTable">
+        <caption><?= $VIEW->dateRangeTodayEventsSummary; ?></caption>
+        <thead>
+            <tr>
+                <th id="sequenceToday" class="adjustSeq" aria-hidden="true">#</th>
+                <th id="horario" class="adjustCol">Horário</th>
+                <th id="subject">Eventos</th>
+            </tr>
+        </thead>
+        <tbody>
+
+            <?php $SEQ = 1; ?>
+            <?php FOREACH ($VIEW->todayEventListing AS $EVENT) : ?>
+            <tr class="<?= $EVENT->notYetOccurred ? 'notYetOccurred' : '' ?>">
+                <td headers="sequenceToday" class="alignCenter" aria-hidden="true"><?= $SEQ; ?></td>
+                <td headers="date" class="alignCenter">
+                    <?= $EVENT->formattedFrom ?> às <?= $EVENT->formattedUntil ?>
+                </td>
+                <td headers="subject" class="alignLeft">
+                    <a href="<?= $EVENT->lnkOpenEvent ?>" title="Visualizar este evento">
+                        <span class="onlyForScreenReaders">
+                            Evento de hoje <?= $SEQ; ?>,
+                            Assunto: <?= $EVENT->summary; ?>,
+                            Horário: <?= $EVENT->formattedFrom; ?> às <?= $EVENT->formattedUntil; ?>
+                        </span>
+                        <span aria-hidden="true"><?= $EVENT->summary; ?></span>
+                    </a>
+                </td>
+            </tr>
+            <?php $SEQ++; ?>
+            <?php ENDFOREACH; ?>
+        </tbody>
+    </table>
+    <?php ELSE : ?>
+        <p class="alignCenter emptyEvents"> <?= $VIEW->dateRangeTodayEventsSummary; ?> </p>
+    <?php ENDIF; ?>
+</div>
+
+<div class="backToTop links systemLinks contentAlign">
+    <ul>
+        <li><a href="#top">voltar ao topo [t]</a></li>
+    </ul>
+</div>
+<?php ENDIF; ?>
+
+<div id="monthEvents" name="monthEvents">
+    <h2 class="anchorsTitle">Eventos do mês</h2>
+    <?php IF($VIEW->hasEvents) : ?>
+    <table id="monthlyEventsTable" name="monthlyEventsTable" class="clickableCell contentAlign eventsTable">
+        <caption><?= $VIEW->dateRangeEventsSummary ?></caption>
+        <thead>
+            <tr>
+                <th id="sequence" class="adjustSeq" aria-hidden="true">#</th>
+                <th id="date" class="adjustCol">Data</th>
+                <th id="subject">Eventos</th>
+
+            </tr>
+        </thead>
+        <tbody>
+            <?php $SEQ = 1; ?>
+            <?php FOREACH ($VIEW->eventListing AS $EVENT) : ?>
+            <tr class="<?= $EVENT->notYetOccurred ? 'notYetOccurred' : '' ?>">
+                <td headers="sequence" class="alignCenter" aria-hidden="true"><?= $SEQ; ?></td>
+                <td headers="date" class="alignCenter">
+                    <?= $EVENT->formattedWeekDay ?>,
+                    <?= $EVENT->formattedDay ?> de
+                    <?= $EVENT->formattedMonth ?>
+                    <?= $EVENT->formattedFrom; ?>
+                </td>
+                <td headers="subject" class="alignLeft">
+                    <a href="<?= $EVENT->lnkOpenEvent ?>" title="Visualizar este evento">
+                        <span class="onlyForScreenReaders">
+                            Evento <?= $SEQ; ?>,
+                            Assunto: <?= $EVENT->summary; ?>,
+                            <?= $EVENT->formattedWeekDay ?>,
+                            <?= $EVENT->formattedDay ?> de <?= $EVENT->formattedMonth ?>
+                        </span>
+                        <span aria-hidden="true"><?= $EVENT->summary; ?></span>
+                    </a>
+                </td>
+            </tr>
+            <?php $SEQ++; ?>
+            <?php ENDFOREACH; ?>
+        </tbody>
+    </table>
+    <?php ELSE : ?>
+        <p class="alignCenter emptyEvents"> <?= $VIEW->dateRangeEventsSummary ?> </p>
+    <?php ENDIF ?>
+
+    <div class="backToTop links systemLinks contentAlign">
+        <ul>
+            <li><a href="#top">voltar ao topo [t]</a></li>
+        </ul>
+    </div>
+</div>
+
+<div id="monthNavigation" name="monthNavigation">
+    <h2 class="anchorsTitle">Navegação por mês</h2>
+    <div class="links linkAsButton alignCenter">
+        <ul>
+            <?php FOREACH ($VIEW->calendarNavigation AS $MONTH) : ?>
+                <li><a href="<?= $MONTH->lnk ?>" title="<?= $MONTH->lnkTitle ?>"><?= $MONTH->lnkText ?></a></li>
+            <?php ENDFOREACH; ?>
+        </ul>
+    </div>
+</div>
+
+<div class="backToTop links systemLinks contentAlign">
+    <ul>
+        <li><a href="#top">voltar ao topo [t]</a></li>
+    </ul>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/OpenCalendarTemplate.css b/clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/OpenCalendarTemplate.css
new file mode 100644 (file)
index 0000000..52bca53
--- /dev/null
@@ -0,0 +1,11 @@
+/*!
+ * Expresso Lite
+ * CSS for OpenCalendarTemplate.php template.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Diogo Dantas <diogo.santos@serpro.gov.br>
+ * @copyright Copyright (c) 2016 Serpro (http://www.serpro.gov.br)
+ */
+
+#calendars ul { margin-left:-30px; margin-right:10px; }
diff --git a/clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/OpenCalendarTemplate.php b/clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/OpenCalendarTemplate.php
new file mode 100644 (file)
index 0000000..665bc3e
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<!--
+ * Expresso Lite Accessible
+ * Entry index page for calendar module.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Diogo Santos <diogo.santos@serpro.gov.br>
+ * @copyright Copyright (c) 2016 Serpro (http://www.serpro.gov.br)
+-->
+<html lang="pt-BR">
+<head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1" />
+    <link rel="icon" type="image/png" href="../img/favicon.png" />
+    <link type="text/css" rel="stylesheet" href="./Accessible/Core/Template/general.css" />
+    <link type="text/css" rel="stylesheet" href="./Accessible/Calendar/Template/OpenCalendarTemplate.css" />
+    <title> Seleção de calendários - ExpressoBr Acessível</title>
+</head>
+<body>
+
+<div id="top">
+    <div id="logomark"></div>
+    <div id="anchors" class="links systemLinks">
+        <nav class="contentAlign">
+            <ul>
+                <li><a href="#calendars" accesskey="1">Ir para listagem de calendários [1]</a></li>
+                <li><a href="<?= $VIEW->lnkBack ?>" accesskey="v">Voltar para o calendário anterior [v]</a></li>
+            </ul>
+        </nav>
+    </div>
+</div>
+
+<div id="calendars">
+<h2 class="anchorsTitle">Calendários</h2>
+    <div class="links systemLinks">
+        <ul >
+            <?php FOREACH ($VIEW->calendars AS $CALENDAR) : ?>
+                <li><a href="<?= $CALENDAR->lnkOpenCalendar ?> " title="Selecionar <?= $CALENDAR->name ?>"><?= $CALENDAR->name ?></a></li>
+            <?php ENDFOREACH ?>
+        </ul>
+    </div>
+</div>
+
+<!--
+ * This element is a top page anchor link, it can be repeated on template files.
+ * But only one link element, of these repeated, should contain 'accesskey="t"' attribute.
+ -->
+<div class="backToTop links systemLinks contentAlign">
+    <ul>
+        <li><a href="#top" accesskey="t">voltar ao topo [t]</a></li>
+    </ul>
+</div>
+
+</body>
+</html>
diff --git a/clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/OpenEventTemplate.css b/clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/OpenEventTemplate.css
new file mode 100644 (file)
index 0000000..da052d1
--- /dev/null
@@ -0,0 +1,18 @@
+/*!
+ * Expresso Lite
+ * CSS for OpenEventTemplate.php template.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Diogo Dantas <diogo.santos@serpro.gov.br>
+ * @copyright Copyright (c) 2016 Serpro (http://www.serpro.gov.br)
+ */
+
+.adjustOrgUnitRegion { font-size:75%; color:#BBC; }
+.fieldName { font-weight:bold; }
+
+.attendeeSeparator { display:block; }
+
+.confirmStatus { font-size:75%; font-weight:600; }
+
+#eventActions ul { margin-left:-30px; margin-top:25px; }
diff --git a/clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/OpenEventTemplate.php b/clients/ExpressoLite/src/accessible/Accessible/Calendar/Template/OpenEventTemplate.php
new file mode 100644 (file)
index 0000000..ff96115
--- /dev/null
@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<!--
+ * Expresso Lite Accessible
+ * Displays a calendar event information.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Diogo Santos <diogo.santos@serpro.gov.br>
+ * @copyright Copyright (c) 2016 Serpro (http://www.serpro.gov.br)
+ */
+-->
+<html lang="pt-BR">
+<head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1" />
+    <link rel="icon" type="image/png" href="../img/favicon.png" />
+    <link type="text/css" rel="stylesheet" href="./Accessible/Core/Template/general.css" />
+    <link type="text/css" rel="stylesheet" href="./Accessible/Calendar/Template/OpenEventTemplate.css" />
+    <title>Exibição de evento - ExpressoBr Acessível</title>
+</head>
+<body>
+
+<div id="top">
+    <div id="anchors" class="links systemLinks">
+        <nav class="contentAlign">
+            <ul>
+                <li><a href="#eventInfo" accesskey="1">Ir para informações do evento [1]</a></li>
+                <li><a href="#eventDescription" accesskey="2">Ir para descrição do evento [2]</a></li>
+                <li><a href="#eventPartners" accesskey="3">Ir para participantes do evento [3]</a></li>
+                <?php IF($VIEW->isUserAllowedToConfirm) : ?>
+                    <li><a href="#eventActions" accesskey="4">Ir para ações de evento [4]</a></li>
+                <?php ENDIF; ?>
+                <li><a href="<?= $VIEW->lnkBackToCalendar ?>" accesskey="v">Voltar para o calendário [v]</a></li>
+            </ul>
+        </nav>
+    </div>
+</div>
+
+<div id="eventInfo">
+    <h2 class="anchorsTitle">Informações do evento</h2>
+    <div class="contentAlign">
+        <div><span class="fieldName">Assunto:     </span><?= $VIEW->summary ?></div>
+        <div><span class="fieldName">Data:        </span><?= $VIEW->date ?></div>
+        <div><span class="fieldName">Horário:     </span><?= $VIEW->schedule ?> horas.</div>
+        <div><span class="fieldName">Local:       </span><?= $VIEW->location ?> </div>
+        <div>
+            <span class="fieldName">Organizador:  </span><?= $VIEW->organizerName ?>,
+            <span class="adjustOrgUnitRegion"><?= $VIEW->organizerOrgUnitRegion ?></span>
+        </div>
+        <div><span class="fieldName">Participantes: </span> <?= $VIEW->countAttendees ?></div>
+    </div>
+</div>
+
+<!--
+ * This element is a top page anchor link, it can be repeated on template files.
+ * But only one link element, of these repeated, should contain 'accesskey="t"' attribute.
+ -->
+<div class="backToTop links systemLinks contentAlign">
+    <ul>
+        <li><a href="#top" accesskey="t">voltar ao topo [t]</a></li>
+    </ul>
+</div>
+
+<div id="eventDescription">
+    <h2 class="anchorsTitle">Descrição do evento</h2>
+    <div class="contentAlign"><span class="fieldName"></span> <?= $VIEW->description ?></div>
+</div>
+
+<div class="backToTop links systemLinks contentAlign">
+    <ul>
+        <li><a href="#top">voltar ao topo [t]</a></li>
+    </ul>
+</div>
+
+<div id="eventPartners">
+    <h2 class="anchorsTitle">Participantes do evento</h2>
+    <div class="contentAlign">
+    <?php FOREACH($VIEW->attendeesInformation AS $confirmType) : ?>
+        <?php FOREACH($confirmType AS $attendee) :?>
+            <div class="attendeeSeparator">
+                <?= $attendee->name ?> <span class="confirmStatus">( <?= $attendee->confirmStatus ?> )</span>,
+                <span class="adjustOrgUnitRegion"><?= $attendee->orgUnit ?><?= $attendee->region ?></span>
+            </div>
+        <?php ENDFOREACH; ?>
+    <?php ENDFOREACH; ?>
+    </div>
+</div>
+
+<div class="backToTop links systemLinks contentAlign">
+    <ul>
+        <li><a href="#top">voltar ao topo [t]</a></li>
+    </ul>
+</div>
+
+<?php IF($VIEW->isUserAllowedToConfirm) : ?>
+<div id="eventActions">
+    <h2 class="anchorsTitle">Ações de evento</h2>
+    <div class="links linkAsButton">
+        <ul>
+            <li><a href="<?= $VIEW->lnkTentative ?>">Tentar comparecer</a></li>
+            <li><a href="<?= $VIEW->lnkAccepted ?>">Confirmar participação</a></li>
+            <li><a href="<?= $VIEW->lnkDeclined ?>">Rejeitar</a></li>
+            <li><a href="<?= $VIEW->lnkNeedsAction ?>">Responder depois</a></li>
+        </ul>
+    </div>
+</div>
+
+<div class="backToTop links systemLinks contentAlign">
+    <ul>
+        <li><a href="#top">voltar ao topo [t]</a></li>
+    </ul>
+</div>
+<?php ENDIF; ?>
+
+</body>
+</html>
index ed5e81d..a73399f 100644 (file)
  */
 
 namespace Accessible\Core;
+use \DateTime;
 
 class DateUtils
 {
     /**
-     * Formats any date needed for accessible.
+     * @var TODAY.
+     */
+    const TODAY = 'hoje';
+
+    /**
+     * Formats any date needed for accessible email.
      *
      * @param int $dateParam             timestamp int.
      * @param boolean $setCompleteFormat specify a format.
@@ -22,13 +28,13 @@ class DateUtils
      */
     public static function getFormattedDate($dateParam, $setCompleteFormat=false)
     {
-        if(!isset($dateParam) || !is_int($dateParam )){
+        if (!isset($dateParam) || !is_int($dateParam )) {
             return '';
         }
 
         $timeReceived = date('H:i', $dateParam);
         $dayReceived = date('d/m/Y', $dateParam);
-        $weekDayReceived = DateUtils::getWeekDay($dateParam);
+        $weekDayReceived = DateUtils::getWeekdayName($dateParam);
 
         if ($setCompleteFormat) {
             return $weekDayReceived . ', ' . $dayReceived . ', ' . $timeReceived;
@@ -36,9 +42,9 @@ class DateUtils
 
         if ($dateParam >= strtotime('today 00:00')) {
             return date('\\h\\o\\j\\e, H:i', $dateParam);
-        } elseif ($dateParam >= strtotime('yesterday 00:00')) {
+        } else if ($dateParam >= strtotime('yesterday 00:00')) {
             return 'ontem, ' . $timeReceived;
-        } elseif ($dateParam >= strtotime('-6 day 00:00')) {
+        } else if ($dateParam >= strtotime('-6 day 00:00')) {
             return $weekDayReceived . ', ' . $timeReceived;
         } else {
             return date('d/m/Y', $dateParam);
@@ -46,23 +52,220 @@ class DateUtils
     }
 
     /**
-     * Gets translation of the day of the week.
+     * Gets translation of the day of the week according to the
+     * timestamp parameter.
      *
-     * @param int $dateParam Date parameter.
-     * @return string        Translated day of the week.
+     * @param int $ts Timestamp.
+     * @return string Translated day of the week.
      */
-    private static function getWeekDay($dateParam)
+    public static function getWeekdayName($ts)
     {
-        $weekDay = date('w', $dateParam);
-        switch($weekDay) {
-            case'0': $weekDay = 'domingo'; break;
-            case'1': $weekDay = 'segunda'; break;
-            case'2': $weekDay = 'terça';   break;
-            case'3': $weekDay = 'quarta';  break;
-            case'4': $weekDay = 'quinta';  break;
-            case'5': $weekDay = 'sexta';   break;
-            case'6': $weekDay = 'sábado';  break;
-        }
-        return $weekDay;
+        $dt = new DateTime();
+        $dt->setTimestamp($ts);
+        $arr = array('domingo', 'segunda', 'terça',
+                'quarta', 'quinta', 'sexta', 'sábado'
+        );
+
+        // Representation of the day of the week, 0 (Sunday) through 6 (Saturday)
+        $offset = $dt->format('w');
+        return $arr[$offset];
+    }
+
+    /**
+     * Return a datetime object representing the current date.
+     *
+     * @return DateTime Object with date and time information
+     */
+    private static function getCurrentDate()
+    {
+        return new DateTime('now');
+    }
+
+    /**
+     * Return the day of the current date. The numeric representation
+     * of a day will be without leading zeros starting from 1 to 31.
+     *
+     * @return string The day of current date
+     */
+    public static function getCurrentDay()
+    {
+        $dt = self::getCurrentDate();
+        return $dt->format('j');
+    }
+
+    /**
+     * Return the translated weekday name of the current date.
+     *
+     * @return string The translated weekday name
+     */
+    public static function getCurrentWeekdayName()
+    {
+        $dt = self::getCurrentDate();
+        return self::getWeekdayName($dt->getTimestamp());
+    }
+
+    /**
+     * Return the translated name of the month of the current date.
+     *
+     * @return string Translated month name of the current date
+     */
+    public static function getCurrentMonthName()
+    {
+        return self::getMonthName(self::getCurrentMonthNumber());
+    }
+
+    /**
+     * Return the number of the month of the current date. The numeric
+     * representation of a month will be without leading zeros starting
+     * from 1 (January) through 12 (December).
+     *
+     * @return string Month number of the current date
+     */
+    public static function getCurrentMonthNumber()
+    {
+        $dt = self::getCurrentDate();
+        return $dt->format('n');
+    }
+
+    /**
+     * Return the year of the current day.
+     *
+     * @return string The year of the current day
+     */
+    public static function getCurrentYear()
+    {
+        $dt = self::getCurrentDate();
+        return $dt->format('Y');
+    }
+
+    /**
+     * Return the translated month name according to the month number.
+     *
+     * @param string $monthNumber The month number without leading zeros
+     * @return string The translated month name
+     */
+    public static function getMonthName($monthNumber)
+    {
+        $arr = array(
+            1 => 'janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho',
+            'julho', 'agosto','setembro', 'outubro', 'novembro', 'dezembro'
+        );
+        return $arr[intval($monthNumber)];
+    }
+
+    /**
+     * Return the first day of the current month in the
+     * following format '2016-01-13 00:00'
+     *
+     * @return string Information about date and time
+     */
+    public static function getFirstDayOfThisMonth()
+    {
+        $dt = new DateTime('first day of this month');
+        $dt->setTime(0, 0, 0);
+        return $dt->format('Y-m-d H:i');
+    }
+
+    /**
+     * Return the first day of a provided month and year values in the following
+     * format '2016-03-01 00:00'
+     *
+     * @return string Information about date and time
+     */
+    public static function getFirstDayOfMonth($month, $year)
+    {
+        $dt = new DateTime();
+        $ts = strtotime(date('Y-m-d H:i:s', mktime(0, 0, 0, $month, 1 , $year)));
+        $dt->setTimestamp($ts);
+
+        return $dt->format('Y-m-d H:i');
+    }
+
+    /**
+     * Return the last day of the current month in the following format
+     * '2016-12-31 23:59'
+     *
+     * @return string Information about date and time
+     */
+    public static function getLastDayOfThisMonth()
+    {
+        $dt = new DateTime('last day of this month');
+        $dt->setTime(23, 59, 59);
+        return $dt->format('Y-m-t H:i');
+    }
+
+    /**
+     * Return the last day of a provided month and year values in the following
+     * format '2016-02-29 23:59'
+     *
+     * @return string Information about date and time
+     */
+    public static function getLastDayOfMonth($month, $year)
+    {
+        $dt = new DateTime();
+        $ts = strtotime(date('Y-m-d H:i:s', mktime(0, 0, 0, $month, 1 , $year)));
+        $dt->setTimestamp($ts);
+        $dt->setTime(23, 59, 59);
+
+        return $dt->format('Y-m-t H:i');
+    }
+
+    /**
+     *  Compare one provided date with the current date. Return true only if the
+     *  timestamp from the given date is greater than the current day.
+     *
+     * @param string $strTime Information about date and time in the following
+     *                        format '2016-01-30 01:50'
+     * @param string $filterTodayEvents
+     * @return boolean True if the timestamp from the given date is greater than
+     *                 current date's timestamp, false otherwise
+     */
+    public static function compareToCurrentDate($strTime)
+    {
+        $dtCurrent = self::getCurrentDate();
+        $dtEvent = new DateTime($strTime);
+
+        return $dtEvent->getTimestamp() > $dtCurrent->getTimestamp();
+    }
+
+    /**
+     * Check whether the today timestamp is within the current event date range.
+     *
+     * @param StdClass $currDateRange An object with the current month value (->monthVal)
+     *                                and year value (->yearVal)
+     * @return boolean If today timestamp is within the event date range returns true,
+     *                 false otherwise
+     */
+    public static function isCurentDayWithinCurrentCalendarDateRange($currDateRange)
+    {
+        $dtCurrent = self::getCurrentDate(); // Current day
+
+        return intval($dtCurrent->format('n')) === intval($currDateRange->monthVal)
+            && intval($dtCurrent->format('Y')) === intval($currDateRange->yearVal);
+    }
+
+    /**
+     * Return an object with formatted date and time information from the date
+     * parameter provided, like '2016-02-29 23:59'
+     *
+     * @param string $strTime Information about date and time in the following
+     *                        format '2015-12-24 23:59'
+     * @return StdClass Object with formatted date information, including the
+     *                  day (->dayVal), month number (->monthVal),translated
+     *                  month name (->monthName), year value (->yearVal),
+     *                  weekday name (->weekdayName) and the time (->timeVal)
+     */
+    public static function getInfomationAboutDate($strTime)
+    {
+        $dt = new DateTime($strTime);
+
+        return (object) array(
+            'dayVal' => $dt->format('j'),
+            'monthVal' => $dt->format('n'),
+            'monthName' => self::getMonthName($dt->format('n')),
+            'yearVal' => $dt->format('Y'),
+            'weekdayName' => self::getWeekdayName($dt->getTimestamp()),
+            'timeVal' => $dt->format('H:i')
+        );
     }
 }
diff --git a/clients/ExpressoLite/src/accessible/Accessible/Core/EventUtils.php b/clients/ExpressoLite/src/accessible/Accessible/Core/EventUtils.php
new file mode 100644 (file)
index 0000000..ce6e928
--- /dev/null
@@ -0,0 +1,396 @@
+<?php
+/**
+ * Expresso Lite Accessible
+ * Event calendar routines.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Diogo Santos <diogo.santos@serpro.gov.br>
+ * @copyright Copyright (c) 2016 Serpro (http://www.serpro.gov.br)
+ */
+
+namespace Accessible\Core;
+
+use ExpressoLite\Backend\LiteRequestProcessor;
+use Accessible\Core\DateUtils;
+use \DateTime;
+
+class EventUtils
+{
+    /**
+     * @var EVENTS_CALENDAR_NAME.
+     */
+    const EVENTS_CALENDAR_NAME = 'Calendário de eventos';
+
+    /**
+     * @var EVENTS_NO_SCHEDULED.
+     */
+    const EVENTS_NO_SCHEDULED = 'Não existem eventos agendados';
+
+    /**
+     * @var EVENTS_ONE_SCHEDULED.
+     */
+    const EVENTS_ONE_SCHEDULED = 'Existe 1 evento agendado';
+
+    /**
+     * @var EVENTS_MANY_SCHEDULED.
+     */
+    const EVENTS_MANY_SCHEDULED = 'eventos agendados';
+
+    /**
+     * @var EVENTS_ONE_NOT_OCCURRED.
+     */
+    const EVENTS_ONE_NOT_OCCURRED = '1 não ocorreu';
+
+    /**
+     * @var EVENTS_MANY_NOT_OCCURRED.
+     */
+    const EVENTS_MANY_NOT_OCCURRED = 'não ocorreram';
+
+    /**
+     * @var EVENTS_ONE_NOT_STARTED.
+     */
+    const EVENTS_ONE_NOT_STARTED = '1 não começou';
+
+    /**
+     * @var EVENTS_MANY_NOT_STARTED.
+     */
+    const EVENTS_MANY_NOT_STARTED = 'não começaram';
+
+    /**
+     * @var EVENTS_WITHOUT_SUMMARY.
+     */
+    const EVENTS_WITHOUT_SUMMARY = 'Não foi definido um assunto deste evento';
+
+    /**
+     * @var EVENTS_WITHOUT_SUMMARY.
+     */
+    const EVENTS_WITHOUT_DESCRIPTION = 'Não foi definida uma descrição deste evento';
+
+    /**
+     * @var EVENTS_WITHOUT_SUMMARY.
+     */
+    const EVENTS_WITHOUT_LOCATION = 'Não foi definido um local para este evento';
+
+    /**
+     * @var EVENTS_PREVIOUS_MONTH.
+     */
+    const EVENTS_PREVIOUS_MONTH = 'mês anterior';
+
+    /**
+     * @var EVENTS_CURRENT_MONTH.
+     */
+    const EVENTS_CURRENT_MONTH = 'mês exibido';
+
+    /**
+     * @var EVENTS_NEXT_MONTH.
+     */
+    const EVENTS_NEXT_MONTH = 'mês seguinte';
+
+    /**
+     * @var EVENTS_CONFIRM_ACCEPTED
+     */
+    const EVENTS_CONFIRM_ACCEPTED = 'ACCEPTED';
+
+    /**
+     * @var EVENTS_CONFIRM_ACCEPTED_STATUS.
+     */
+    const EVENTS_CONFIRM_ACCEPTED_STATUS = 'participação aceita';
+
+    /**
+     * @var EVENTS_CONFIRM_TENTATIVE
+     */
+    const EVENTS_CONFIRM_TENTATIVE = 'TENTATIVE';
+
+    /**
+     * @var EVENTS_CONFIRM_TENTATIVE_STATUS.
+     */
+    const EVENTS_CONFIRM_TENTATIVE_STATUS = 'tentará participar';
+
+    /**
+     * @var EVENTS_CONFIRM_NEEDS_ACTION
+     */
+    const EVENTS_CONFIRM_NEEDS_ACTION = 'NEEDS-ACTION';
+
+    /**
+     * @var EVENTS_CONFIRM_NEEDS_ACTION_STATUS.
+     */
+    const EVENTS_CONFIRM_NEEDS_ACTION_STATUS = 'aguardando resposta';
+
+    /**
+     * @var EVENTS_CONFIRM_DECLINED
+     */
+    const EVENTS_CONFIRM_DECLINED = 'DECLINED';
+
+    /**
+     * @var EVENTS_CONFIRM_DECLINED_STATUS.
+     */
+    const EVENTS_CONFIRM_DECLINED_STATUS = 'participação recusada';
+
+    /**
+     * Mapping of event confirmation types and description about calendar events.
+     *
+     * @var $confirmationTypesAndDescription
+     */
+    private static $confirmationTypesAndDescription = array(
+        self::EVENTS_CONFIRM_ACCEPTED     => self::EVENTS_CONFIRM_ACCEPTED_STATUS,
+        self::EVENTS_CONFIRM_TENTATIVE    => self::EVENTS_CONFIRM_TENTATIVE_STATUS,
+        self::EVENTS_CONFIRM_NEEDS_ACTION => self::EVENTS_CONFIRM_NEEDS_ACTION_STATUS,
+        self::EVENTS_CONFIRM_DECLINED     => self::EVENTS_CONFIRM_DECLINED_STATUS,
+    );
+
+    /**
+     * This method standardize events date range commonly used in all events
+     * calendar routines that needs date range information. Date representation
+     * is like in the following format '2016-03-01 00:00'.
+     *
+     * @param StdClass $dateRange Formatted date range with the month number
+     *                            (->monthVal) and year value (->yearVal)
+     * @return StdClass An event date range object with 'from' date value (->from)
+     *                  and 'until' date value (->until)
+     */
+    public static function prepareEventsDateRange($dateRange = null)
+    {
+        if (is_null($dateRange) || (!isset($dateRange->monthVal) && !isset($dateRange->yearVal))){
+            // No parameters provided, current year and month as the date range
+            $fromVal =  DateUtils::getFirstDayOfThisMonth();
+            $untilVal = DateUtils::getLastDayOfThisMonth();
+        } else {
+            $fromVal =  DateUtils::getFirstDayOfMonth($dateRange->monthVal, $dateRange->yearVal);
+            $untilVal = DateUtils::getLastDayOfMonth($dateRange->monthVal, $dateRange->yearVal);
+        }
+        return (object) array(
+            'from' => $fromVal,
+            'until' => $untilVal
+        );
+    }
+
+    /**
+     * Given an event listing, formats a string message according to the total
+     * count of scheduled events, like 'there are 2 scheduled events' or
+     * 'no scheduled events'.
+     *
+     * @param StdClass $eventListing Event listing
+     * @return string Formatted message with the total count of scheduled events
+     */
+    private static function formatTotalEventScheduled($eventListing)
+    {
+        $countScheduledEvents = abs(count((array) $eventListing));
+        if ($countScheduledEvents === 0) {
+            return self::EVENTS_NO_SCHEDULED;
+        } else {
+           return $countScheduledEvents === 1 ?
+               self::EVENTS_ONE_SCHEDULED :
+               'Existem ' . $countScheduledEvents .' ' .  self::EVENTS_MANY_SCHEDULED;
+        }
+    }
+
+    /**
+     * Given an event listing, formats a message according the total count of
+     * scheduled events that have not occurred yet.
+     *
+     * @param StdClass $eventListing Event listing
+     * @return string Formatted Message with the total count of scheduled events
+     *                that have not occurred yet
+     */
+    private static function formatEventScheduledNotOccurred($eventListing)
+    {
+        $countEventsNotYetOccurred = 0;
+        if (!is_null($eventListing) && count($eventListing) > 0) {
+            foreach ($eventListing as $event) {
+                if (DateUtils::compareToCurrentDate($event->from)) {
+                    $countEventsNotYetOccurred++;
+                }
+            }
+        }
+
+        if ($countEventsNotYetOccurred != 0) {
+            return $countEventsNotYetOccurred === 1 ?
+                ', sendo que ' . self::EVENTS_ONE_NOT_OCCURRED :
+                ', sendo que ' . $countEventsNotYetOccurred . ' ' . self::EVENTS_MANY_NOT_OCCURRED;
+        } else {
+            return ''; // Any event to occur
+        }
+    }
+
+    /**
+     * Creates a summary of events date range. The summary of entire event listing
+     * is like: 'There are seven events scheduled for January 2016 and that 1 did
+     * not happen'.
+     *
+     * @param StdClass $eventListing Event listing
+     * @param StdClass $dateRange Event listing
+     * @return string The summary of a event date range
+     */
+    public static function setEventsDateRangeSummary($eventListing, $dateRange)
+    {
+        return
+            self::formatTotalEventScheduled($eventListing) . ' para '
+            . DateUtils::getMonthName($dateRange->monthVal) . ' de ' . $dateRange->yearVal
+            . self::formatEventScheduledNotOccurred($eventListing) . '.';
+    }
+
+    /**
+     * Creates a summary of events date range. The summary of today listing is like:
+     * 'There are no scheduled events for today, Wednesday, January 20, 2016'.
+     *
+     * @param StdClass $todayEventListing Event listing
+     * @return string The summary of today events date range
+     */
+    public static function setTodayEventsDateRangeSummary($todayEventListing)
+    {
+        return
+            self::formatTotalEventScheduled($todayEventListing) . ' para ' . DateUtils::TODAY . ', '
+            . DateUtils::getCurrentWeekdayName() . ', '
+            . DateUtils::getCurrentDay() . ' de '
+            . DateUtils::getCurrentMonthName() . ' de '
+            . DateUtils::getCurrentYear()
+            . self::formatEventScheduledNotOccurred($todayEventListing) . '.';
+    }
+
+    /**
+     * Check if the event is scheduled to current date.
+     *
+     * @param string $strTime Information about date and time in the following
+     *                        format '2015-12-24 23:59'
+     * @return boolean True if event's day, month and year are equals to
+     *                 current's day, month and year; false otherwise
+     */
+    public static function isEventScheduledForToday($strTime)
+    {
+        $dtEvent = DateUtils::getInfomationAboutDate($strTime);
+        return
+            $dtEvent->dayVal ===   DateUtils::getCurrentDay() &&
+            $dtEvent->monthVal === DateUtils::getCurrentMonthNumber() &&
+            $dtEvent->yearVal ===  DateUtils::getCurrentYear();
+    }
+
+    /**
+     * Returns an event date range for month navigation (indicating previous, current
+     * and next both month and year information for each).
+     *
+     * @param $params Contains the initial request to calendar module
+     * @return array An array of prepared date range objects wich containing the
+     *               navigation order direction (->order), the number of the
+     *               month (->month) and the year (->year)
+     */
+    public static function getPreparedDateRangeForCalendarNavigation($params)
+    {
+        $dt = strtotime(date('Y-m-d', mktime(0,0,0, $params->month, 01 , $params->year)));
+
+        return array(
+            'previousMonth' => (object) array(
+                'order' => self::EVENTS_PREVIOUS_MONTH,
+                'month' => intval(date('m', strtotime('previous month', $dt))),
+                'year' => intval(date('Y', strtotime('previous month', $dt))),
+            ),
+            'currentMonth' => (object) array(
+                'order' => self::EVENTS_CURRENT_MONTH,
+                'month' => intval(date('m', strtotime('this month', $dt))),
+                'year' =>  intval(date('Y', strtotime('this month', $dt))),
+            ),
+            'nextMonth' => (object) array(
+                'order' => self::EVENTS_NEXT_MONTH,
+                'month' => intval(date('m', strtotime('next month', $dt))),
+                'year' =>  intval(date('Y', strtotime('next month', $dt))),
+            )
+        );
+    }
+
+    /**
+     * Format the current status of attendee confirmation in a particular event.
+     *
+     * @param string $confirmationType The type of the current attendee status confirmation
+     *                                 at a particular event
+     * @return array An array of formatted information about the attendee status confirmation,
+     *               wich contains the description of the status (->confirmDescription) and the
+     *               corresponding css icon class (->confirmIconCssClass)
+     */
+    public static function getConfirmationDescription($confirmationType)
+    {
+        return self::$confirmationTypesAndDescription[$confirmationType];
+    }
+
+    /**
+     * Prepare a list in which each index is a type of event attendee confirmation and it's
+     * element is an empty array to be further filled with attendees that has the same
+     * confirmation type.
+     *
+     * @return array An associative array which the indexes are the existing types of event
+     *               attendee confirmation (->ACCEPTED), (->TENTATIVE), (->NEEDS-ACTION),
+     *               (->DECLINED) and their elements are empty arrays.
+     */
+    public static function prepareListOfConfirmationTypesToGroupAttendees()
+    {
+        $confirmationTypes = array_keys(self::$confirmationTypesAndDescription);
+        $arr = array();
+        foreach ($confirmationTypes as $confirmType){
+            $arr[$confirmType] = array(); // empty array to be filled, to group by confirmation type
+        }
+
+        return $arr;
+    }
+
+    /**
+     * Sort by name a prepared list of event attendees, also grouping the current attendee by the
+     * confirmation type.
+     *
+     * @param array $attendeesList An array list indexed by type of confirmation (['ACCEPTED']),
+     *                             (['TENTATIVE']), (['NEEDS-ACTION']), (['DECLINED']) which the
+     *                             element is an UNORDERED attendee list
+     * @return array The indexed by type of confirmation array which the respective element is an
+     *               SORTED BY NAME attendee list
+     */
+    public static function sortAttendeesByName(&$attendeesList)
+    {
+        usort($attendeesList[self::EVENTS_CONFIRM_ACCEPTED], function($e1, $e2) {
+            return strcmp($e1->name, $e2->name);
+        });
+        usort($attendeesList[self::EVENTS_CONFIRM_TENTATIVE], function($e1, $e2) {
+            return strcmp($e1->name, $e2->name);
+        });
+        usort($attendeesList[self::EVENTS_CONFIRM_NEEDS_ACTION], function($e1, $e2) {
+            return strcmp($e1->name, $e2->name);
+        });
+        usort($attendeesList[self::EVENTS_CONFIRM_DECLINED], function($e1, $e2) {
+            return strcmp($e1->name, $e2->name);
+        });
+
+        return $attendeesList;
+    }
+
+    /**
+     * Check whether an event has not occurred.
+     *
+     * @param string $strTime Information about date and time in the following
+     *                        format '2016-01-30 01:50'
+     * @return boolean True if the event has not occurred, false otherwise
+     */
+    public static function checkEventHasNotOccurred($strTime)
+    {
+        return DateUtils::compareToCurrentDate($strTime);
+    }
+
+    /**
+     * Check whether the current user belongs to an event attendees list.
+     *
+     * @param stdclass $attendeesInformation An object that contains formatted information about
+     *                                calendar event, like the email of the current user
+     *                                (->currentEmailUser) and the event's attendees list
+     *                                (->attendees)
+     * @return boolean True if the object corresponding to the current user is found,
+     *                 false otherwise
+     */
+    public static function isUserAllowedToConfirmEvent($attendeesInformation)
+    {
+        $item = null;
+        foreach($attendeesInformation->attendees as $attende) {
+            if ($attendeesInformation->currentEmailUser === $attende->email) {
+                $item = $attende;
+                break;
+            }
+        }
+
+        return isset($item);
+    }
+}
diff --git a/clients/ExpressoLite/src/accessible/Accessible/Core/MessageUtils.php b/clients/ExpressoLite/src/accessible/Accessible/Core/MessageUtils.php
new file mode 100644 (file)
index 0000000..e848f04
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Expresso Lite Accessible
+ * Message formatting routines.
+ *
+ * @package   Lite
+ * @license   http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author    Diogo Santos <diogo.santos@serpro.gov.br>
+ * @copyright Copyright (c) 2016 Serpro (http://www.serpro.gov.br)
+ */
+
+namespace Accessible\Core;
+
+class MessageUtils
+{
+    /**
+     * Sanitize email message, getting only the content between the html <body>
+     * tag if it's exists, otherwise retrieves the entire content.
+     *
+     * @param string $message Email message contained between <body> html tag
+     * @return string The content between <body> html tag of whole message
+     */
+    public static function getSanitizedBodyContent($message)
+    {
+        if (!is_null($message)) {
+            $found = preg_match("/<body[^>]*>(.*?)<\/body>/is", $message, $matches);
+            return $found ? $matches[1] : $message;
+        }
+
+        return '';
+    }
+}
\ No newline at end of file
index a4602b4..cba485b 100644 (file)
@@ -20,8 +20,8 @@
 </head>
 <body>
 
-<div id="top" name="top">
-    <div id="anchors" name="anchors" class="links systemLinks">
+<div id="top">
+    <div id="anchors" class="links systemLinks">
         <nav class="contentAlign">
             <ul>
                 <li><a href="<?= $VIEW->destinationUrl ?>" accesskey="v"><?= $VIEW->destinationText ?> [v]</a></li>
 </div>
 
 <h2 class="anchorsTitle">Mensagens</h2>
-<div id="feedback" name="feedback" class="<?= $VIEW->typeMsg ?>" >
+<div id="feedback" class="<?= $VIEW->typeMsg ?>" >
     <p id="feedbackMessage" name="feedbackMessage"> <?= $VIEW->message ?> </p>
 
-    <div id="buttons" name="buttons" class="links linkAsButton">
+    <div id="buttons" class="links linkAsButton">
         <hr />
         <ul>
             <?php FOREACH ($VIEW->buttons AS $BUTTON) : ?>
index 5e4ebf9..407552a 100644 (file)
@@ -71,7 +71,7 @@ abstract class Handler
     {
         $retUrl = './?r=' . $action;
         foreach ($params as $key => $val) {
-            $retUrl .= '&' . $key . '=' . $val;
+            $retUrl .= '&' . urlencode($key) . '=' . urlencode($val);
         }
         return $retUrl;
     }
index 63de6de..7361034 100644 (file)
 </head>
 <body>
 
-<div id="credent" name="credent">
-    <img id="logo_top" name="logo_top" src="../img/logo-expressobr-top.png" alt="Logotipo do ExpressoBr Acessível"/>
+<div id="top" class="onlyForScreenReaders">
+    <div id="anchors" class="links systemLinks">
+        <nav class="contentAlign">
+            <ul>
+                <li><a href="#credent" accesskey="1">Ir para o formulário [1]</a></li>
+            </ul>
+        </nav>
+    </div>
+</div>
+
+<div id="credent">
+    <h2><img id="logo_top" src="../img/logo-expressobr-top.png" alt="Logotipo do ExpressoBr Acessível"/></h2>
     <form action="." id="frmLogin" name="frmLogin"  class="form" method="post">
         <input type="hidden" id="r" name="r" value="Login.Login">
         <div class="frmLoginFields">
              <input id="pwd" name="pwd" type="password" placeholder="Digite a senha" tabindex="2" required="required" />
         </div>
 
-        <div id="frmLoginSubmit" name="formLoginSubmit">
+        <div id="frmLoginSubmit">
              <input type="submit" value="login" tabindex="3"/>
         </div>
     </form>
 </div>
 
-<div id="expressoBrAccess" name="expressoBrAccess">
+<div id="expressoBrAccess">
     <a title="Ir para o ExpressoBr" accesskey="e" href="../">Ir para o ExpressoBr [e]</a>
 </div>
 
index e189a81..1f04bc3 100644 (file)
@@ -14,6 +14,7 @@ namespace Accessible\Mail;
 use Accessible\Handler;
 use ExpressoLite\Backend\LiteRequestProcessor;
 use ExpressoLite\Backend\TineSessionRepository;
+use Accessible\Core\MessageUtils;
 
 class ComposeMessage extends Handler
 {
@@ -146,12 +147,13 @@ class ComposeMessage extends Handler
         }
 
         $formatedDate = date('d/m/Y H:i', strtotime($msg->received));
+        $bodyMessage = MessageUtils::getSanitizedBodyContent($msg->body->message);
+        $quotedMessage = MessageUtils::getSanitizedBodyContent($msg->body->quoted);
+
         if ((isset($params->reply) || isset($params->replyAll)) && $msg !== null) {
             return '<br />Em ' . $formatedDate . ', ' .
                 $msg->from_name . ' escreveu:' .
-                '<blockquote>' . $msg->body->message . '<br />' .
-                ($msg->body->quoted !== null ? $msg->body->quoted : '') .
-                '</blockquote>';
+                '<blockquote>' . $bodyMessage . '<br />' . $quotedMessage . '</blockquote>';
         } else if (isset($params->forward) && $msg !== null) {
             return '<br />-----Mensagem original-----<br />' .
                 '<b>Assunto:</b> ' . $msg->subject . '<br />' .
@@ -159,8 +161,7 @@ class ComposeMessage extends Handler
                 '<b>Para:</b> ' . implode(', ', $msg->to) . '<br />' .
                 (!empty($msg->cc) ? '<b>Cc:</b> ' . implode(', ', $msg->cc) . '<br />' : '') .
                 '<b>Data:</b> ' . $formatedDate . '<br /><br />' .
-                $msg->body->message . '<br />' .
-                ($msg->body->quoted !== null ? $msg->body->quoted : '');
+                $bodyMessage . '<br />' . $quotedMessage;
         }
         return '';
     }