{"action":"published","release":{"url":"https://api.github.com/repos/UniTime/unitime/releases/1929713","assets_url":"https://api.github.com/repos/UniTime/unitime/releases/1929713/assets","upload_url":"https://uploads.github.com/repos/UniTime/unitime/releases/1929713/assets{?name,label}","html_url":"https://github.com/UniTime/unitime/releases/tag/v4.0.37","id":1929713,"tag_name":"v4.0.37","target_commitish":"master","name":"UniTime 4.0 build 37","draft":false,"author":{"login":"tomas-muller","id":10631634,"avatar_url":"https://avatars.githubusercontent.com/u/10631634?v=3","gravatar_id":"","url":"https://api.github.com/users/tomas-muller","html_url":"https://github.com/tomas-muller","followers_url":"https://api.github.com/users/tomas-muller/followers","following_url":"https://api.github.com/users/tomas-muller/following{/other_user}","gists_url":"https://api.github.com/users/tomas-muller/gists{/gist_id}","starred_url":"https://api.github.com/users/tomas-muller/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomas-muller/subscriptions","organizations_url":"https://api.github.com/users/tomas-muller/orgs","repos_url":"https://api.github.com/users/tomas-muller/repos","events_url":"https://api.github.com/users/tomas-muller/events{/privacy}","received_events_url":"https://api.github.com/users/tomas-muller/received_events","type":"User","site_admin":false},"prerelease":false,"created_at":"2015-10-08T11:24:11Z","published_at":"2015-10-08T11:36:23Z","assets":[{"url":"https://api.github.com/repos/UniTime/unitime/releases/assets/925875","id":925875,"name":"unitime-4.0_bld37.zip","label":null,"uploader":{"login":"tomas-muller","id":10631634,"avatar_url":"https://avatars.githubusercontent.com/u/10631634?v=3","gravatar_id":"","url":"https://api.github.com/users/tomas-muller","html_url":"https://github.com/tomas-muller","followers_url":"https://api.github.com/users/tomas-muller/followers","following_url":"https://api.github.com/users/tomas-muller/following{/other_user}","gists_url":"https://api.github.com/users/tomas-muller/gists{/gist_id}","starred_url":"https://api.github.com/users/tomas-muller/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomas-muller/subscriptions","organizations_url":"https://api.github.com/users/tomas-muller/orgs","repos_url":"https://api.github.com/users/tomas-muller/repos","events_url":"https://api.github.com/users/tomas-muller/events{/privacy}","received_events_url":"https://api.github.com/users/tomas-muller/received_events","type":"User","site_admin":false},"content_type":"application/zip","state":"uploaded","size":178801723,"download_count":0,"created_at":"2015-10-08T11:30:11Z","updated_at":"2015-10-08T11:32:56Z","browser_download_url":"https://github.com/UniTime/unitime/releases/download/v4.0.37/unitime-4.0_bld37.zip"}],"tarball_url":"https://api.github.com/repos/UniTime/unitime/tarball/v4.0.37","zipball_url":"https://api.github.com/repos/UniTime/unitime/zipball/v4.0.37","body":"## Bug Fixes\r\n\r\n#### Course Timetabling: Student Sectioning\r\n- Include committed student conflicts in the check whether a student swap was improving.\r\n- Undo the swap if it was not improving (this fixes the problem that could cause student\r\n  sectioning to hang).\r\n\r\n#### Online Student Scheduling: Custom Student Enrollment Interface\r\n- Fixed an issue with the disabled for student scheduling check (do not drop a student if he/she\r\n  is already in the section).\r\n- Keep sections that cannot be dropped in the add (courseReferenceNumbers) list.\r\n- When a course is locked and there is a change, also mark dropped sections as failed.\r\n- When UniTime does not know about the student, but there is an enrollment provider capable of\r\n  requesting updates, then use the custom eligibility check to request an update.\r\n- During enrollment, ensure that there is a request for any course that the student failed to drop\r\n  because of the custom student enrollment interface rejected the drop.\r\n- Avoid inclusing classes that were rejected to be added by the custom student enrollment\r\n  interface in the consecutive enrollment request.\r\n\r\n#### Instructional Offering Configuration\r\n- Fixed an issue preventing a configuration with two or more levels of parent-child relations from\r\n  being deleted (ObjectDeletedException).\r\n\r\n#### Permissions\r\n- Remember the roles and their order when the page is loaded, use this list for the updates.\r\n- This fixes the issue with the permissions getting shifted between roles as the order of the\r\n  roles is changed between updates (number of permissions of a role is used in the ordering).\r\n\r\n#### Course Timetabling: Missing Solver Group\r\n- Fixed a NullPointerException thrown when the solver tries to load a class that is managed by\r\n  a department which does not have a solver group.\r\n- Warning \"Manager of class X has no solver group.\" is logged instead.\r\n\r\n## Other Improvements\r\n\r\n#### Course Timetabling: N Hour Work Day\r\n- Added constraint N Hour Work Day (where N can be 6, 7, 8, ..., 12)\r\n- The constraint limits the time between the start of the first class and the end of the last\r\n  class on any day.\r\n- Distribution type reference is WORKDAY(N), where N is between 6 and 12.\r\n- The constraint needs to be registered. This can be done by a script:\r\n  - Download the script from http://goo.gl/9nyu0U and import it on the Administration > Academic\r\n    Sessions > Data Exchange page.\r\n  - Run the script Distribution Types: Create Work Day Constraints on the Administration >\r\n    Utilities > Scripts page.\r\n\r\n#### Events Lookup Backend: Personal Schedule\r\n- Added ability to filter events by role (student, instructor, coordinator, contact):\r\n  - contact: only list events that has the user as main or additional contact,\r\n  - student: only list class, course related and examination events attended by the person (as\r\n    a student),\r\n  - instructor: only list classes, course related and examination events with the person assigned\r\n    as instructor,\r\n  - coordinator: only list classes, course related and examination events with the person assigned\r\n    as course coordinator.\r\n- Multiple roles can be provided (default is student, instructor, and contact).\r\n- Added ability to type in role (or roles) on the Personal Timetable page (but the roles do not\r\n  show up in the Event Filter).\r\n\r\n#### Event Filter: Do not count conflicting events\r\n- Added ability to avoid counting conflicting events in the Event Filter.\r\n  - To be enabled by setting the application property\r\n    unitime.events.eventFilter.skipConflictCounts to true (defaults is false).\r\n  - This makes the component load faster, especially on MySQL.\r\n\r\n#### UniTime RESTful API\r\n- First take on creating a RESTful API in UniTime.\r\n- Following conntectors have been created so far:\r\n  - /api/events: ability to retrieve events (using the EventInterface class converted to JSON,\r\n    example: GET UniTime/api/events?type=PERSON&ext=1001&term=Fal2010)\r\n  - /api/json: JSON interface for GWT calls (that implement the GwtRpcRequest interface)\r\n  - /api/exchange: to export/import UniTime's data exchange XML files\r\n    - export example: GET UniTime/api/exchange?term=Fal2010&type=students\r\n    - import example: POST UniTime/api/exchange (with the XML as payload)\r\n  - /api/roles?id=<externalId> returns a list of academic sessions (and roles) for a person\r\n    (returns a list of academic sessions when there is no id parameter)\r\n  - /api/enrollments?eventId=<id> returns student enrollments for an event, a class (when classId\r\n    parameter is used instead), an exam (examId), a course offering (courseId), an instructional\r\n    offering (offeringId), or instructional offering configuration (configId)\r\n  - /api/instructor-schedule?id=<externalId>&term=<term> returns classes, courses, and\r\n    examinations assigned to an instructor.\r\n  - /api/class-info?classId=<id> returns information about a class (including assinged instructors\r\n    and coordinators)\r\n- Each connector has the appropriate permission (see Api... permissions), with the ability to\r\n  either use HTTP-simple authentication or an API token.\r\n- It is possible to change the hibernate cache mode for a particular API connector by setting the\r\n  unitime.api.X.cacheMode application property (where X is the connector name).\r\n  - For example, setting unitime.api.enrollments.cacheMode=REFRESH will make the /api/enrollments\r\n    connector to never read the hibernate cache, but it will keep it updated.\r\n\r\n#### Online Student Scheduling: Scheduling Assistant\r\n- If eligibility check fails, keep on displaying the eligibility check message. This makes it\r\n  easier to see why the Submit Schedule button is not visible.\r\n- Added ability to execute the custom eligibility check when the Submit Schedule is pressed:\r\n  - when the custom eligibility chek returns RECHECK_BEFORE_ENROLLMENT flag, or\r\n  - when unitime.enrollment.recheckCustomEligibility is set tu true (defaults to false).\r\n- Course Requests: Added a missing notification when a course is selected using the Course Finder\r\n  dialog.\r\n  - This fixes the issue of the course alternative not being enabled when the course is entered\r\n    using the Course Finder dialog.\r\n\r\n#### Online Student Scheduling: Locking\r\n- Added ability to tune the locking using application properties.\r\n- For each action, it is possible to specify if the student as well as the related offerings\r\n  should be locked.\r\n- By default, the following operations no longer lock offerings (they only lock the student):\r\n  eligibility, status-change, student-email.\r\n- The locking can be changed by the following properties:\r\n  - unitime.sectioning.config.X.LockOfferings (include offerings in the lock for the action named\r\n    X)\r\n  - unitime.sectioning.config.X.LockStudents (include student in the lock for the action named X)\r\n\r\n#### Online Student Scheduling Reports\r\n- CSV Export: Added ability to provide the academic session as parameter. This allows for the\r\n  exporter to be called from outside of UniTime.\r\n- Individual Time Overlaps: Added a new report computing individual student time conflicts. There\r\n  are four variants:\r\n  - Individual Student Time Overlaps lists all time conflicts, showing why a conflict is allowed,\r\n  - Not Allowed Time Overlaps only lists time conflicts that are not allowed (and should not be\r\n    present in the data),\r\n  - Individual Student Time Overlaps (Exclude Break Times) lists all time conflicts, but break\r\n    times are excluded from conflict checking,\r\n  - Not Allowed Time Overlaps (Exclude Break Times) lists all time conflicts that are not allowed\r\n    even when break times are excluded from conflict checking\r\n\r\n#### Online Student Scheduling: Enrollments table\r\n- Do not list enrollment message for requests that are enrolled (enrollment message contains\r\n  a reason why a request is not enrolled).\r\n\r\n#### Data Exchange: Student Enrollments and Student Sectioning XML imports\r\n- The import can now work with a case where class external ids are NOT unique (e.g., when Lec 1\r\n  and Lec 1a share the same external id).\r\n- Fixed an issue with dropping alternative course request (deleted object would be re-saved by\r\n  cascade).\r\n- Fixed an issue with parsing free-time request days of week (Thursday, Sunday were incorrectly\r\n  parsed).\r\n- Added ability to have <alternative> element of an <alternative> element (which is the way how\r\n  2nd alternative is exported).\r\n- When a student is enrolled into an existing course request, drop the enrollment message if there\r\n  is one (enrollment message contains a reason why a request is not enrolled).\r\n\r\n#### Data Exchange: Course Offering XML export and import\r\n- Added course offering reserved space (reserved attribute of the course element).\r\n\r\n#### Technology Update: GWT 2.7.0\r\n- GWT updated to version 2.7.0 (was 2.6.1).\r\n- Also updated CGLIB to version 3.1 (was 2.2.2), to use the same version of ASM as GWT (5.0.3, was\r\n  3.3.1).\r\n\r\n#### Timetable Managers: Show all managers\r\n- Added ability to hide managers that have no session independent role and no relation to the\r\n  current academic session.\r\n  - By default only managers that have a session independent role or at least one department of\r\n    the current academic session are shown.\r\n  - This can be changed by checking the \"Show all managers\" at the bottom of the list."}}