## [1.5.0] - 2024-07-07 ### Added - Display month with the earliest available day (#1075) - Allow admins to define the business closed dates (blocked-periods) (#432) - Allow working plan exceptions to be defined as non-working days (#1383) - Create an official docker image of the project and host it on Docker Hub(#1116) - Automatically select the next available date in the booking page or display a message if this month is unavailable (#1204) - Add Open Graph information to the public booking page so that it renders nicely once shared on social media apps (#1382) - Preselect the date with a query parameter (#1376) - Add the location and notes fields to the appointment email notifications (if a value was provided) (#1341) - Add date, from and till query parameters to the filter the appointments index results by date (#1134) - Allow the users to define their own status and assign them to appointments (#244) - Add new setting for limiting new public bookings in the future (#1203) - Automatically enable the secure cookie config if the current installation uses HTTPS (#1126) - Add language and timezone properties to the customer API resource (#1157) - Add support for the definition of custom webhooks via the settings page (#581) - Allow the user to select their own preferred language (#1263) - Support multiple Bootswatch themes for the app (#1205) - Providers and secretaries must only be able to see and manage their own customers (#1199) - Use the default service duration if the user just clicks on a calendar slot for creating a new appointment (#1237) - Google Calendar synchronisation failure when symbols/emoji appear in events to be imported (#1182) - Add the customer timezone field in the appointment modal of the calendar page (#1094) - Add a new setting that toggles the login link of the booking page (#1148) - Add custom Matomo analytics integration (#974) - Prefill the form field though url parameters (#1021) - Color code events by provider or service (#422) - Service duration values shorter than 5 minutes should be acceptable via the services page (#1110) - Add a new "is_private" flag to services and providers so that they do not appear in the booking page (#378) - Skip the first booking step when only one service and one provider are available (#349) - Enable the change of the brand logo and colors from the backend (#789) - Add the ability to temporarily block new appointments / set away message (#940) - Add optional (configurable with setting) phone number validation (#820) - Add an option to deactivate the remove-all-data function for customers (#808) - Skip the first booking step if both provider and service are preselected (#1117) - Make delete appointment via API to send emails just like the calendar page does (#1101) - Create new layout structure for the markup, so that common HTML markup is being reused (#1152) - Have an option to hide customer data fields during booking (#1081) - Add a SECURITY.md file to the repository (#1122) - Add support for custom fields on customers (#1133) - Add from email/name and reply-to settings in the email.php configuration file (#1465) - Create a new setting that will define the default timezone of the application (#1390) - Integrate CalDAV Protocol for appointment syncing (#209) - Add LDAP / Active Directory integration (#128) ### Changed - Do not allow a customer to book the same hours multiple times (#1420) - All the user roles with access to the backend calendar page can filter by services (#956) - Update Bootstrap to version 5 (#1150) - Update FullCalendar to version 5 (#1151) - The availability generation algorithm needs performance improvements when many appointments are stored in the system (#1171) - Support for relative paths when loading resources or working with the session (#1158) - Support line breaks when displaying the service description (#1149) - Remove the CodeIgniter fork from the composer.json file and re-import the system directory (#1109) ### Fixed - Sync all the providers without errors, when the user clicks on the "sync" button and "all" is selected in the calendar page (#1365) - Non-working time not showing correctly in the week view of calendar (#1381) - Make sure the booking cancellation is a post request and has a reason value provided (#1178) ### Removed - Remove the engine directory and files form the app (they're deprecated) (#971) - Remove the PHPMailer dependency from the app and use the built-in CodeIgniter mailer (#970) ## [1.4.3] - 2022-03-08 ### Added - #1208: Security configuration enhancements in the application. - #1209: Add support for PHP 8.1. ### Changed - #1207: Replace CodeIgniter with the system directory for smaller package size and more control over the framework. - #1210: Move the change language operation into a new public controller. - #1212: Remove the Google Calendar read-only scope use as it is not needed. - #1213: Switch to go-to-latest database migration configuration for simplicity. - #1216 Replace Google Client JS with the Google Calendar Template link in the book success page enhancement. ### Fixed - #1211: The table calendar view breaks for secretaries and providers due to appointment and unavailability removals bug. - #1214: Provider and secretary users can only add unavailabilities for their authorized users bug. ## [1.4.2] - 2021-07-27 ### Added - #1004: Add support for line breaks when displaying the service description in the frontend. - #1040: Support all-day events while syncing with Google Calendar. ### Fixed - #961: Timezone/UX issue: Wrong day is selected when timezone differs by -1 day. - #966: Secretaries are getting notification emails for providers that are not assigned to them. - #980: Missing Pacific (and potentially other) timezones. - #982: The Any-Provider option might lead to double bookings, if all the providers have the same number of appointments for the selected date. - #986: Managed to replicate appointment hash collisions. - #989: Fix Critical mistake resulting in wrong date - #990: The API availabilities controller throws an error when generating availability for services with multiple attendants. - #991: Available hours generated with the "Any Provider" option in the booking page, may use the information of a provider that is not assigned to the selected service. - #993: Add support for PHP8 (vendor packages need to be updated). - #1000: Small fix for the display of the delete button in table view. - #1011: Working plan exception - details pane shows incorrect details. - #1023: Backend calendar table events missing or duplicated. - #1026: The timepicker sliders do not work when using an iOS device. - #1029: Enhance SMTP functions of PHPMailer. - #1043: Unavailable events do not block time from services with multiple attendants. - #1046: Make sure that saving the modifications of a single break does not cancel any pending break edits. - #1068: Set minimum service duration field value to honor the value of EVENT_MINIMUM_DURATION. - #1073: Update PHPMailer dependencies. - #1074: In case of deletion of one appointment, system sends email to admins anyway even if they have email notifications disabled. - #1092: Javascript RangeError on appointment change causing disabled calendar dates. ## [1.4.1] - 2020-12-14 ### Added - #952: Add timezone support in the REST API, when managing users. - #955: Display confirmation modal when disabling a connected Google Calendar Sync. ### Fixed - #945: Google Calendar sync throws an error with all day Google Calendar Events. - #946: Typo in JavaScript code leads to a broken calendar view, when loading unavailability events with note contents. - #948: Multiple attendant services may lead to double booking. - #950: Cannot create provider without services via the API, some values (other endpoints) are optional too. - #953: Current time indicator in fullcalendar is showing time in local timezone and not in the user selected timezone. - #954: The password must be provided via the API when creating new users. ## [1.4.0] - 2020-12-09 ### Added - #203: Appointment location / 12-hour format / sync notes and location in Google Calendar. - #221: Fixed/Improved sort breaks increasingly by hour within day. - #247: Add new system-wide setting for removing the "Any Provider" option of the booking page. - #251: Automatically populate the appointment end datetime in API. - #301: Automatically reload the backend calendar events. - #313: How to set the timezone from the user booking the appointment. - #365: Only allow appointments for a few weeks in advance. - #431: Add support for working plan exceptions. - #471: Add new system-wide setting that enable users to choose the first day of the week. - #496: Add pagination on every backend page in order to make filter requests faster. - #501: Integrate script for assets minification. - #502: Config::DEBUG value toggles the use of normal or minified asset files. - #546: Add appointment edit link in the backend customers page. - #550: Multi-Lang Front-End selection popup not working on mobile. - #551: Front-End booking calendar not syncing with business logic working plan. - #572: Ensure the database structure is compatible to at least MySQL 5.5. - #576: Appointment cancelled exception not showing properly. - #610: Token based authentication for the Rest API. - #648: Add a warning when customers delete their personal information. - #655: Creating an appointment requires user to enter their phone number enhancement. - #659: Automatically detect browser language enhancement. - #663: Language selector not working under legacy iOS (v.10.3.1). - #680: Generate new password in the generate_random_string function may create duplicate passwords, plus it is not secure enough. - #739: Enhance the table view mode by replacing the tables with fullcalendar instances. - #770: Store customer's language and use it with notifications or when the customer manages and existing appointment. - #889: Notify admins and secretaries on appointment changes. ### Changed - #386: Service price should be optional. - #428: Enable book advance timeout values in days. - #568: Sort providers alphabetically in the booking page. - #745: Add appointment notes preview in the event popover. ### Fixed - #171: Google calendar sync - wrong timezone for appointments. - #195: Fix Google calendar sync activation error (JavaScript). - #298: Provider availability issue when selecting the "Any Provider" option. - #396: Start and end time do not update correctly during calendar time selection on iPad (and other Safari based devices). - #447: Captcha error using docker (500 error). - #506: Working plan created in version v1.2.1 wrongly displayed in backend with version v1.3.1. - #507: Need to manually clean the cache when migrating from v1.2.1 to v1.3.1. - #541: Can't remove (empty) customer notes field. - #549: Querying appointments API endpoint with the q parmeter produces PHP warnings. - #557: App not connecting to MySQL with fresh docker run. - #562: Unavailability periods with length of more than 1 day are not handled correctly. - #563: Description field overflows with long text. - #600: Unable to select Language on mobile phones. - #611: Double replacement when using translation to other languages. - #664: Easy!Appointments v1.3.2 allows sensitive information disclosure (username and password hash). - #687: Errors when the provider modifies an appointment. - #705: The alert notification of the installation is not being displayed on error. - #757: Corrected display of datetimepickers when editing events. - #801: Invalid time duration during appointment registration could lead to DOS of the service. - #813: Hyperlinks are not being displayed correctly inside legal contents (they are escaped). - #839: Provider is missing on appointment modal opened after a click on the link sent with the provider email confirmation. - #840: Start/end datetime are not correctly initialized on Safari when the appointment modal is opened after a click in the backend calendar. - #883: Appointment date is wrongly changed to today in some case. - #903: Notification not working when creating/updating/deleting an appointment from the REST API.