=== Volunteer Sign Up Sheets ===
Contributors: DBAR Productions
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=R4HF689YQ9DEE
Tags: Volunteer, Volunteers, Sign Up, Signup, Events
Requires at least: 6.0
Requires PHP: 7.4
Tested up to: 6.7.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Stable tag: 5.5.3

Easily create and manage sign-up sheets for activities and events, while protecting the privacy of the volunteers' personal information.

== Description ==

**PLEASE DO NOT USE THE SUPPORT FORUM FOR FEATURE REQUESTS!!**
You may submit new features here:
<https://stephensherrardplugins.com/support/forum/feature-requests/pta-volunteer-sign-up-sheet-feature-requests/>

**PLEASE READ THE DOCUMENTATION BEFORE POSTING SUPPORT REQUESTS**
Read the documentation here:
<https://stephensherrardplugins.com/docs/pta-volunteer-sign-up-sheets-documentation/>

**An alternative to sites like Signup Genius for your events, this plugin lets you keep your signup sheets on your own site. Easily create and manage sign up sheets for your school, organization, business, or anything else where people need to sign up.**

**Features:**

*   Version 5.0 add a new Validation option to validate signups via an email code, and to validate a user so that they can view and clear their signups without having to login to a WordPress user account. A validation form is also provided to allow validation at any time. See the documentation for more information.
*   Version 4.6 adds HTML format emails, as well as per sheet options for recipients of signup confirmation and clear emails, along with a mobile CSS option to collapse the tables to a single column format for smaller screens, and many other new features and settings.
*   Version 3.6 adds the ability to Reschedule a sheet to new date and times, copy a sheet with new dates and times, or create multiple copies of a sheet at specified day intervals. These new functions allow optionally copying the signups, and have a new email template to notify those signups of the new dates and times.
*   User Signups List block, or [pta_user_signups] shortcode, allows you to show a list of the current validated/logged-in user's signups on any page (with clear links, if allowed).
*   Integrates with the GDPR privacy functions of WordPress 4.9.6.
*   Extensive hooks and filters that make it easy to extend or modify functionality
*   Supports the calendar display extension: <https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-calendar-display/>
*   Create custom fields that can be used for sheets, tasks, or signup forms, with the Custom Fields extension: <https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-custom-fields/>
*   Customize public side text and layout options with the Customizer extension: <https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-customizer/>
*   Group, or categorize, sheets/events with the Groups extension, which can also import groups from the WP Groups and BuddyPress plugins: <https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheet-groups/>
*   Specify any type of sheet as a "No Signup Event". This allows you to create non-volunteer events for display only (no signup links or available spots will be shown). You can still create tasks/items with dates, start and end times for these sheets, which could be useful for showing the schedule/agenda for an event, but you won't be able to specify quantity or other normal task options. This is useful for a combination volunteer sign-up and event calendar type of list/display, especially when used with the Calendar Display extension.
*   Signups are shown on the Admin side using jQuery DataTables for easy sorting/filtering/searching, showing/hiding columns, and organizing your signup data for quick and easy export to Excel, CSV, PDF, or Print.
*   You can optionally enter a description for each task (in addition to the main content area for the whole sheet) that will be shown above the task signup table for each task (when not empty)
*	The ability to allow duplicate signups on a per task basis, changing the label for the item details form field on a per task/item basis, as well as allowing volunteers to specify quantities on a per task/item basis.
*   Easily create volunteer sign-up sheets with multiple tasks/items for each
*	Supports Single, Recurring, Ongoing or Multi-Day Events
*  	All Sheets can be hidden from the public (visible only to logged in users)
*   No volunteer contact info is shown to the public (emails and phone are always hidden). Default public view shows only first name and last name for filled spots, but you can optionally show the full name, and there is also an option to simply show "Filled" for filled spots.
*   Hidden spambot field helps prevent automatic spambot form submissions
*	Up to 2 automatic reminder emails can be set up at individually specified intervals for each sheet (e.g., 7 days and 1 day before event)
*   Block/Widget to show upcoming events that need volunteers in page sidebars
*   Individual sheets can be set to hidden until you are ready to have people sign up (useful for testing individual sheets)
*   Test Mode for entire volunteer system, which displays a message of your choosing to the public while you test the system
*   "manage_signup_sheets" capability so you can set up other users who can create and manage sign-up sheets without giving them full admin level access.
*	Integration with the PTA Member Directory & Contact Form plugin to quickly specify contacts for each sign-up sheet, linked to the contact form with the proper recipient already selected. http://wordpress.org/plugins/pta-member-directory/
*	WordPress Multisite compatibility

**More Details:**

With this plugin you can define four different types of events:  Single, Recurring, Multi-Day, or Ongoing events. Single events are for events that take place on just a single date. Recurring events are events that happen more than once (such as a weekly function), but have the same needs for each date. Multi-Day events are events that are spread across more than one day, but have different needs for each day. Ongoing events do not have any dates associated with them, but are for committees or helpers that are needed on an ongoing basis.

For each of these types of events, you can create as many tasks or items as needed. For each of these tasks/items, you can specify how many items or people are needed, a description, a start and end time, the date (for multi-day events), and whether or not item details are needed (for example, if you want the volunteer to enter the type of dish they are bringing for a luncheon), and optionally enable quantities. The order of tasks/items can easily be sorted by drag and drop.

Sheets can also be specified as a "No Sign Up" event, which can be useful for general organization events and meetings, especially when used in conjunction with the Calendar Display extension: <https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-calendar-display>

Each sign-up sheet can be set to visible or hidden, so that you can create sign-up sheets ahead of time, but only make them visible to the public when you are ready for them to start signing up. There is also a test mode which will only show sign-up sheets on the public side to admin users or those who you give the "manage_signup_sheets" capability. Everyone else will see a message of your choosing while you are in test mode. When not in test mode, admins and users with the "manage_signup_sheets" capability can still view hidden sheets on the public side (for testing those sheets without putting the whole system into test mode).

In the settings, you can choose to require that users be logged in, or validated (version 5.0), to view and/or sign-up for any volunteer sign-up sheets, and pick the message they will see if they are not logged in. Even if you keep the sheets open to the public, you can choose which personal info to show, or simply show "Filled" for filled slots.

There is also a hidden spambot field to prevent signup form submission from spambots.

If a user is logged in when they sign up, the system will keep track of the user ID, and on the main volunteer sign-ups page, they will also see a list of items/tasks that they have signed up for, and it will give them a link to clear each sign up if they need to cancel or reschedule. If they are not logged in when they sign up, but they use the same email as a registered user, that sign-up will be linked to that user's account. You can also use the shortcode [pta_user_signups] to show the list of the current user's signups on any page (along with clear links, if allowed).

The Validation system added in version 5.0 now allows a way to validate signups and users via email, without forcing them to have WordPress user accounts. Validated users can view their signups, and can clear their signups (if enabled). You can also require that signups be validated first if the user signing up is not current validated or signed in to a user account. Unvalidated signups will be automatically deleted after a set amount of time that you can define.

Admin users can add/edit signups from the View Signups page in the admin dashboard, or they can use the "live search" option on the front end sign up form to search for volunteers in either the plugin's signups table, the WordPress users table, or both. If the admin then selects a volunteer, they can sign up that volunteer, and the signup will be assigned to that user's account (if your volunteers have user accounts).

Use the Sign Up Sheets block, or the [pta_sign_up_sheet] shortcode, for a main sign-up sheet page that will show a list of all active (and non-hidden) sign-up sheets, showing the number of open volunteer slots with links to view each individual sheet. Individual sheets have links next to each open task/item for signing up.  When signing up, if the user is already validated or logged in, their name and contact info will be pre-filled in the sign-up page form if that info exists in the user's meta data or validation cookie. View the documentation for a full list of block/shortcode parameters.

There is an Upcoming Event block, and sidebar widget, to show upcoming volunteer events and how many spots still need to be filled for each, linked to each individual sign-up sheet. You can choose whether to show Ongoing type events in the widget, and if they should be at the top or bottom of the list (since they don't have dates associated with them).

Admin users can view sign-ups for each sheet, and add, edit, or clear any spots with a simple link. Each sheet can also be exported to Excel, CSV, PDF or Print formats. Admin side signups are displayed using the jQuery DataTables plugin, which allows sorting, filtering, searching, and showing/hiding columns, so you can arrange the data anyway you want before exporting or printing.

Committee/Event contact info can be entered for each sheet, or, if you are using the PTA Member Directory plugin, you can select one of the positions from the directory as the contact. When a user signs up, a confirmation email is sent to the user as well as a notification email to the contacts for that event (can be optionally disabled).

Automatic Email reminders can be set for each sign-up sheet. You can specify the number of days before the event to send the reminder emails, and there can be two sets of reminders for each sheet (for example, first reminder can be sent 7 days before the event, and the second reminder can be sent the day before the event). You can set an hourly limit for reminder emails in case your hosting account limits the number of outgoing emails per hour.

Simple to use custom email templates for all of the emails sent by the plugin.

Admin can use an Email Volunteers form page to quickly send an email to all volunteers for a specific sheet, or to all volunteers.

Sheets and tasks/signups can be shown via tables, or via table-style divs. CSS can be optionally disabled so that you can more easily style the displays the way you wish. The Customizer Extension has extensive styling options that also appear in the WordPress Customizer panel, plus it allows you to create custom layout templates that can be assigned on a per sheet basis. <https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-customizer/>

Custom Fields can be added to sheets, tasks, or sign-up forms (for collecting additional info from volunteers at signup, or displaying addition info for sheets/tasks, such as Location) via the Custom Fields extension: <https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-custom-fields/>

Text displayed on the public side, such as columns headers, can be modified, along with additional layout options, and custom layout templates, with the Customizer extension: <https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-customizer/>

Much more! Read the documentation for all the current features.

**Available Extensions:**

*   [Volunteer Sign Up Sheets Waitlists](https://stephensherrardplugins.com/plugins/volunteer-sign-up-sheets-waitlists/) - Never turn away willing volunteers again. Automatically manage waitlists when tasks fill up and automatically sign-up or notify people when spots open. Perfect for classes, events, and any sign-up sheet where demand exceeds capacity.
*   [Volunteer Sign Up Sheets Customizer](https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-customizer/) - Edit all public facing text displays. Customize the styling of sheet/task list tables. Create custom Layout Templates that can be assigned on a per sheet basis, to display only the columns you want in the order that you want them. Create custom emails for any email type that can be assigned on a per sheet basis, and much more!
*   [Volunteer Sign Up Sheets Custom Fields](https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-custom-fields/) - Create custom fields that can be used to display additional info for sheets and/or tasks, and can also be used to collect (and optionally display) additional information from users when they sign up for a task/item.
*   [Volunteer Sign Up Sheets Calendar Display](https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-calendar-display/) - Display your events and signups in one or more custom calendars, with a variety of display options.
*   [Volunteer Sign Up Sheets Groups](https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheet-groups/) - Organize your sign-up sheets by Groups, or Categories. Can also import groups from BuddyPress and the WordPress Groups extension.
*   [Volunteer Sign Up Sheets Mailchimp](https://stephensherrardplugins.com/plugins/volunteer-sign-up-sheets-mailchimp/) - Connects to your Mailchimp mailing list and adds a checkbox to the sign-up form where they can opt-in/opt-out of your mailing list.
*   [Volunteer Sign Up Sheets Automated and Conditional Emails](https://stephensherrardplugins.com/plugins/volunteer-sign-up-sheets-automated-and-conditional-emails/) - Allows you to set up triggers and conditions to automatically send out emails to predefined lists. Can be used for things like a weekly summary of upcoming events. Can also be used to replace most of the built-in emails with custom HTML formatted emails.

== Installation ==

Extract the zip file and just drop the contents in the wp-content/plugins/ directory of your WordPress installation and then activate the Plugin from Plugins page.

== Frequently Asked Questions ==

**Can this plugin do (insert a feature request here)?**
**Can you add (insert a feature request here)?**

PLEASE DO NOT USE THE SUPPORT FORUM FOR FEATURE REQUESTS!!

This plugin has a lot of options and features, but I have been getting overwhelmed with feature requests recently. This plugin already does MUCH more than I originally intended, and more than we needed for our own school PTA web site. I have created some extensions that I thought would be helpful to the largest number of people, which you can find at:
<https://stephensherrardplugins.com>

**Is there any documentation or help on how to use this?**

Documentation can be found at:
<https://stephensherrardplugins.com/docs/pta-volunteer-sign-up-sheets-documentation/>

**How do I display the signup sheets?**

Use the Sign Up Sheets block, or the shortcode [pta_sign_up_sheet], to display the sign-up sheets on a page.

**Can I display the sheets in a calendar view?**

Yes, you can! The Calendar display extension can be found here:
<https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-calendar-display/>

**Can I change or add my own fields to the Signup Form?**

Yes, check out the Custom Fields extension here:
<https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-custom-fields/>

**Can I modify text and the way the tables are arranged and displayed?**

Yes, the Customizer Extension gives you layout options and templates that you can assign on a per sheet basis! Check out the Customizer extension here:
<https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-customizer/>

**Can I create additional custom email templates so that different sheets can have different emails?**

Yes, the Customizer Extension adds the ability to define custom email templates for any type of email (confirmation, reminder, reschedule, clear) and assign them on a per sheet basis:
<https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheets-customizer/>

**Can signup sheets be assigned to and displayed by groups or categories?**

YES. The groups extension plugin now supports BuddyPress Groups as well as the Groups plugin found at WordPress.org. You can import groups from either of those plugins and can also restrict access and visibility to only members of the corresponding groups assigned to a sheet.  You can now also assign multiple groups to a sheet, and display multiple groups on a page (either in one list, or separate lists by group). This is a paid extension that can be found at: <https://stephensherrardplugins.com/plugins/pta-volunteer-sign-up-sheet-groups/>

**Is this plugin GDPR compliant?**

Maybe? That all depends on you and what else you have done with your site!

The plugin integrates with the GDPR features of WordPress 4.9.6. Meaning, if someone requests an export of their personal data, any signup data associated with that person's provided email (along with any user ID associated with that email) will be included in the personal data export that you generate from WordPress admin. Similarly, if a person requests that their info be deleted, then any signups associated with the provided email (or a user ID associated with that email) will also be deleted and those signup slots will become available again.

This alone will not make your site GDPR compliant. You will need to study up on GDPR and take all the necessary actions for your site to make sure you are in compliance. If you have people using the signup sheets in countries covered by the GDPR, then somewhere on your site, you should be letting them know what information you are collecting when they signup for something, based on what fields you have activated for signups in this plugin. You may also want to set this plugin so that only registered users can signup for events, and then you can present your privacy policy and some sort of agreement check box for them when they are registering for your site.

If your site is going to be affected by GDPR, then you should contact a lawyer to make sure you do everything needed to be in compliance.

== Changelog ==
**Version 5.5.3**
*   Remove extraneous div closing tag that was messing up the User Signups List display when using Divs instead of tables.
*   Tested with PHP 8.4.5 and WordPress 6.7.2

**Version 5.5.2**
*   Update for the data class add_signup function to work better with the Waitlists extension.
*   Tested with PHP 8.4.2 and WordPress 6.7.2

**Version 5.5.1**
*   Fixed typo in the closing "tbody" tag in the signup sheet tables template that could affect the display of Multi-day or Recurring sheets with some themes.
*   Tested with PHP 8.4.2 and WordPress 6.7.2

**Version 5.5.0**
*   Added new template tags for emails.
*   Refactored template tag class to use separate functions for signup, task, and sheet tags, making it easier for extensions to utilize for specific objects.
*   Improved the template tag helper to show tag copied notice even when the page is scrolled down, added a close icon, and also made it so the helper can be closed with the ESC key.
*   Removed the list of available template tags under each email template editor now that additional tags are available and are more easily accessible with the template tags helper.
*   Tested with PHP 8.4.2 and WordPress 6.7.2

**Version 5.4.0**
*   Add a Template Tags Helper feature, and class, to help with the creation of template tags for use in email templates. Extensions can also register their own template tags with the class.
*   The Template Tags helper will appear at the top right of admin pages where you create email templates, and allow you to quickly search template tags and copy them to the clipboard just by clicking on them. Extensions will be updated after this to add their own template tags.
*   All the new public text strings for the validation system, as well as some previously unregistered text strings, are now registered with the new text registry class in version 4.0.0 of the Customizer extension.
*   Fix for {contact_emails} template tag always returning "N/A".
*   Changed the "# Needed" field on the add/edit Tasks page to be a number input instead of a text input, now that all modern browsers support number inputs.
*   Updated and modernized the javascript for adding/removing task rows on the Add/Edit Tasks page.
*   Tested with PHP 8.4.2 and WordPress 6.7.2

**Version 5.3.1**
*   Fixed the {validation_link} template tag for signup validation emails which was broken in 5.3.0 after separating out the email template tag functions into its own separate class.
*   Tested with PHP 8.4.2 and WordPress 6.7.2

**Version 5.3.0**
*   Separated out the email template tag functions into its own static class to be more accessible and extendable by extensions.
*   Updated javascript/jQuery files to more modern standards.
*   Minor HTML change for filter hooks on User Signups List for proper formatting for extensions that add columns after the "Clear" column.
*   Switched to vanilla js autocomplete function instead of jQuery UI Autocomplete for better efficiency, and registered the script for use in extensions (shared by Calendar extension). This is only used to allow admins or Signup Sheet managers to signup other people via live search on the public side signup form in the main plugin and the calendar extension.
*   Tested with PHP 8.4.2 and WordPress 6.7.2

**Version 5.2.2**
*   Bug fix for javascript browser confirmation when clearing a signup. Was still clearing the signup even if the user clicked "Cancel" in the confirmation box.
*   Tested with PHP 8.4.2 and WordPress 6.7.1

**Version 5.2.1**
*   Updated the User Signups List code to properly show clear links based on the new clear hours option, if it is changed to hours instead of days for a sheet.
*   Added link to new Waitlists extension on the admin "Add Ons" page
*   Tested with PHP 8.4.2 and WordPress 6.7.1

**Version 5.2.0**
*   New option on sheets to select if the clear time should be treated as days (default) or hours. Days are now treated as 24 hours instead of a calendar day.
*   The allow clear check function now will also look to see if the task has a start time, and if so, will base the allowed clear time calculation on the date and start time. If no start time, it defaults to midnight (time zero) of the signup date.
*   Bug fix for clear link showing to logged-in users for other user's signups
*   Minor code consolidation and optimization
*   Tested with PHP 8.4.2 and WordPress 6.7.1

**Version 5.1.2**
*   Minor change to the blocks build script to include a required WordPress dependency, that could cause the block editor to crash if you tried to edit a page with the old/legacy Sign Up Sheets block. If other blocks loaded by the editor include the dependency, then the editor will crash.
*   Tested with PHP 8.4.2 and WordPress 6.7.1

**Version 5.1.1**
*   Switched from sessions to cookies for storing the message data during redirects to be more compatible with different WordPress environments and plugins that may send out headers before this plugin has a chance to start the session, which was causing PHP Warnings on some sites.
*   Tested with PHP 8.4.2 and WordPress 6.7.1

**Version 5.1.0**
*   Fixed issues with certain validation features still working even when the main checkbox to enable the validation system was unchecked.
*   Added new Require Validation to Signup option to the Validation settings. Checking this will require that users validate their email address using the validation form before they can signup for an event, if you are not already requiring visitor to login or validate to view the signup sheets.
*   Added new option to disable sending the Signup Validation email to the global CC email address. Check if you do NOT want to get a copy of the validation emails when an unvalidated visitor has signed up for something (only if signup validation is enabled and you are not requiring validation to view).
*   Continued refactoring and modularization of the plugin code to make it easier to maintain and extend. Slowly working toward a complete overhaul of the core plugin code and a more object-oriented approach.
*   Tested with PHP 8.4.2 and WordPress 6.7.1

**Version 5.0.0**
*   Added new Validation features to (optionally) validate signups and allow users to view and clear their own signups without having to have a WordPress user account. Check the documentation for more details.
*   Updated the old Sign Up Sheets block to use the newest block API and to show a live preview of the output.
*   Added new blocks for the User Signups List, Upcoming Events list (old widget remains as well), and the User Validation Form.
*   New shortcode added for the User Validation Form. [pta_validation_form]
*   Logfile creation and viewing from the admin CRON functions page that will show any actions run during the CRON run. Log files will be automatically cleared every 30 days, or can be manually cleared from the CRON functions page.
*   Code optimization & moving common functions from extensions to global functions to reduce code duplication
*   Beginning to refactor the very old code base to make it more modular and easier to extend, moving toward a more object-oriented and modular approach.
*   Additional hooks added for new extensions, specifically for the new Waitlists extension
*   Minor changes to prevent deprecation notices in PHP8.4
*   Tested with PHP 8.4.2 and WordPress 6.7.1
*   This update, and all future versions of this plugin, as well as all extensions, will require PHP 7.4 or higher.

**Version 4.6.1**
*   Bug fix for "to" email address not being set for reminder and reschedule emails after changes introduced in version 4.6.0
*   Set a max limit on the quantity input on the signup form to the number of available slots
*   Minor update to activation functions for multisite installs for best practices
*   Minor code optimization changes
*   Additional hooks added for new extensions

**Version 4.6.0**
*   New option added to email settings page to enable sending emails in HTML format. If this is checked, the simple textarea input will change to the WordPress TinyMCE visual/text editor for email message templates. Line breaks in email templates will be converted to HTML with the WordPress wpautop function before sending the email.
*   New option added to enable automatic clear/deletion of expired sheets. This will delete the sheet from the database, along with all associated tasks and signups, a specified number of days after the sheet end date. You can also manually trigger this function from the CRON functions page to manually delete all expired sheets at any time.
*   New option to specify the number of days after the signup date, or the last sheet date, before clearing the sheets or signups. Default is 1 to be consistent with previous functionality. But, now you can increase this if you wish to automatically clean up your database, but want to give your managers some more time to be able to view/export the data before it's cleared from the database.
*   New option to hide the date header above the task tables when the sheet type is "Single", as this might be considered redundant by showing the same date above each task table.
*   User Signup Lists now have the sheet title linked to the individual sheet, as long as you have the "Volunteer Sign Up Page" set in the main options. It will link to that page with the sheet_id URL argument added so that the specific sheet is displayed. If you are using the Calendar extension and have that sheet linked to a calendar for view, the title will open the associated calendar for that sheet.
*   Added a timestamp column to the signups table that will be set to the current timestamp based on your WordPress time zone when a signup is added. This field will be shown on the admin View Signups and View/Export All Data pages in a "Signup Time" column with date and time formatted as set in your WordPress general settings.
*   New select options added to the add/edit sheet page to specify the recipients of signup confirmation and clear emails, which will override global email settings if you select anything other than default for each. You can choose from Default, Chairs, User, Both, or None. There are separate selections for signup confirmation emails and clear emails.
*   Added code to prevent viewing or signup for a sheet that has been trashed. This is for those rare situations where a shortcode includes a specific sheet ID, or there was an old manual link that included the sheet ID, but that sheet has been trashed. Previously the sheet would still be shown (but not in the main list of sheets).
*   data-label attribute added to each cell of tables, which is used in the mobile CSS added in this version (see below), but could also be used in any custom CSS or js to get the label/header for any cell.
*   Made the chair name(s) and chair email(s) fields no longer required when adding or editing a sheet. Note that this will result in a message on the sheet saying "No Event Chair contact info provided" (message can be changed or disabled with the Customizer extension), and the reply to address will be set to the Reply-To email in the email settings, or the admin email if the Reply-To email is not set.
*   Added option to include some simple mobile CSS that will style the tables to a one column display on screen sizes less than 600px wide. Table headers are hidden and table cells will be displayed in block format so each cell takes the full width, and a label will be added to the left from the data-label attribute added to each cell.
*   Modified and removed some of the default CSS table styling, and modified/added to some of the class names for elements, to work better with the new mobile CSS and Customizer extension.
*   Minor code optimization changes
*   Tested with PHP 8.3.13 and WordPress 6.7.1

**Version 4.5.2**

*   Minor code changes for compatibility with custom extensions
*   Tested with PHP 8.3.8 and WordPress 6.5.5

**Version 4.5.1**

*   Minor code change for compatibility with some custom extensions
*   Tested with PHP 8.2.10 and WordPress 6.5.3

**Version 4.5.0**

*   Added a database check for open spots and new error message "All spots have already been filled." that will show if a spot is filled by one person while another person is still filling out the form or still browsing the list of sheets. Thus when the second person tried to view the sign-up form, or tries to submit the sign-up form, when someone else just took the last spot, a more appropriate error message will be shown to avoid any confusion.
*   Minor code cleanup
*   Tested with PHP 8.2.10 and WordPress 6.5.3

**Version 4.4.2**

*   Minor change to the way the timestamp is calculated for use on the Admin view pages (to view all signup data) to allow dataTables to properly sort the date column. An issue was discovered where some date formats in other languages could cause an issue with the calculation of the timestamp using PHP's strtotime function.
*   Tested with PHP 8.2.10
*   Tested with WordPress 6.3.2

**Version 4.4.0**

*   Minor code cleanup
*   Tested with PHP 8.2.10
*   Tested with WordPress 6.3.1

**Version 4.3.0**

*   Added select option for all WordPress Users on the Admin Email Volunteers page, so you can now directly email all of your WordPress users.
*   Added hooks for new extensions
*   Register the select2 script (as 'pta-select2') so that it can be shared by several extensions that use it without having to register it separately in each extension
*   Tested with WordPress 6.0.2

**Version 4.2.0**

*   Added option to show the task description on the signup form.
*   Changed Quantity input to "number" type input and set minimum to 1 so can't try to submit with invalid numbers, or text, in the quantity input
*   Tested with WordPress 6.0.1

**Version 4.1.0**

*   Updated admin side scripts to allow DataTables column reordering in the View Signups and All Signup Data pages. You can now drag and drop columns to put them in the order you want them.

**Version 4.0.0**

*   NEW FEATURE: Admin can now Move a Signup to a different Sheet, Task, and/or Date. You can do this from the Admin side View Signups page. A new icon has been added after the Edit icon in the Actions column.
*   NEW FEATURE: Email settings added to allow you to disable signup confirmation emails and/or reminder emails
*   NEW FEATURE: Included the StateSave DataTables module for the Admin tables of View Signups and All Signup Data, which will allow you to create and view/update/delete different "states" (visible columns, sorting/filtering, etc.) of your DataTables settings for each table
*   Added Task Description to the columns for admin view signups and view/export all data
*   Updated DataTables to the latest version
*   CHANGED THE TRANSLATION TEXT DOMAIN to match the directory name to enable editing of translations at the wordpress.org website. If you were using your own translation file, you need to change the filename to match the new text domain, replacing pta_volunteer_sus with pta-volunteer-sign-up-sheets . All the old translation files submitted by others have been changed to the new file names, so they should be a good starting point
*   Tested with WordPress 5.9.3

