# July 2021 (v1.84)

Hi everyone! Welcome to the July 2021 release of SEO Studio. This release consists of several individual patches that
have been launched throughout the last year to address various bug reports and feature requests.

- [📧&nbsp; New email system](#emails) – Plus password reset and email verification!
- [📰&nbsp; Terms & privacy policy](#pages) – New pages to help customize your website.
- [🚀&nbsp; Permalinks](#permalinks) – Boost your website's appearance with fancy permalinks.
- [✨&nbsp; Major internal reworks](#reworks) – Learn about what's been done under the hood.

---

## Notable features

### 📧 New email system {#emails}

[**Mail settings**](settings/mail.php)<br>
Various parts of the application can now easily send emails using the new official email system. The admin must first
configure their mail settings before mail-based features will work.

[**Email verification & password reset**](settings/accounts.php)<br>
You can now require users to verify their email address before using their account. Users who have forgotten their
password can also initiate a password reset using their email address.

[**Email templates**](settings/email-templates.php)<br>
An official mail template editor has been added to the script to support these new features.

![Email templates](/release/mail-templates.png)


### 📰 Terms & privacy policy {#pages}

You can now use the editors at [Customize &raquo; Pages](pages.php) to create pages for terms of service and privacy
policy. When either of these pages are actived, a footer is automatically enabled on the frontend with links to them.

![Terms of service](/release/terms.png)


### 🚀 Permalinks {#permalinks}

This is an experimental new feature which allows admins on supported servers to customize URLs across their script,
to eliminate the `.php` extension, and to improve their site structure for organic search optimization.

After enabling this feature, some default permalinks will be applied to all pages in the script. You can also set
an entirely different permalink for each page.

To get started, head over to [Settings &raquo; Permalinks](settings/permalinks.php).

![Permalinks](/release/permalinks.png)

### ✨ Major internal reworks {#reworks}

Much work has been done on the script's internals. These changes are important as they improve the script's overall
stability, performance, and reliability.

**New classes**<br>
To start, I've introduced two new important classes to the script and have begun transitioning tools to use them. These
classes are more efficient, offer better APIs, and have some awesome error handling.

- `HTMLDocument` – Replaces the current DOM parsing library.
- `WebRequest` – Replaces the current `CURL` library.

**Revamped error handling**<br>
The script's error handling has been completely reworked. It can now handle most errors without stopping the page,
and behaves in a manner that will be comfortable for developers. Error reporting has also been made far more efficient
and now covers the entire script.

**Database encoding**<br>
The script's database tables have been migrated to the `utf8mb4` character set.

---

## Extra features

### 👀 Hide tools {#hide-tools}

The [tool manager](tools.php) in the admin panel has been updated with checkboxes that allow you to hide specific tools
from the website's tool list. Please note that hidden tools are still accessible if you have the link.

### 🌐 Hide navigation links {#hide-navigation-links}

You can now hide any of the links in the website's navigation bar (as well as customize the logo's link). Further
navigation options will come in a future update. To get started, [click here](settings/navigation.php).

---

## Developers

### 🌎 Domain internationalization {#new-modern-classes}

A new `Punycode` class has been added to the script for the conversion of internationalized domain names to and from
their ASCII `xn` equivalents. In a future update, this class will be used by the script to represent the active
domain, and will be exposed to tools.

### 🔎 Bing proxying {#bing-proxying}

The Google Network service has been upgraded to automatically proxy Bing search requests for servers in China and in
some rare circumstances where invalid or unfamiliar responses are received.

---

## Full changelog

Here's a rundown of all notable changes in this release.

- Added a country selector to the keyword research tool.
- Added localized country names to languages.
- Added a new `PunyCode` class to the script.
- Added a new `DOM` parser to the script.
- Added a new `WebRequest` library to the script.
- Added a password reset feature.
- Added email verification for new users.
- Added a mail template system.
- Added the ability to hide certain tools from the tools page.
- Added options to hide navigation links (such as home, tools, and account).
- Added an option to change the URL of the header logo when clicked.
- Added editors for new terms and privacy pages.
- Added a footer that links to the terms and privacy pages.
- Added exceptions to the account class to protect against improper calls.
- Added a limit to the number of sitemaps that tools will parse.
- Added support for PHP 8.
- Added a new permalinks system.
- Fixed keyword research tool not showing the original keyword in results.
- Fixed keyword density not recognizing unicode.
- Fixed rare errors in the speed test tool.
- Fixed race conditions in the error handling for cron and updates.
- Fixed an error when websites return multiple location headers.
- Fixed a rare serialization error in the contact extension.
- Fixed errors stemming from corrupt error logs in diagnostics.
- Fixed an exception in the extract meta tags tool when webpage download failed.
- Fixed a missing post field check in the keyword research tool.
- Fixed number format notices in the keyword density tool.
- Fixed an unknown variable access in the background update logic.
- Fixed deprecated constant warnings from the `WebRequest` library.
- Revamped mail settings in the admin panel.
- Revamped error handling.
- Increased the number of keywords shown in the keyword research tool.
- Migrated all database tables to `utf8mb4`.
