WP BASE Booking of Appointments, Services and Events <= 5.9.0 - Unauthenticated Privilege Escalation
Description
The WP BASE Booking of Appointments, Services and Events plugin for WordPress is vulnerable to Privilege Escalation in all versions up to, and including, 5.9.0. This makes it possible for unauthenticated attackers to elevate their privileges to that of an administrator.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HTechnical Details
<=5.9.0What Changed in the Fix
Changes introduced in v6.0.0
Source Code
WordPress.org SVNThis research plan targets a critical unauthenticated privilege escalation vulnerability in the **WP BASE Booking of Appointments, Services and Events** plugin. ### 1. Vulnerability Summary The vulnerability is an **Improper Privilege Management** issue (CVSS 9.8) that allows unauthenticated users …
Show full research plan
This research plan targets a critical unauthenticated privilege escalation vulnerability in the WP BASE Booking of Appointments, Services and Events plugin.
1. Vulnerability Summary
The vulnerability is an Improper Privilege Management issue (CVSS 9.8) that allows unauthenticated users to register as or elevate their privileges to the Administrator role. This typically occurs in the plugin's custom user registration or profile update AJAX handlers, where user-supplied input is passed to WordPress core functions like wp_insert_user, wp_update_user, or update_user_meta without filtering restricted fields such as role or wp_capabilities.
2. Attack Vector Analysis
- Endpoint:
/wp-admin/admin-ajax.php - Action:
app_registration(inferred from plugin naming conventions) orapp_submit_registration. - Vulnerable Parameter:
roleormeta[wp_capabilities]. - Authentication: None (Unauthenticated).
- Preconditions: The plugin must have its registration feature active (usually enabled via a shortcode or in the "Marketplace" / "Registration" settings).
3. Code Flow (Inferred)
- Entry Point: An unauthenticated user sends a POST request to
admin-ajax.phpwith the actionapp_registration(likely hooked viawp_ajax_nopriv_app_registration). - Handler: The handler function (e.g.,
WpB_Registration::register_user) processes$_POSTdata. - Vulnerability: The code likely extracts all POST parameters and passes them into a configuration array for
wp_insert_user($userdata). - Sink: If
$userdata['role']is not explicitly unset or hardcoded to 'subscriber'/'client', WordPress core will assign the role specified in the POST request (e.g., 'administrator').
4. Nonce Acquisition Strategy
The plugin typically enqueues frontend scripts and localizes them with a nonce if the registration or booking shortcode is present on a page.
- Shortcode:
[app_book]or[app_registration](inferred). - JS Variable:
app_data(grounded in typical WP BASE localized keys). - Nonce Key:
nonce(grounded). - Strategy:
- Create a temporary page with the booking shortcode.
- Navigate to the page.
- Extract the nonce from
window.app_data.nonce.
5. Exploitation Strategy
The goal is to register a new user with the administrator role.
Step 1: Identify Nonce and Action
Use browser_navigate to the homepage or a page with the shortcode and run:
// Browser Eval
console.log(window.app_data);
Step 2: Submit Registration Payload
Send a POST request to admin-ajax.php using the http_request tool.
- URL:
http://localhost:8080/wp-admin/admin-ajax.php - Method:
POST - Headers:
Content-Type: application/x-www-form-urlencoded - Payload:
action=app_registration& nonce=[EXTRACTED_NONCE]& user_login=hacker_admin& user_email=hacker@example.com& user_pass=Password123!& role=administrator& first_name=Hacker& last_name=Admin
Note: If role is ignored, try the meta-injection variant:...&meta[wp_capabilities][administrator]=1
6. Test Data Setup
- Install Plugin: Ensure WP BASE (<= 5.9.0) is active.
- Create Registration Page:
wp post create --post_type=page --post_title="Register" --post_status=publish --post_content='[app_book]' - Enable Registration (If needed): Ensure the plugin's "Marketplace" or "Registration" settings allow frontend signups (this is often the default or enabled via vendor/client settings).
7. Expected Results
- Response: A successful JSON response (e.g.,
{"success":true,...}) or a redirect indicating account creation. - Outcome: A new user record is created in the
wp_userstable. - Privilege: The new user is assigned the
administratorrole in thewp_usermetatable under thewp_capabilitieskey.
8. Verification Steps
After the exploit, use WP-CLI to confirm the new user's role:
# Check if the user exists and has the admin role
wp user list --role=administrator
# Check specific user details
wp user get hacker_admin
9. Alternative Approaches
If app_registration fails or requires high authentication:
- Profile Update: If the plugin has an
app_save_profileaction for logged-in clients, register as a low-level "Client" first, then use that session to POSTrole=administratorto the profile update endpoint. - Vendor Registration: Use the Marketplace vendor registration flow (
[app_vendor_services]) if the primary booking registration is restrictive. - Parameter Guessing: If
roledoesn't work, tryuser_role,capabilities, orapp_role. Checkcss/admin.cssidentifiers likeapp_users_vendorfor hints on how roles are handled internally.
Summary
The WP BASE Booking of Appointments, Services and Events plugin for WordPress is vulnerable to unauthenticated privilege escalation in versions up to and including 5.9.0. This vulnerability allows an unauthenticated attacker to register a new account with the 'administrator' role by exploiting insufficient validation of the user role parameter in the plugin's registration handlers.
Security Fix
@@ -1,4 +1,19 @@ -V5.9.0 +V6.0.0 March 9, 2026 +- New: Clients can view their bookings in Schedules and use it to edit their bookings +- New: Commissions can be paid with Stripe Connect +- Tweak: Better caching for Schedules +- Tweak: Datatables assets separated, reducing file size loaded on booking pages +- Change: Front End Edit addon has been retired and its functions integrated into the core +- Dev: moment.js will now be used from WP library +- Fix: Date/time columns of List of Bookings, Credit History and Vendor Commissions tables are not sorted correctly + +V5.9.1 +- Tweak: In Online Meetings, Agora video interface is renewed and SDK updated +- Tweak: Grid element support for [app_vendor_services] shortcode +- Change: In Google Calendar, when service providers use their calendar, and Google Meet is activated, website account no more records Meet and sends invitation (otherwise there will be two invitations) +- Fix: In Recurring Appointments, when a booking is created on admin side, UDF values of parent are not copied to children + +V5.9.0 January 5, 2026 - New: Additional log file for API messages and setting changes. Log display can be reversed - New: In Marketplace, new shortcode [app_vendor_services] to display list of services by the vendor - Tweak: PHP 8.4 compatibility for Twilio API @@ -15,13 +30,13 @@ - Fix: A test code writes list of Extras to the log file - Fix: Whenever a WooCommerce product with [app_book] shortcode is saved, an unnecessary variation is created -V5.8.1 +V5.8.1 November 29, 2025 - Tweak: Compatibility with WordPress 6.9 - Tweak: Calendar Design can be selected in Setup Wizard - Fix: In Digital Wallet, when "Sell Credits/Packages with WooCommerce" option is selected, purchasing regular product with WooCommerce results in wrong name in order form and email (name of the credit plan or package is displayed instead of the product) - Fix: Some WP BASE integrated WooCommerce actions create log records that include HTML tag which cannot be properly displayed in log file -V5.8.0 +V5.8.0 October 16, 2025 - New: Calendar design "minimalistic" - New: Service package plan bundles in Digital Wallet - Change: Payment Gateways Paymill and Simplify retired @@ -36,7 +51,7 @@ - Fix: With Zoom integration when a booking edited another Zoom meeting is created instead of editing the original one - Fix: Time Variant Durations should not show other providers in Marketplace -V5.7.0 +V5.7.0 August 23, 2025 - New: In Marketplace, new setting "GD Pricing Manager Packages" allows only selected packages to create vendors - New: When an author in the bio CPT is not a vendor, or a suspended vendor his/her booking calendar can be hidden with the new "Hide Non-Vendor Booking Calendars" setting - New: When new setting Adjust Font Color is set to yes, calendar fonts are automatically adjusted to be white or black @@ -58,7 +73,7 @@ - Fix: Digital Wallet sales success does not return confirmation form - Fix: "get_workers_by_location" function gives no results during ajax update -V5.6.0 +V5.6.0 July 11, 2025 - New: Multi Store support for Marketplace, i.e. vendors can employ their own service providers and manage their team's services, bookings and working hours - Tweak: Multiple categories are now selectable in [app_book] shortcode - Tweak: Event Bookings - Zoom integration @@ -71,7 +86,7 @@ - Fix: Locations does not obey sort order menu ordering - Fix: If Zoom topic and/or agenda have double quotes, Zoom details cannot be shown in the related booking record -V5.5.0 +V5.5.0 May 10, 2025 - Tweak: Clients admin page UI change - Dev: Refactoring in several files @@ -83,7 +98,7 @@ - Fix: Missing BuddyPress Groups/Locations integration setting in admin Locations - Fix: PHP error in admin Locations when filtering with service -V5.4.0 +V5.4.0 March 29, 2025 - Tweak: Locations admin UI rewritten - Tweak: In admin Vendors, suspension reason now can be seen in Logs - Tweak: UDFs which are set as "register" and set by the vendor on their settings can now be used in emails @@ -100,13 +115,13 @@ - Fix: Shortcode TinyMCE inserter does not show up - Fix: Registration UDF fields cannot be edited unless user is client and vendor at the same time -V5.3.0 +V5.3.0 March 4, 2025 - New: WooCommerce product name can be set in Digital Wallet - Fix: PHP to moment time format conversion does not take care of escaped characters - Fix: Schedules do not show reserved bookings for providers - Fix: Conflict about Stripe API library with Paid Member Subscriptions plugin -V5.2.0 +V5.2.0 February 16, 2025 - New: Client Approval for Multi Vendor Marketplace - Tweak: Caching in Schedules - Tweak: Guest names and guest emails can be exported in CSV file @@ -119,7 +134,7 @@ - Fix: For services longer than 1 day and Group Bookings enabled, future availability may be less than it is supposed to be - Fix: Some bookings may be marked as completed earlier than they are supposed to be -V5.1.0 +V5.1.0 January 24, 2025 - New: Completely new Schedules system based on Event Calendar JavaScript library - New: Background color setting in services - New: Providers can register user when entering manual booking @@ -129,7 +144,7 @@ - Change: Default select element menu height is 8 now (was 4) - Change: On front end default qtip mode is now "solo" (only one qtip can be open at a time) -V5.0.0 +V5.0.0 December 18, 2024 - New: Selling expirable service packages using Digital Wallet addon (Formerly Credits addon) - New: Register and Login at checkout - New: Calendar Time Slot Display selection option "Fixed start/end" @@ -142,18 +157,18 @@ - Fix: Better Messages button does not show in BP list of bookings - Fix: Hardening of codes for malicious attempts -V4.9.2 +V4.9.2 December 14, 2024 - New: Zoom meetings can be deleted by WP BASE upon change of booking status, e.g. when booking is removed - Change: By default Zoom meetings are created only for paid and confirmed status. Other statuses can be setup in Zoom settings - Tweak: Better handling of deleting Google Calendar events - Fix: PHP error in Ultimate Member Book Me page -V4.9.1 +V4.9.1 October 27, 2024 - Tweak: Improvements in Setup Wizard - Tweak: Better support for themes having pages with narrow container width - Fix: PHP warning in front.ajax when updating calendars -V4.9.0 +V4.9.0 October 23, 2024 - New: Setup Wizard - New: Calendar Time Slot Display setting allows time slot display selection globally. Default display mode is "with_break" now - New: "Default" time slot color set @@ -166,7 +181,7 @@ - Fix: Seasonal Working Hours schedule is not applied for the last week of the year - Fix: In PHP8.3, warning message in admin Dashboard when there are no providers -V4.8.0 +V4.8.0 September 26, 2024 - Tweak: Flexslider is not refreshed at first load now, thus flickering of images are prevented - Tweak: Admin email subjects are now specific for pending and confirmed bookings - Fix: Uploaded video may not be displayed in Multi Vendor Marketplace Geodirectory integration @@ -193,7 +208,7 @@ - Fix: When service duration is 1 day and Selectable Durations not configured, JavaScript error prevents opening of the checkout form - Fix: Single Click Booking summary info shows updated service instead of service of the selected slot after calendar updated -V4.7.0 +V4.7.0 August 23, 2024 - New: 1 month to 12 months service duration can be selected in Selectable Durations - Fix: When editing an admin booking record, checking/unchecking send email check box affects other UDF check boxes - Fix: PHP8 error when a non logged in user makes a booking and UDF addon enabled @@ -204,7 +219,7 @@ V4.6.1 - Tweak/Fix: Old confirmation form is not working for Event Bookings. Replaced with the new Checkout form -V4.6.0 +V4.6.0 August 04, 2024 - New: Confirmation Form now uses the same markup and styling of Flex Steps Checkout - Change: Remember Me field retired - Change: Several settings about confirmation form layout and css have been retired @@ -214,7 +229,7 @@ - Fix: When service duration is exactly 7 days, service availabilities are incorrect - Fix: Deprecated messages in PHP8.3.9 -V4.5.0 +V4.5.0 June 29, 2024 - New: Booking lasting longer than 24 hours are displayed on a monthly calendar on admin schedules and provider/owner account - Tweak: WordPress V6.6 tested for compatibility - Tweak: Flex Steps now support Shopping Cart @@ -223,7 +238,7 @@ - Fix: Permanently Delete Selected Records button is not working - Fix: WooCommerce Order ID is not displayed in admin bookings in HPOS if compatibility mode deactivated -V4.4.0 +V4.4.0 June 04, 2024 - New: "Flex Steps" booking process - Tweak: Admin can upload provider and vendor avatar - Tweak: Admin can enter description for provider @@ -247,7 +262,7 @@ - Fix: Clients do not have audio and video buttons in Agora meetings - Fix: Export Bookings check box names are not translatable -V4.3.0 +V4.3.0 April 10, 2024 - New: Integration with Better Messages: Now vendors and clients can write each other at meeting and waiting room pages. Users can send message to vendor at their bio pages - New: Each service can be selected to have Online Meeting or not - New: New shortcode [app_vendor_meta] which prints vendor info on bio page @@ -270,14 +285,14 @@ - Fix: CSS conflict of flexslider in Listeo theme - Fix: Commissions tab on account page should not show up if user is not vendor -V4.2.0 +V4.2.0 February 26, 2024 - New: List of Bookings can be printed - New: Credit history and Commissions list can be printed - Tweak: WP6.5 compatibility - Fix: Flexslider conflicts with WooCommerce default theme Storefront - Fix: When slider is active, category opt_group should not be on -V4.1.0 +V4.1.0 February 6, 2024 - Change: On user profile settings, only vendors can set WP fields (name, email, first name, last name ), for the rest users these fields are readonly - Tweak: Better sync with WP fields in Vendors, Clients and user profile - Fix: Preferred Language selection at profile is not reflected to displayed language @@ -295,7 +310,7 @@ - Fix: Not possible to use Jitsi and Agora at the same website - Fix: After vendors edit a service, they lose ownership -V4.0.1 +V4.0.1 January 12, 2024 - Tweak: Credit records can be individually deleted - Tweak: Note can be written when adding a credit record - Tweak: PERSON_TYPES placeholder can be used in email templates @@ -558,6 +558,9 @@ .app-workers .app-upload-image-btn, .app-vendors .app-upload-image-btn { max-width: 96px; + height: 30px; + min-height: 30px; + line-height: 30px; } .app-workers .app-upload-image-btn::before, @@ -947,10 +950,19 @@ .app-manage-row select { float: none; font-size: 9px; - height: 28px; + height: 30px; + min-height: 30px; + line-height: 30px; padding: 0 24px 0 8px; } +[class*="wp-base-dev_page_app"]:not(.wp-base-dev_page_app_bookings) .app-manage-row select, +[class*="wp-base-dev_page_app"]:not(.wp-base-dev_page_app_bookings) .postbox .app-actions select, +.app-account-page:not(.app-account-manage) .app-manage-row select, +.app-account-page:not(.app-account-manage) .postbox .app-actions select{ + font-size: 12px; +} + .app-manage select { max-width: 300px; width: 100%; @@ -1261,6 +1273,9 @@ #wpbody-content .app-page .actions form select { max-width: 120px; } + [class*="wp-base-dev_page_app"]:not(.wp-base-dev_page_app_bookings) #wpbody-content .app-page .actions form select { + max-width: 150px; + } } @media screen and (max-width: 360px) { @@ -1304,6 +1319,23 @@ margin-bottom: 10px; } +.wp-core-ui .app-page select, +.wp-core-ui .app-page input[type=text]{ + min-height: 30px; + height: 30px; + line-height: 30px; +} + +.wp-core-ui .app-page select { + background-position: right 3px top 60%; +} + +.wp-core-ui .app-page .button-secondary { + min-height: 30px; + height: 30px; + line-height: 30px; +} + @media screen and (max-width: 782px) { .user-inner .booking-info::before { content: '\00B7'; @@ -1526,7 +1558,7 @@ .app-crowded input:not([type="checkbox"]) { font-size: 11px; line-height: 12px; - min-height: 28px; + min-height: 30px; font-weight: normal; } @@ -1862,6 +1894,9 @@ min-width: 100px; margin-left: 30px; vertical-align: baseline; + height: 30px; + min-height: 30px; + line-height: 30px; } div.addon-set-info { @@ -2002,7 +2037,7 @@ .app-4col .ui-multiselect { width: 100%; - min-height: 32px; + min-height: 32px; } .app-flex .app-wh-list.ui-multiselect { @@ -2109,7 +2144,9 @@ #wpbody-content .app-page .button { font-size: 13px; - height: 28px; + height: 30px; + min-height: 30px; + line-height: 30px; } #app-service-reset-form .button { @@ -2119,7 +2156,6 @@ #app_export_csv_button { width: auto; white-space: normal; - height: auto } .app-page #poststuff h3.hndle { @@ -2263,13 +2299,14 @@ #app-bulk-change-form, #app-search-form { display: flex; - gap: 5px; + gap: 3px; flex-wrap: wrap; } #app-search-form select { float: none; height: 30px; + min-height: 30px; padding: 0 24px 0 8px; margin: 1px 3px 3px 0; } @@ -2306,8 +2343,9 @@ width: initial; margin: 1px 3px 1px 1px; padding: 0 8px; - height: 28px; - line-height: 28px; + height: 30px; + min-height: 30px; + line-height: 30px; /* background-image: url(../images/search.svg); */ /* background-repeat: no-repeat; */ /* background-size: 16px; */ @@ -2806,6 +2844,7 @@ } #credit-plans table .app-plan-price { + min-width: 65px !important; max-width: 80px !important; } @@ -3297,6 +3336,14 @@ /* Editor Widget -------------------------------------------------------------- */ /** * from WP Editor Widget plugin V 0.5.5 * Author: David Mårtensson, Odd Alice */ +iframe#WpB_Editor_Widget_ifr { + min-height: 350px; +} + +#wp-WpB_Editor_Widget-wrap { + margin-bottom: 20px; +} + #app-editor-widget-container { position: fixed; top: 30px; @@ -3305,6 +3352,7 @@ bottom: 30px; z-index: 50100; background: #fff; + min-height: 300px; } #app-editor-widget-backdrop { @@ -3510,7 +3558,8 @@ } .app-controls .app-actions select { - height: 28px; + height: 30px; + min-height: 30px; max-width: 160px; font-size: 10px; } @@ -4130,6 +4179,11 @@ width: 100%; } +#services-table textarea.stripped-content { + height: 65px; + margin-bottom: 3px; +} + #services-table .app_iedit_workers textarea { height: 96px; } @@ -4311,6 +4365,12 @@ font-size: 13px; } +.dataTables_length label { + display: flex; + align-items: center; + gap: 5px; +} + #credit-plans div.fg-toolbar, #mv-commission-rates div.fg-toolbar, .inline-edit-row .dataTables_length, @@ -4577,606 +4637,3 @@ .app-setup-wrap .form-table th.app-samples { font-weight: 400; } - -/*-------------------------------------------------------------- -*** Schedules - -#app-schedules .app-front-admin h2 { - margin: 0; -} - -#app-schedules .ec-week-view .ec-event.long, -#app-schedules .ec-day-view .ec-event.long { - display:none; -} - -.app-schedules-group { - position: relative; - margin-left: -20px; -} - -.app-account-page .app-schedules-group { - margin-left: 0; -} - -.app-schedules-group #app-navbar { - z-index: 100; - overflow: hidden; -} - -#schedules-filter .app-dash-title { - display: none; -} - -#schedules-filter div.app-actions { - justify-content: space-around; - gap: 10px 20px; -} - -#schedules-filter .app-filter-ms { - width: 180px; - max-width: 400px; -} - -#schedules-filter .app-filter-stats { - width: 150px; - max-width: 200px; -} - -#schedules-filter .app-filter-weekdays { - width: 120px; - max-width: 200px; -} - -#schedules-filter button.ui-multiselect { - width: 100%; -} - -.app-filter-services.app-filter-ms { - flex-grow: 2; -} - -.app-filter-workers.app-filter-ms { - flex-grow: 0.5; -} - -.has-color .ui-multiselect-checkboxes label span { - margin-right: auto; -} - -.has-color .ui-multiselect-checkboxes label { - display: flex; - padding: 3px 1px 3px 3px; - text-indent: 0; - justify-content: space-between; -} - -.has-color .ui-multiselect-checkboxes a.pickcolor { - width: 20px; - padding: 0; - margin-right: 3px; - cursor: default; -} - -.has-color .ui-multiselect-checkboxes input { - align-self: center; -} - -body[class*="schedules"] .ui-multiselect-header.ui-widget-header, -body.app-account-schedules .ui-multiselect-header.ui-widget-header { - font-size: 11px; -} - -body[class*="schedules"] .ui-multiselect-header.ui-widget-header a, -body.app-account-schedules .ui-multiselect-header.ui-widget-header a { - display: flex; - align-items: center; -} - -body[class*="schedules"] .ui-multiselect-menu, -body.app-account-schedules .ui-multiselect-menu { - z-index: 1010; -} - -body[class*="schedules"] .app-users-quick-book.ui-multiselect-menu, -body.app-account-schedules .app-users-quick-book.ui-multiselect-menu { - z-index: 10002; - font-size: 11.5px; -} - -.bp-user .app-users-quick-book.ui-multiselect-menu span { - font-size: 11.5px !important; -} - -#schedules-filter .app-schedule-picker { - width: 120px; -} - -#schedules-filter .app-page .tablenav .actions { - padding-right: 20px; -} - -.app-front-admin #schedules-filter div.app-actions { - margin-top: 10px; -} - -.app-schedule-select.ui-widget { - font-size: 13px; -} - -#schedules-filter .app-schedule-start { - position: absolute; - z-index:101; - opacity: 0; - width: 120px; - font-size: 13px; -} - -#schedules-filter .app-schedule-start-alt { - z-index:100; - width: 120px; - font-size: 13px; -} - -@media screen and (max-width: 782px) { - #schedules-filter input { - min-height: 30px; - } -} - -#app-schedules { - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: transparent; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #212529; - text-align: left; - background-color: transparent; - margin-left: 20px; -} - -.app-account-page #app-schedules { - margin-left: 0; -} - -#app-schedules .app-sched { - position: relative; - display: flex; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #fff; - background-clip: border-box; - border: 1px solid rgba(0, 0, 0, .125); - border-radius: .25rem; - margin-top: 0; - padding: 0; - max-width: none; - box-shadow: none; - box-sizing: border-box; -} - -#app-schedules .app-sched-body { - flex: 1 1 auto; - min-height: 1px; - padding: 1.25rem; -} - -#app-schedules .ec-toolbar { - flex-direction: row-reverse; -} - -#app-schedules .ec-start { - display: flex; - flex-direction: row-reverse; -} - -#app-schedules .ec-toolbar>*>:not(:last-child) { - margin-right: 0; -} - -#app-schedules .btn-group, -#app-schedules .btn-group-vertical { - position: relative; - display: inline-flex; - vertical-align: middle; -} - -#app-schedules .btn-default:not(:disabled):not(.disabled).active, -#app-schedules .btn-default:not(:disabled):not(.disabled):active { - color: #212529; - background-color: rgb(229.5, 229.5, 229.5); - border-color: rgb(169.6773255814, 180.125, 190.5726744186); -} - -#app-schedules .btn-group>.btn-group:not(:last-child)>.btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -#app-schedules .btn-default:hover { - color: #212529; - background-color: rgb(235.875, 235.875, 235.875); - border-color: rgb(176.9418604651, 186.5, 196.0581395349); -} - -#app-schedules .btn-group-vertical>.btn, -#app-schedules .btn-group>.btn { - position: relative; - flex: 1 1 auto; -} - -#app-schedules .btn:hover { - color: #212529; - text-decoration: none; -} - -#app-schedules .btn { - white-space: nowrap; -} - -#app-schedules .btn { - display: inline-block; - font-weight: 400; - color: #212529; - text-align: center; - vertical-align: middle; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: .375rem .75rem; - font-size: 1rem; - line-height: 1.5; - border-radius: .25rem; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; -} - -#app-schedules .btn-default { - color: #212529; - background-color: #fff; - border-color: #ced4da; -} - -#app-schedules .ec .ec-toolbar>*>:not(:first-child) { - margin-left: .75em; -} - -#app-schedules .ec .ec-toolbar>*>:not(:first-child) { - margin-right: .75em; -} - -#app-schedules .btn:not(:disabled) { - cursor: pointer; -} - -#app-schedules .ec .ec-toolbar>*>* { - margin-bottom: .5em; -} - -#app-schedules .btn-default:hover { - color: #212529; - background-color: rgb(235.875, 235.875, 235.875); - border-color: rgb(176.9418604651, 186.5, 196.0581395349); -} - -#app-schedules .ec-event:not(.ec-pointer) { - cursor: pointer; - color: inherit; - padding: 2px 2px 2px 5px; - border-radius: 8px; - border: 1px solid #f0f0f0; - box-shadow: -.5px 0 0 #f0f0f0; - overflow: hidden; - display: flex; -} - -#app-schedules .ec-week-view .ec-event, -#app-schedules .ec-day-view .ec-event { - /* font-size: 12px; */ -} - -#app-schedules .ec-month-view .ec-event:not(.ec-pointer) { - outline: 2px solid #f0f0f0; -} - -#app-schedules .ec-events { - cursor: cell; -} - -#app-schedules .ec:not(.ec-month-view) .ec-events { - margin-right: 0; -} - -#app-schedules .ec-month-view .ec-event, -#app-schedules .ec-week-view:not(.ec-list) .ec-event.long, -#app-schedules .ec-day-view:not(.ec-list) .ec-event.long, -#app-schedules .ec-timeline .ec-event { - max-height: 48px; -} - -#app-schedules .ec-month-view .ec-event { - left: 3px; -} - -#app-schedules .ec-month-view .ec-events:not(.ec-preview) .ec-event:hover, -#app-schedules .ec-week-view .ec-events:not(.ec-preview) .ec-event.long:hover, -#app-schedules .ec-day-view .ec-events:not(.ec-preview) .ec-event.long:hover { - max-height: 100%; -} - -#app-schedules .ec:not(.ec-timeline) .ec-events:not(.ec-preview) .ec-event:hover { - height: auto !important; - z-index: 99 !important; -} - -#app-schedules .ec:not(.ec-timeline) .ec-events:not(.ec-preview) .ec-event:not(.long):hover { - width: max(100% , 144px) !important; -} - -#app-schedules .ec:not(.ec-timeline) .ec-events:not(.ec-preview) .ec-event.long:hover { - min-width: 144px !important; -} - -#app-schedules .ec.ec-timeline .ec-events.ec-preview .ec-event:hover { - width: 100% !important; -} - -#app-schedules .ec-timeline .ec-event:hover { - max-height: unset; -} - -#app-schedules .ec-timeline .ec-event:not(.long):hover { - width: 144px !important; -} - -#app-schedules .ec-resource, -#app-schedules .ec-timeline .ec-events { - min-height: 48px; -} - -#app-schedules .ec-resource, -#app-schedules .ec-timeline .ec-days { - flex-basis: 50px !important; -} - -#app-schedules .ec-event-body { - display: block; -} - -#app-schedules .ec-event-time { - position: relative; - font-weight: 700; - line-height: 1.3em; - margin: 0 3px 0 0; - max-width: 100%; - text-overflow: ellipsis; -} - -#app-schedules .ec-event-title { - position: relative; - position: sticky; - line-height: 1.3em; - min-height: 1.5em; - text-overflow: ellipsis; - white-space: nowrap; -} - -#app-schedules .ec-month-view .ec-event-time, -#app-schedules .ec-month-view .ec-event-title, -#app-schedules .ec-resource-day-view .ec-event-time, -#app-schedules .ec-resource-day-view .ec-event-title { - line-height: 1.5em; -} - -#app-schedules .ec-week-view .ec-event-time, -#app-schedules .ec-week-view .ec-event-title { - line-height: 1.65em; -} - -#app-schedules .ec-timeline .ec-body { - overflow-x: visible; - overflow-y: hidden; -} - -.app-js-schedules .ec-bg-event { - cursor: not-allowed; -} - -#app-schedules .ec-pointer, -.app-js-schedules .ec-extra { - cursor: cell !important; -} - -#app-schedules .ec-resource span { - padding-top: 0; -} - -#app-schedules .ec-resource > span { - display: flex; - justify-content: space-between; - gap: 5px; - width: 100%; - max-width: 200px; - margin: auto; - padding-top: 4px; -} - -#app-schedules .ec-resource .app-ec-title { - max-width: 150px; - line-height: 18px; - align-self: center; -} - -#app-schedules .app-ec-img img.avatar { - border-radius: 5px; -} - -.app-panel-wrap { - position: fixed; - top: 0; - bottom: 0; - right: 0; - width: 320px; - transform: translateX(100%); - transition: .3s ease-out; - z-index: 10000; -} - -.app-panel-wrap.left { - left: 0; - transform: translateX(-100%); - transition: .3s ease-out; -} - -.app-panel-wrap.open { - transform: translateX(0%); - transition: .3s ease-out; -} - -.app-panel-wrap .app-dock-left span.dashicons { - margin: 0; -} - -.app-panel-wrap .app-dock-left.button-secondary, -.app-panel-wrap .app-close-panel.button-secondary { - line-height: 1.5; - padding: 5px; - position: absolute; - right: 22px; - top: 40px; - z-index: 10000; -} - -.app-panel-wrap .app-close-panel.button-secondary { - left: 16px; - width: 32px; -} - -.app-panel-wrap .app-dock-left.left .dashicons-align-pull-left { - display: none; -} - -.app-panel-wrap .app-dock-left:not(.left) .dashicons-align-pull-right { - display: none; -} - -.app-panel { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - background: #f6f6f6; - color: #50575e; - overflow: auto; - padding: 30px 10px 10px 15px; - border-left: 1px solid #ddd; - border-right: 1px solid #ddd; - box-shadow: 0px 10px 40px -3px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .2); - font-size: 13px; -} - -.app-manage .app-panel h3 { - margin-top: 1.5em; -} - -.app-manage .app-panel .inline-edit-row { - box-shadow: none; -} - -.app-manage .app-panel .inline-edit-row fieldset label span.input-text-wrap { - margin-right: 0; -} - -.app-panel .inline-edit-row fieldset label { - margin: .5em 0; -} - -.app-panel .inline-edit-row fieldset .app-quick-book-user-fields label { - margin: .1em 0; -} - -.app-manage .app-panel .inline-edit-row fieldset label span.title { - width: 6em; -} -.app-manage .app-panel .inline-edit-row fieldset label span.input-text-wrap { - margin-left: 6em; -} - -#app-panel .app_iedit_time input[type="text"], -#app-panel select.app-admin-time { - font-size: 11.5px; -} - -.app-manage .app-panel select.app_users, -.app-manage .app-panel select.app_extras { - width: 100%; -} - -.app-manage .app-panel button.app_users { - width: 100% !important; -} - -.app-panel button.ui-multiselect { - font-size: 11.5px; -} - -.app-manage .app-panel .inline-edit-save { - margin-top: 20px; -} - -.app-panel h3.app_iedit_app_h { - font-size: 1.1em; - text-align: center; -} - -.app-panel div.error, -.app-panel div.notice { - margin: 0; - padding: 5px 10px; -} - -.app-panel div.notice { - font-size: 12px; -} - -.app-panel .app-admin-notice:empty, -.app-panel .app-notice:empty, -.app-panel .app-error:empty { - display: none; -} - -@media screen and (max-width: 782px) { - #app-panel .inline-edit-row fieldset label span.title { - float: left; - } - #app-panel .inline-edit-row span.title { - font-size: 13px; - } - #app-panel .inline-edit-row fieldset label span.input-text-wrap { - margin-left: 6em; - } - #app-panel select { - min-height: 30px; - } - #app-panel input[type=text], #app-panel select, #app-panel textarea { - min-height: 30px; - font-size: 14px; - } - #app-panel input[type=text] { - padding: 0 8px; - min-height: 30px; - } - #app-panel input[type=checkbox] { - height: 1rem; - width: 1rem; - } - #app-panel .app_iedit_time input[type="text"], - #app-panel select.app-admin-time { - font-size: 11.5px; - } -} @@ -1069,7 +1069,6 @@ text-align: right; } -.app-conf-wrapper label span.app-conf-title, .app-payment-field span, .app_billing_line_inner span:not(.app-mobile) { margin-right: 0; @@ -4970,7 +4970,7 @@ margin: 0.2em 6px 0.2em 0; line-height: 2.5; } -.app-front-admin .inline-edit-row .input-text-wrap input[type=text]:not(.colorpicker_input) { +.app-front-admin .inline-edit-row .input-text-wrap input[type=text]:not(.colorpicker_input):not(.datepicker):not(.app-admin-time) { width: 100%; } .app-front-admin .inline-edit-row fieldset label input[type=checkbox] { @@ -347,11 +347,7 @@ .app-pagination .app_date input, .app-pagination .app-next a, .app-pagination .app-previous a, -.app-conf-wrapper input[type="text"], -/* .app-conf-wrapper select, */ -.app-conf-wrapper textarea, input.app_select_date, -.app-conf-wrapper canvas, .app-page .ui-state-default, .app-wc-page .ui-state-default, .wpb-book-me .ui-state-default, @@ -402,10 +398,6 @@ border-width: 0 } -.app-conf-wrapper.app-mobile fieldset { - background-color: #fbfbfb; -} - ul#wp-admin-bar-admin-root-default li#wp-admin-bar-admin-help { border-bottom: 1px solid darkgrey; } @@ -482,10 +474,6 @@ font-size: 0.9em } -.widget div.app-conf-wrapper fieldset div.app-conf-continue { - justify-content: center; -} - .widget .app_2column { float: none; width: 100%; @@ -938,8 +926,7 @@ .app-list .app-monthly-wrapper thead, .app-list .app-monthly-wrapper tbody, .app-flex-menu.with-caption .app-flex, -.app-flex-menu.with-caption .app-flexslider li, -.app-conf-wrapper fieldset { +.app-flex-menu.with-caption .app-flexslider li { box-shadow: 2px 2px 6px rgb(0 0 0 / 20%); } @@ -1191,7 +1178,6 @@ padding-left: 15px; } -.buddyboss-theme .app-conf-wrapper fieldset, .buddyboss-theme caption .app-flex, .buddyboss-theme .app-flex-menu.app-slide.with-caption .app-flex, .buddyboss-theme .app-book-flex .app-flex, @@ -1501,11 +1487,7 @@ .app-pagination .app-next a, .app-pagination .app-previous a, -.app-conf-wrapper input[type="text"], -.app-conf-wrapper select, -.app-conf-wrapper textarea, -input.app_select_date, -.app-conf-wrapper canvas { +input.app_select_date { color: #474747; text-decoration: none; text-shadow: 0 1px 0 #fff; @@ -1713,37 +1695,6 @@ /* Confirmation Form -------------------------------------------------------- */ -.widget_appointments_shortcode .app-conf-wrapper legend { - font-size: smaller; -} - -.app-conf-wrapper label { - display: block; - padding: 3px; -} - -.app-conf-wrapper:not(.above-input) input[type="text"].app-non-mobile, -.app-conf-wrapper:not(.above-input) textarea.app-non-mobile, -.app-conf-wrapper:not(.above-input) select.app-non-mobile { - width: 67%; - margin: 0; -} - -.app-conf-wrapper label span.app-conf-title { - margin-right: 3%; - width: 30%; - display: block; - float: left; - text-shadow: 0.05em 0.05em 0.05em rgba(10,10,10,0.2); -} - -.app-conf-wrapper.above-input .app-conf-fields-gr2 label span.app-conf-title, -.app-edit-wrapper.above-input label span.app-conf-title, -.app-edit-wrapper.app-mobile label span.app-conf-title { - width: 100%; - float: none; -} - .app-conf-text:not(.has-checkbox) { float: left; width: 67%; @@ -1754,26 +1705,7 @@ align-items: baseline; } -.app-conf-wrapper button.ui-multiselect { - width: 67% !important; - vertical-align: bottom; -} - -.app-conf-wrapper.above-input button.ui-multiselect, -.app-conf-wrapper.app-mobile button.ui-multiselect { - width: 100% !important; - vertical-align: bottom; -} - -.app-conf-wrapper.app-mobile div.app-conf-fields-gr2 label span, -.app-conf-wrapper.app-mobile div.app-conf-coupon label span, -.app-conf-wrapper.app-mobile div.app-conf-extra label span { - width: 100%; - float: none; -} - -.app-wrap h3, -.app-conf-wrapper legend.app-conf-title { +.app-wrap h3 { font-size: 0.8em; font-weight: 500; text-transform: uppercase; @@ -1781,103 +1713,13 @@ border: 0 } -.app-conf-wrapper.app-mobile legend.app-conf-title { - font-size: 0.6em; -} - -.app-conf-wrapper input[type="text"], -.app-conf-wrapper select, -.app-conf-wrapper textarea, -input.app_select_date, -.app-conf-wrapper canvas { - padding: 0.2em 0.8em 0.2em 0.2em; -} - -.app-conf-wrapper canvas { - width: 100%; - height: 120px; -} input.app_select_date { font-size: 0.8em; font-weight: normal; + padding: 0.2em 0.8em 0.2em 0.2em; } -.app-conf-wrapper select { - margin-top: 0; -} - -.app-conf-wrapper .app_billing_line input[type="text"].app-non-mobile, -.app-conf-wrapper .app_billing_line select.app-non-mobile, -.app-conf-wrapper.above-input input[type="text"], -.app-conf-wrapper.above-input select:not(.app_select_workers_conf), -.app-conf-wrapper.above-input textarea, -.app-conf-wrapper.app-mobile input[type="text"], -.app-conf-wrapper.app-mobile select { - width: 100% -} - -.app-conf-wrapper sup { - font-weight: bold; - color: red -} - -.app-conf-wrapper .app-conf-details sup { - color: #007acc -} - -.app-non-mobile .app-conf-button { - font-weight: bold; - width: 48.5%; - max-width: 400px; -} - -.app-conf-cancel-button { - float: right; -} - -.app-non-mobile:not(.app-edit-wrapper) .app-conf-cancel-button { - max-width: 30%; -} - -button.app-conf-cancel-button { - font-size: 0.95em; - font-weight: normal; -} - -.app-conf-wrapper fieldset { - padding: 20px 20px 0 20px; -} - -.app-conf-wrapper fieldset div { - margin: 0 0 10px 0; -} - -.app-conf-wrapper .app-conf-seats label:first-child:not(:last-child) { - margin-bottom: 10px; -} - -.app-conf-wrapper .app-conf-seats label:last-child:not(:first-child) { - padding-top: 0; -} - -.app-conf-wrapper fieldset div:empty { - margin: 0; -} - -.app-conf-wrapper fieldset div:not(.ui-select) {} - -.app-conf-wrapper.app-mobile fieldset .app-conf-fields-gr2 div { - overflow: visible; -} - -.app-conf-wrapper.app-mobile fieldset .ui-state-error { - border: 1px solid #f1a899; - background: #fddfdf; - color: #5f3f3f; -} - -.app-conf-wrapper label:after, .app-clearfix:before, .app-clearfix:after { content: "\0020"; @@ -1886,7 +1728,6 @@ overflow: hidden; } -.app-conf-wrapper label:after, .app-clearfix:after { clear: both; } @@ -2149,14 +1990,6 @@ text-align: left; } -.app-conf-wrapper button.ui-multiselect { - line-height: 1.5; -} - -.app-conf-wrapper.app-mobile label span { - font-size: 14px; -} - div.app-conf-fields-gr.app-conf-fields-gr1, div.app-conf-fields-gr.app-conf-fields-gr2 { margin: 0; @@ -2176,28 +2009,6 @@ list-style: none; } -.app-conf-wrapper .app_countdown_dropdown_title.app-title { - text-align: center; - font-size: small; - /* margin-bottom: 0; */ -} - -.app-conf-wrapper:not(.app-mobile) .app-conf-continue .app_countdown-wrapper:not(.app_2column) { - width: 100%; -} - -.app-cont-button-wrapper { - vertical-align: middle; - display: table-cell; - padding-top: 25px; -} - -.app-cont-button-wrapper button { - display: block; - vertical-align: middle; - font-size: 1rem; -} - .app-udf-checkbox { margin-right: 5px; } @@ -2251,62 +2062,10 @@ margin: 0; } -div.app-conf-wrapper input::-webkit-input-placeholder { - font-size: .9em -} - -div.app-conf-wrapper input::-moz-placeholder { - font-size: .9em -} - -div.app-conf-wrapper input:-ms-input-placeholder { - font-size: .9em -} - -div.app-conf-wrapper input:-moz-placeholder { - font-size: .9em -} - -.app-conf-wrapper fieldset .app-conf-continue { - margin-bottom: 0; - display: flex; - flex-wrap: wrap; - justify-content: space-between; -} - -.app-conf-wrapper.app-mobile fieldset .app-conf-continue { - justify-content: center; -} - -div.app-conf-wrapper fieldset div.app-conf-continue.has-button { - justify-content: space-around; -} - -div.app-conf-wrapper .app-conf-continue .app_2column { - padding-right: 0; -} - -button.app-cont-btn { - font-size: .9em; - float: left; -} - #app_confirm_email_username { display: none !important; } -.app-conf-wrapper div.app-conf-price label span.app_old_price { - text-decoration: line-through; - width: 30%; - max-width: 100px; -} - -.app-conf-wrapper div.app-conf-price label span.app_new_price, -.app-conf-wrapper div.app-conf-amount label span.app-conf-text { - font-weight: bold; - width: auto; -} - .app-compact-book-wrapper-gr1 button.ui-multiselect { width: 100% !important; } @@ -2505,47 +2264,6 @@ padding-right: 0; } -/* FEE-------------------------------------------------------- */ - -.app-edit-wrapper { - font-size: smaller; -} - -.app-edit-wrapper select[disabled], -.app-edit-wrapper input[readonly], -select.app-edit-time option:disabled { - color: #ff0000; - font-weight: bold; -} - -.app-conf-start input.app-edit-date, -.app-conf-start select.app-edit-time { - width: 30% -} - -select.app_select_services.app_edit { - width: 60%; -} - -.app-fee.ui-dialog { - font-size: 0.9rem; -} - -.ui-dialog .app-fee-wrapper.ui-dialog-content { - padding: 0; -} - -.app-fee-wrapper .app-conf-start label { - margin-bottom: 10px; -} - -.app-fee-wrapper .app-conf-fields-gr1 select, -.app-fee-wrapper .app-conf-wrapper .app-conf-fields-gr1 input { - width: 67%; - margin: 0; -} - - /* Book Now -------------------------------------------------------- */ div.app-book-now { @@ -2598,7 +2316,6 @@ /* clear fix */ .app_compact:after, .app_compact:before, -.app-conf-wrapper:before, .app-legend:before, .app-pagination:before { content: ''; @@ -4731,3 +4448,172 @@ display: block; } } + +/* Grid -------------------------------------------------------- */ + +.app-grid { + display: grid; + grid-column-gap: 30px; + grid-row-gap: 35px; +} + +.app-grid-4 .app-grid { + grid-template-columns: repeat(4,1fr); +} + +.app-grid-3 .app-grid { + grid-template-columns: repeat(3,1fr); +} + +.app-grid-2 .app-grid { + grid-template-columns: repeat(2,1fr); +} + +.app-grid-1 .app-grid { + grid-template-columns: repeat(1,1fr); +} + +@media (max-width: 1024px) { + .app-grid-4 .app-grid { + grid-template-columns: repeat(3,1fr); + } + .app-grid-3 .app-grid { + grid-template-columns: repeat(2,1fr); + } +} + +@media (max-width: 767px) { + .app-grid-4 .app-grid { + grid-template-columns: repeat(2,1fr); + } + .app-grid-3 .app-grid { + grid-template-columns: repeat(1,1fr); + } + .app-grid-3 .app-item-card { + flex-direction: row; + } + .app-grid-3 .app-item-excerpt { + max-height: 300px; + } + .app-grid-2 .app-grid { + grid-template-columns: repeat(1,1fr); + } + .app-grid-2 .app-item-card { + flex-direction: row; + } + .app-grid-2 .app-item-excerpt { + max-height: 300px; + } +} + +@media (max-width: 480px) { + .app-grid-4 .app-grid { + grid-template-columns: repeat(1,1fr); + } + .app-grid-4 .app-item-card { + flex-direction: row; + } +} + +.app-item-card { + background-color: #fff; + border: 0 solid #69727d; + border-radius: 3px; + display: flex; + flex-direction: column; + min-height: 100%; + overflow: hidden; + position: relative; + transition: all .25s; + width: 100%; + box-shadow: 0 0 10px 0 rgba(0, 0, 0, .15); +} + +.app-grid-1 .app-item-card { + flex-direction: row; +} + +.app-item-card.no-link a { + cursor: default; +} + +.app-item-thumb-link { + display: block; + position: relative; + width: 100%; +} + +.app-item-thumb-link:after { + /* background-image: linear-gradient(0deg, rgba(0, 0, 0, .35), transparent 75%); */ + /* background-repeat: no-repeat; */ + /* bottom: 0; */ + /* content: ""; */ + /* display: block; */ + /* height: 100%; */ + /* opacity: 1; */ + /* position: absolute; */ + /* transition: all .3s ease-out; */ + /* width: 100%; */ +} + +.app-grid-1 .app-item-thumb-link:after { + /* display:none; */ +} + +.app-item-thumb { + position: relative; + padding-bottom: calc(0.66 * 100%); +} + +.app-item-thumb img { + height: 100%; + width: 100%; + object-fit: cover; + left: calc(50% + 1px); + position: absolute; + top: calc(50% + 1px); + transform: scale(1.01) translate(-50%, -50%); + display: block; + max-height: none; + max-width: none; + transition: filter .3s; + border: none; + border-radius: 0; + box-shadow: none; +} + +.app-item-text { + display: flex; + flex-direction: column; + flex-grow: 1; + width: 100%; + padding: 0 30px; + margin-top: 20px; +} + +.app-item-title { + font-size: 21px; +} + +.app-item-excerpt { + flex-grow: 1; + /* margin-bottom: 25px; */ + max-height: 500px; + overflow: hidden; + mask-image: linear-gradient(to bottom, black 80%, transparent 100%); +} + +.app-grid-1 .app-item-excerpt { + max-height: 300px; +} + +.app-item-read-more-wrapper { + margin-bottom: 20px; +} + +.app-item-read-more { + text-transform: uppercase; + display: inline-block; + /* margin-bottom: 20px; */ + font-size: 12px; +} \ No newline at end of file @@ -8,4 +8,4 @@ /* dataTables.jqueryui.css (dataTables) */ table.dataTable tbody td.dt-body-nowrap,table.dataTable tbody th.dt-body-nowrap,table.dataTable td.dt-nowrap,table.dataTable tfoot td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable th.dt-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable thead th.dt-head-nowrap,table.dataTable.nowrap td,table.dataTable.nowrap th{white-space:nowrap}.dataTables_wrapper .dataTables_paginate .fg-button:active,table.dataTable thead td:active,table.dataTable thead th:active{outline:0}table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable tfoot th,table.dataTable thead th{font-weight:700}table.dataTable thead td,table.dataTable thead th{padding:10px 18px}table.dataTable tfoot td,table.dataTable tfoot th{padding:10px 18px 6px}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody td,table.dataTable tbody th{padding:8px 10px}table.dataTable.display tbody td,table.dataTable.display tbody th,table.dataTable.row-border tbody td,table.dataTable.row-border tbody th{border-top:1px solid #ddd}table.dataTable.display tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.row-border tbody tr:first-child th{border-top:none}table.dataTable.cell-border tbody td,table.dataTable.cell-border tbody th{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr td:first-child,table.dataTable.cell-border tbody tr th:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child td,table.dataTable.cell-border tbody tr:first-child th{border-top:none}table.dataTable.display tbody tr.odd,table.dataTable.stripe tbody tr.odd{background-color:#f9f9f9}table.dataTable.display tbody tr.odd.selected,table.dataTable.stripe tbody tr.odd.selected{background-color:#acbad4}table.dataTable.display tbody tr:hover,table.dataTable.hover tbody tr:hover{background-color:#f6f6f6}table.dataTable.display tbody tr:hover.selected,table.dataTable.hover tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3,table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3,table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.compact thead td,table.dataTable.compact thead th{padding:4px 17px 4px 4px}table.dataTable.compact tbody td,table.dataTable.compact tbody th,table.dataTable.compact tfoot td,table.dataTable.compact tfoot th{padding:4px}table.dataTable td.dt-left,table.dataTable th.dt-left{text-align:left}table.dataTable td.dataTables_empty,table.dataTable td.dt-center,table.dataTable th.dt-center{text-align:center}table.dataTable td.dt-right,table.dataTable th.dt-right{text-align:right}table.dataTable td.dt-justify,table.dataTable th.dt-justify{text-align:justify}table.dataTable tfoot td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable thead th.dt-head-left{text-align:left}table.dataTable tfoot td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable thead th.dt-head-center{text-align:center}table.dataTable tfoot td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable thead th.dt-head-right{text-align:right}table.dataTable tfoot td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable thead th.dt-head-justify{text-align:justify}table.dataTable tbody td.dt-body-left,table.dataTable tbody th.dt-body-left{text-align:left}table.dataTable tbody td.dt-body-center,table.dataTable tbody th.dt-body-center{text-align:center}table.dataTable tbody td.dt-body-right,table.dataTable tbody th.dt-body-right{text-align:right}table.dataTable tbody td.dt-body-justify,table.dataTable tbody th.dt-body-justify{text-align:justify}table.dataTable,table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none!important;cursor:pointer;color:#333;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333;border:1px solid #979797;background-color:#fff;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(100%,#dcdcdc));background:-webkit-linear-gradient(top,#fff 0,#dcdcdc 100%);background:-moz-linear-gradient(top,#fff 0,#dcdcdc 100%);background:-ms-linear-gradient(top,#fff 0,#dcdcdc 100%);background:-o-linear-gradient(top,#fff 0,#dcdcdc 100%);background:linear-gradient(to bottom,#fff 0,#dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover{cursor:default;color:#666!important;border:1px solid transparent;background:0 0;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:#fff!important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#585858),color-stop(100%,#111));background:-webkit-linear-gradient(top,#585858 0,#111 100%);background:-moz-linear-gradient(top,#585858 0,#111 100%);background:-ms-linear-gradient(top,#585858 0,#111 100%);background:-o-linear-gradient(top,#585858 0,#111 100%);background:linear-gradient(to bottom,#585858 0,#111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:0;background-color:#2b2b2b;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#2b2b2b),color-stop(100%,#0c0c0c));background:-webkit-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-moz-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-ms-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-o-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:linear-gradient(to bottom,#2b2b2b 0,#0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:#fff;background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),color-stop(25%,rgba(255,255,255,.9)),color-stop(75%,rgba(255,255,255,.9)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_paginate,.dataTables_wrapper .dataTables_processing{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing{height:0;overflow:hidden;margin:0!important;padding:0!important}.dataTables_wrapper.no-footer div.dataTables_scrollBody table,.dataTables_wrapper.no-footer div.dataTables_scrollHead table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width:767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width:640px){.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_length{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}table.dataTable thead th div.DataTables_sort_wrapper{position:relative}table.dataTable thead th div.DataTables_sort_wrapper span{position:absolute;top:50%;margin-top:-8px;right:-18px}table.dataTable tfoot th.ui-state-default,table.dataTable thead th.ui-state-default{border-right-width:0}table.dataTable tfoot th.ui-state-default:last-child,table.dataTable thead th.ui-state-default:last-child{border-right-width:1px}.dataTables_wrapper .dataTables_paginate .fg-button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em;margin-left:2px;text-align:center;text-decoration:none!important;cursor:pointer;color:#333;border:1px solid transparent}.dataTables_wrapper .dataTables_paginate .fg-button:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.dataTables_wrapper .dataTables_paginate .fg-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.dataTables_wrapper .ui-widget-header{font-weight:400}.dataTables_wrapper .ui-toolbar{padding:8px}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:none} /* Countdown */ -.appCountdown-rtl{direction:rtl}.appCountdown-holding span{color:#888}.appCountdown-row{clear:both;width:100%;text-align:center}.appCountdown-show1 .appCountdown-section{width:98%}.appCountdown-show2 .appCountdown-section{width:48%}.appCountdown-show3 .appCountdown-section{width:32.5%}.appCountdown-show4 .appCountdown-section{width:24.5%}.appCountdown-show5 .appCountdown-section{width:19.5%}.appCountdown-show6 .appCountdown-section{width:16.25%}.appCountdown-show7 .appCountdown-section{width:14%}.appCountdown-section{display:block;float:left;font-size:75%;text-align:center}.appCountdown-amount{font-size:200%}.appCountdown-period{display:block}.appCountdown-descr{display:block;width:100%} \ No newline at end of file +.appCountdown-rtl{direction:rtl}.appCountdown-holding span{color:#888}.appCountdown-row{clear:both;width:100%;text-align:center}.appCountdown-show1 .appCountdown-section{width:98%}.appCountdown-show2 .appCountdown-section{width:48%}.appCountdown-show3 .appCountdown-section{width:32.5%}.appCountdown-show4 .appCountdown-section{width:24.5%}.appCountdown-show5 .appCountdown-section{width:19.5%}.appCountdown-show6 .appCountdown-section{width:16.25%}.appCountdown-show7 .appCountdown-section{width:14%}.appCountdown-section{display:block;float:left;font-size:75%;text-align:center}.appCountdown-amount{font-size:200%}.appCountdown-period{display:block}.appCountdown-descr{display:block;width:100%} Only in /home/deploy/wp-safety.org/data/plugin-versions/wp-base-booking-of-appointments-services-and-events/6.0.0/css: panels.css @@ -1 +1,449 @@ -.ec{color-scheme:light;--ec-h:0;--ec-s:0%;--ec-l-300:91.00%;--ec-l-500:83.50%;--ec-l-600:78.40%;--ec-l-700:71.40%;--ec-bg-fallback-color:#fff;--ec-hs:var(--ec-h),var(--ec-s);--ec-color-300:hsl(var(--ec-hs),var(--ec-l-300));--ec-color-500:hsl(var(--ec-hs),var(--ec-l-500));--ec-color-600:hsl(var(--ec-hs),var(--ec-l-600));--ec-color-700:hsl(var(--ec-hs),var(--ec-l-700));--ec-border-color:var(--ec-color-500);--ec-accent-color:var(--ec-color-600);--ec-button-bg-color:var(--ec-bg-color);--ec-button-border-color:var(--ec-color-600);--ec-button-text-color:var(--ec-text-color);--ec-button-active-bg-color:var(--ec-color-300);--ec-button-active-border-color:var(--ec-color-700);--ec-button-active-text-color:var(--ec-button-text-color);--ec-event-bg-color:#039be5;--ec-event-text-color:#fff;--ec-bg-event-color:var(--ec-color-500);--ec-bg-event-opacity:0.3;--ec-list-day-bg-color:var(--ec-bg-color,var(--ec-bg-fallback-color));--ec-today-bg-color:rgba(255,220,40,.15);--ec-highlight-color:rgba(188,232,241,.3);--ec-popup-bg-color:var(--ec-bg-color,var(--ec-bg-fallback-color));--ec-now-indicator-color:#ea4335}.ec-dark .ec{color-scheme:dark;--ec-h:215;--ec-s:15%;--ec-l-300:25.50%;--ec-l-500:42.40%;--ec-l-600:49.80%;--ec-l-700:57.30%;--ec-bg-fallback-color:#22272e}@media(prefers-color-scheme:dark){.ec-auto-dark .ec{color-scheme:dark;--ec-h:215;--ec-s:15%;--ec-l-300:25.50%;--ec-l-500:42.40%;--ec-l-600:49.80%;--ec-l-700:57.30%;--ec-bg-fallback-color:#22272e}}.ec-timeline .ec-container{display:flex;flex:1 1 0%;min-height:0}.ec-timeline .ec-main{display:flex;flex-direction:column;min-width:0}.ec-timeline .ec-content{flex-direction:column}.ec-timeline .ec-body{flex:1 1 auto;overflow:auto}.ec-timeline .ec-body .ec-content{min-height:100%;min-width:-moz-max-content;min-width:max-content;position:relative}.ec-timeline .ec-body .ec-days{flex-shrink:0}.ec-timeline .ec-body .ec-days:not(:last-child){flex-grow:0}.ec-timeline .ec-header{overflow:hidden}.ec-timeline .ec-header .ec-days{min-width:-moz-max-content;min-width:max-content}.ec-timeline .ec-header .ec-day{display:flex;flex-basis:auto;flex-direction:column}.ec-timeline .ec-day,.ec-timeline .ec-header .ec-day:first-child .ec-day-head,.ec-timeline .ec-header .ec-day:first-child .ec-time:first-child{border:none}.ec-timeline .ec-day-head{border-style:none none none solid}.ec-timeline .ec-times{border-top:1px solid var(--ec-border-color);display:flex}.ec-timeline .ec-time{border-left:1px solid var(--ec-border-color);box-sizing:border-box;font-size:.95em;min-height:24px;overflow:hidden;text-overflow:ellipsis}.ec-timeline .ec-line,.ec-timeline .ec-time{width:72px}.ec-timeline .ec-events{height:100%;margin:0;position:relative}.ec-timeline .ec-event{position:absolute}.ec-timeline .ec-bg-event{height:100%;z-index:auto}.ec-timeline .ec-lines{display:flex}.ec-timeline .ec-line:not(:first-child):after{border-left:1px solid var(--ec-border-color);content:"";height:100%;pointer-events:none;position:absolute}.ec-timeline .ec-sidebar{border-right-style:solid;border:1px solid var(--ec-border-color);border-right:1px var(--ec-border-color);padding:0}.ec-timeline .ec-sidebar .ec-sidebar-title{border-bottom:1px solid var(--ec-border-color);box-sizing:initial;flex-shrink:0}.ec-timeline .ec-sidebar .ec-content{flex:1;overflow:hidden}.ec-timeline .ec-sidebar .ec-resource{flex-shrink:0;padding:0 8px}.ec-timeline .ec-sidebar .ec-resource:not(:last-child){border-bottom:1px solid var(--ec-border-color);flex-grow:0}.ec-timeline .ec-sidebar .ec-resource:last-child{flex-basis:100%!important}.ec-timeline .ec-sidebar .ec-resource span{padding-top:8px}.ec-time-grid .ec-body .ec-event{position:absolute}.ec-time-grid .ec-body .ec-event-title{position:sticky;top:0}.ec-time-grid .ec-body .ec-resizer{bottom:0;cursor:ns-resize;height:50%;left:0;max-height:8px;right:0}.ec-time-grid .ec-bg-event{width:100%;z-index:1}.ec-time-grid .ec-time{line-height:24px;position:relative;text-align:right;top:-12px}.ec-time-grid .ec-all-day .ec-time,.ec-time-grid .ec-header .ec-time{height:0;overflow-y:hidden;visibility:hidden}.ec-time-grid .ec-line,.ec-time-grid .ec-time{height:24px}.ec-time-grid .ec-lines{width:8px}.ec-time-grid .ec-line:not(:first-child):after{border-bottom:1px solid var(--ec-border-color);content:"";pointer-events:none;position:absolute;width:100%}.ec-time-grid .ec-body:not(.ec-compact) .ec-line:nth-child(2n):after{border-bottom-style:dotted}.ec-time-grid .ec-sidebar-title{height:0;overflow-y:hidden;text-align:right;visibility:hidden}.ec-time-grid .ec-all-day .ec-sidebar-title{height:auto;padding:8px 0;visibility:visible}.ec-day-grid .ec-body{flex:1 1 auto}.ec-day-grid .ec-body .ec-day{min-height:5em;position:relative}.ec-day-grid .ec-content{flex-direction:column;height:100%}.ec-day-grid .ec-uniform .ec-content{overflow:hidden}.ec-day-grid .ec-uniform .ec-days{flex:1 1 0%;min-height:0}.ec-day-grid .ec-uniform .ec-day{min-height:0}.ec-day-grid .ec-day:first-child{border-left:none}.ec-day-grid .ec-day-head{border:none;display:block;padding:4px 4px 3px;text-align:right}.ec-day-grid .ec-day-foot{bottom:0;font-size:.85em;padding:2px;position:absolute}.ec-day-grid .ec-day-foot a{cursor:pointer}.ec-day,.ec-days,.ec-resource{flex:1 1 0;max-width:100%;min-width:0}.ec{background-color:var(--ec-bg-color);color:var(--ec-text-color);display:flex;flex-direction:column;-webkit-tap-highlight-color:rgba(0,0,0,0)}.ec ::-webkit-scrollbar{background-color:transparent}.ec ::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:var(--ec-border-color);border:4px solid transparent;border-radius:8px;box-shadow:none;min-height:40px}.ec :hover::-webkit-scrollbar-thumb{background-color:var(--ec-accent-color)}.ec-hidden-scroll{display:none;flex-shrink:0;overflow-y:scroll;visibility:hidden}.ec-with-scroll .ec-hidden-scroll{display:block}.ec-toolbar{align-items:center;display:flex;flex:0 0 auto;justify-content:space-between;margin-bottom:1em}.ec-toolbar>*{margin-bottom:-.5em}.ec-toolbar>*>*{margin-bottom:.5em}.ec-toolbar>*>:not(:last-child){margin-right:.75em}.ec-title{margin:0}.ec-button{background-color:var(--ec-button-bg-color);border:1px solid var(--ec-button-border-color);border-radius:.25rem;font-size:1rem;line-height:1.5;padding:.375rem .75rem}.ec-button:not(:disabled){color:var(--ec-button-text-color);cursor:pointer}.ec-button.ec-active,.ec-button:not(:disabled):hover{background-color:var(--ec-button-active-bg-color);border-color:var(--ec-button-active-border-color);color:var(--ec-button-active-text-color);z-index:1}.ec-button-group{display:inline-flex}.ec-button-group .ec-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.ec-button-group .ec-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.ec-icon{display:inline-block;width:1em}.ec-icon.ec-next:after,.ec-icon.ec-prev:after{border-right:2px solid;border-top:2px solid;content:"";display:inline-block;height:.5em;position:relative;width:.5em}.ec-icon.ec-prev:after{transform:rotate(-135deg) translate(-2px,2px)}.ec-icon.ec-next:after{transform:rotate(45deg) translate(-2px,2px)}.ec-all-day,.ec-body,.ec-day,.ec-day-head,.ec-days,.ec-header{border:1px solid var(--ec-border-color)}.ec-header{display:flex;flex-shrink:0}.ec-header .ec-resource{flex-direction:column}.ec-header .ec-resource .ec-days{border-top-style:solid}.ec-header .ec-days{border-bottom:none}.ec-header .ec-day{line-height:24px;min-height:24px;overflow:hidden;text-align:center;text-overflow:ellipsis}.ec-all-day{border-top:none;flex-shrink:0}.ec-all-day .ec-days{border-bottom:none}.ec-all-day .ec-day{padding-bottom:4px;position:relative}.ec-body{overflow-x:hidden;overflow-y:auto;position:relative}.ec:not(.ec-list) .ec-body{border-top:none}.ec-sidebar{flex:0 0 auto;flex-direction:column;max-width:100%;padding:0 4px 0 8px;width:auto}.ec-content,.ec-sidebar{display:flex}.ec-list .ec-content{flex-direction:column}.ec-days,.ec-resource{display:flex}.ec-days{border-style:none none solid}.ec-days:last-child{border-bottom:none}.ec-day-grid .ec-days,.ec-resource .ec-days{flex:1 0 auto}.ec-day{border-style:none none none solid}.ec-day.ec-today{background-color:var(--ec-today-bg-color)}.ec-day.ec-highlight{background-color:var(--ec-highlight-color)}.ec-day.ec-other-month .ec-day-head{opacity:.3}.ec-list .ec-day{border:none}.ec-list .ec-day-head{background-color:var(--ec-list-day-bg-color);border-style:solid none;margin:-1px 0 0;padding:8px 14px;position:sticky;top:0;z-index:2}.ec-list .ec-day:first-child .ec-day-head{border-top:none}.ec-list .ec-day-side{float:right}.ec-list .ec-no-events{padding:5em 0;text-align:center}.ec-events{margin:0 6px 0 0}.ec-events.ec-preview,.ec-time-grid .ec-events{position:relative}.ec-all-day .ec-events,.ec-day-grid .ec-events{display:flow-root}.ec-event{background-color:var(--ec-event-bg-color);border-radius:3px;box-shadow:0 0 1px 0 var(--ec-border-color);box-sizing:border-box;color:var(--ec-event-text-color);display:flex;font-size:.85em;line-height:1.5;padding:2px;z-index:1}.ec-all-day .ec-event,.ec-day-grid .ec-event{position:relative}.ec-list .ec-event{background-color:transparent;border-radius:0;color:inherit;flex-direction:row;padding:8px 14px}.ec-event.ec-preview{opacity:.8;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:1000}.ec-event.ec-pointer{box-shadow:none;color:inherit;display:flex;pointer-events:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:0}.ec-event-body{display:flex;flex-direction:column;width:100%}.ec-all-day .ec-event-body,.ec-day-grid .ec-event-body,.ec-timeline .ec-event-body{flex-direction:row}.ec-event-tag{border-radius:2px;margin-right:8px;width:4px}.ec-event-time{flex-shrink:0;margin:0 0 1px;overflow:hidden;white-space:nowrap}.ec-day-grid .ec-event-time,.ec-timeline .ec-event-time{margin:0 3px 0 0;max-width:100%;text-overflow:ellipsis}.ec-event-title{font-weight:inherit;margin:unset;overflow:hidden}.ec-all-day .ec-event-title,.ec-day-grid .ec-event-title,.ec-timeline .ec-event-title{min-height:1.5em;text-overflow:ellipsis;white-space:nowrap}.ec-list .ec-event-title{font-size:1rem}.ec-draggable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-ghost{opacity:.5;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-bg-events{position:relative}.ec-all-day .ec-bg-events,.ec-day-grid .ec-bg-events{inset:0;position:absolute}.ec-bg-event{background-color:var(--ec-bg-event-color);opacity:var(--ec-bg-event-opacity);position:absolute}.ec-all-day .ec-bg-event,.ec-day-grid .ec-bg-event{height:100%;z-index:auto}.ec-time{white-space:nowrap}.ec-popup{background-color:var(--ec-popup-bg-color);border:1px solid var(--ec-border-color);border-radius:6px;box-shadow:0 1px 3px 0 hsla(var(--ec-hs),50%,.15),0 4px 8px 3px hsla(var(--ec-hs),50%,.15);display:flex;flex-direction:column;min-width:180px;outline:1px solid transparent;padding:8px 10px 14px;position:absolute;top:0;width:110%;z-index:1010}.ec-popup .ec-day-head{display:flex;justify-content:space-between;text-align:left}.ec-popup .ec-day-head a{cursor:pointer;font-size:1.5em;line-height:.8}.ec-popup .ec-events{margin:0;min-height:0;overflow:auto}.ec-extra{height:100%;margin-left:-6.5px;overflow:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-now-indicator{border-top:2px solid var(--ec-now-indicator-color);pointer-events:none;position:absolute;width:100%;z-index:1005}.ec-now-indicator:before{background:var(--ec-now-indicator-color);border-radius:50%;content:"";height:12px;margin-top:-7px;pointer-events:none;position:absolute;width:12px}.ec-resizer{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-all-day .ec-resizer,.ec-day-grid .ec-resizer,.ec-timeline .ec-resizer{bottom:0;cursor:ew-resize;max-width:8px;right:0;top:0;width:50%}.ec-dragging{cursor:pointer!important}.ec-resizing-y{cursor:ns-resize!important}.ec-resizing-x{cursor:ew-resize!important} \ No newline at end of file +.ec{color-scheme:light;--ec-h:0;--ec-s:0%;--ec-l-300:91.00%;--ec-l-500:83.50%;--ec-l-600:78.40%;--ec-l-700:71.40%;--ec-bg-fallback-color:#fff;--ec-hs:var(--ec-h),var(--ec-s);--ec-color-300:hsl(var(--ec-hs),var(--ec-l-300));--ec-color-500:hsl(var(--ec-hs),var(--ec-l-500));--ec-color-600:hsl(var(--ec-hs),var(--ec-l-600));--ec-color-700:hsl(var(--ec-hs),var(--ec-l-700));--ec-border-color:var(--ec-color-500);--ec-accent-color:var(--ec-color-600);--ec-button-bg-color:var(--ec-bg-color);--ec-button-border-color:var(--ec-color-600);--ec-button-text-color:var(--ec-text-color);--ec-button-active-bg-color:var(--ec-color-300);--ec-button-active-border-color:var(--ec-color-700);--ec-button-active-text-color:var(--ec-button-text-color);--ec-event-bg-color:#039be5;--ec-event-text-color:#fff;--ec-bg-event-color:var(--ec-color-500);--ec-bg-event-opacity:0.3;--ec-list-day-bg-color:var(--ec-bg-color,var(--ec-bg-fallback-color));--ec-today-bg-color:rgba(255,220,40,.15);--ec-highlight-color:rgba(188,232,241,.3);--ec-popup-bg-color:var(--ec-bg-color,var(--ec-bg-fallback-color));--ec-now-indicator-color:#ea4335}.ec-dark .ec{color-scheme:dark;--ec-h:215;--ec-s:15%;--ec-l-300:25.50%;--ec-l-500:42.40%;--ec-l-600:49.80%;--ec-l-700:57.30%;--ec-bg-fallback-color:#22272e}@media(prefers-color-scheme:dark){.ec-auto-dark .ec{color-scheme:dark;--ec-h:215;--ec-s:15%;--ec-l-300:25.50%;--ec-l-500:42.40%;--ec-l-600:49.80%;--ec-l-700:57.30%;--ec-bg-fallback-color:#22272e}}.ec-timeline .ec-container{display:flex;flex:1 1 0%;min-height:0}.ec-timeline .ec-main{display:flex;flex-direction:column;min-width:0}.ec-timeline .ec-content{flex-direction:column}.ec-timeline .ec-body{flex:1 1 auto;overflow:auto}.ec-timeline .ec-body .ec-content{min-height:100%;min-width:-moz-max-content;min-width:max-content;position:relative}.ec-timeline .ec-body .ec-days{flex-shrink:0}.ec-timeline .ec-body .ec-days:not(:last-child){flex-grow:0}.ec-timeline .ec-header{overflow:hidden}.ec-timeline .ec-header .ec-days{min-width:-moz-max-content;min-width:max-content}.ec-timeline .ec-header .ec-day{display:flex;flex-basis:auto;flex-direction:column}.ec-timeline .ec-day,.ec-timeline .ec-header .ec-day:first-child .ec-day-head,.ec-timeline .ec-header .ec-day:first-child .ec-time:first-child{border:none}.ec-timeline .ec-day-head{border-style:none none none solid}.ec-timeline .ec-times{border-top:1px solid var(--ec-border-color);display:flex}.ec-timeline .ec-time{border-left:1px solid var(--ec-border-color);box-sizing:border-box;font-size:.95em;min-height:24px;overflow:hidden;text-overflow:ellipsis}.ec-timeline .ec-line,.ec-timeline .ec-time{width:72px}.ec-timeline .ec-events{height:100%;margin:0;position:relative}.ec-timeline .ec-event{position:absolute}.ec-timeline .ec-bg-event{height:100%;z-index:auto}.ec-timeline .ec-lines{display:flex}.ec-timeline .ec-line:not(:first-child):after{border-left:1px solid var(--ec-border-color);content:"";height:100%;pointer-events:none;position:absolute}.ec-timeline .ec-sidebar{border-right-style:solid;border:1px solid var(--ec-border-color);border-right:1px var(--ec-border-color);padding:0}.ec-timeline .ec-sidebar .ec-sidebar-title{border-bottom:1px solid var(--ec-border-color);box-sizing:initial;flex-shrink:0}.ec-timeline .ec-sidebar .ec-content{flex:1;overflow:hidden}.ec-timeline .ec-sidebar .ec-resource{flex-shrink:0;padding:0 8px}.ec-timeline .ec-sidebar .ec-resource:not(:last-child){border-bottom:1px solid var(--ec-border-color);flex-grow:0}.ec-timeline .ec-sidebar .ec-resource:last-child{flex-basis:100%!important}.ec-timeline .ec-sidebar .ec-resource span{padding-top:8px}.ec-time-grid .ec-body .ec-event{position:absolute}.ec-time-grid .ec-body .ec-event-title{position:sticky;top:0}.ec-time-grid .ec-body .ec-resizer{bottom:0;cursor:ns-resize;height:50%;left:0;max-height:8px;right:0}.ec-time-grid .ec-bg-event{width:100%;z-index:1}.ec-time-grid .ec-time{line-height:24px;position:relative;text-align:right;top:-12px}.ec-time-grid .ec-all-day .ec-time,.ec-time-grid .ec-header .ec-time{height:0;overflow-y:hidden;visibility:hidden}.ec-time-grid .ec-line,.ec-time-grid .ec-time{height:24px}.ec-time-grid .ec-lines{width:8px}.ec-time-grid .ec-line:not(:first-child):after{border-bottom:1px solid var(--ec-border-color);content:"";pointer-events:none;position:absolute;width:100%}.ec-time-grid .ec-body:not(.ec-compact) .ec-line:nth-child(2n):after{border-bottom-style:dotted}.ec-time-grid .ec-sidebar-title{height:0;overflow-y:hidden;text-align:right;visibility:hidden}.ec-time-grid .ec-all-day .ec-sidebar-title{height:auto;padding:8px 0;visibility:visible}.ec-day-grid .ec-body{flex:1 1 auto}.ec-day-grid .ec-body .ec-day{min-height:5em;position:relative}.ec-day-grid .ec-content{flex-direction:column;height:100%}.ec-day-grid .ec-uniform .ec-content{overflow:hidden}.ec-day-grid .ec-uniform .ec-days{flex:1 1 0%;min-height:0}.ec-day-grid .ec-uniform .ec-day{min-height:0}.ec-day-grid .ec-day:first-child{border-left:none}.ec-day-grid .ec-day-head{border:none;display:block;padding:4px 4px 3px;text-align:right}.ec-day-grid .ec-day-foot{bottom:0;font-size:.85em;padding:2px;position:absolute}.ec-day-grid .ec-day-foot a{cursor:pointer}.ec-day,.ec-days,.ec-resource{flex:1 1 0;max-width:100%;min-width:0}.ec{background-color:var(--ec-bg-color);color:var(--ec-text-color);display:flex;flex-direction:column;-webkit-tap-highlight-color:rgba(0,0,0,0)}.ec ::-webkit-scrollbar{background-color:transparent}.ec ::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:var(--ec-border-color);border:4px solid transparent;border-radius:8px;box-shadow:none;min-height:40px}.ec :hover::-webkit-scrollbar-thumb{background-color:var(--ec-accent-color)}.ec-hidden-scroll{display:none;flex-shrink:0;overflow-y:scroll;visibility:hidden}.ec-with-scroll .ec-hidden-scroll{display:block}.ec-toolbar{align-items:center;display:flex;flex:0 0 auto;justify-content:space-between;margin-bottom:1em}.ec-toolbar>*{margin-bottom:-.5em}.ec-toolbar>*>*{margin-bottom:.5em}.ec-toolbar>*>:not(:last-child){margin-right:.75em}.ec-title{margin:0}.ec-button{background-color:var(--ec-button-bg-color);border:1px solid var(--ec-button-border-color);border-radius:.25rem;font-size:1rem;line-height:1.5;padding:.375rem .75rem}.ec-button:not(:disabled){color:var(--ec-button-text-color);cursor:pointer}.ec-button.ec-active,.ec-button:not(:disabled):hover{background-color:var(--ec-button-active-bg-color);border-color:var(--ec-button-active-border-color);color:var(--ec-button-active-text-color);z-index:1}.ec-button-group{display:inline-flex}.ec-button-group .ec-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.ec-button-group .ec-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.ec-icon{display:inline-block;width:1em}.ec-icon.ec-next:after,.ec-icon.ec-prev:after{border-right:2px solid;border-top:2px solid;content:"";display:inline-block;height:.5em;position:relative;width:.5em}.ec-icon.ec-prev:after{transform:rotate(-135deg) translate(-2px,2px)}.ec-icon.ec-next:after{transform:rotate(45deg) translate(-2px,2px)}.ec-all-day,.ec-body,.ec-day,.ec-day-head,.ec-days,.ec-header{border:1px solid var(--ec-border-color)}.ec-header{display:flex;flex-shrink:0}.ec-header .ec-resource{flex-direction:column}.ec-header .ec-resource .ec-days{border-top-style:solid}.ec-header .ec-days{border-bottom:none}.ec-header .ec-day{line-height:24px;min-height:24px;overflow:hidden;text-align:center;text-overflow:ellipsis}.ec-all-day{border-top:none;flex-shrink:0}.ec-all-day .ec-days{border-bottom:none}.ec-all-day .ec-day{padding-bottom:4px;position:relative}.ec-body{overflow-x:hidden;overflow-y:auto;position:relative}.ec:not(.ec-list) .ec-body{border-top:none}.ec-sidebar{flex:0 0 auto;flex-direction:column;max-width:100%;padding:0 4px 0 8px;width:auto}.ec-content,.ec-sidebar{display:flex}.ec-list .ec-content{flex-direction:column}.ec-days,.ec-resource{display:flex}.ec-days{border-style:none none solid}.ec-days:last-child{border-bottom:none}.ec-day-grid .ec-days,.ec-resource .ec-days{flex:1 0 auto}.ec-day{border-style:none none none solid}.ec-day.ec-today{background-color:var(--ec-today-bg-color)}.ec-day.ec-highlight{background-color:var(--ec-highlight-color)}.ec-day.ec-other-month .ec-day-head{opacity:.3}.ec-list .ec-day{border:none}.ec-list .ec-day-head{background-color:var(--ec-list-day-bg-color);border-style:solid none;margin:-1px 0 0;padding:8px 14px;position:sticky;top:0;z-index:2}.ec-list .ec-day:first-child .ec-day-head{border-top:none}.ec-list .ec-day-side{float:right}.ec-list .ec-no-events{padding:5em 0;text-align:center}.ec-events{margin:0 6px 0 0}.ec-events.ec-preview,.ec-time-grid .ec-events{position:relative}.ec-all-day .ec-events,.ec-day-grid .ec-events{display:flow-root}.ec-event{background-color:var(--ec-event-bg-color);border-radius:3px;box-shadow:0 0 1px 0 var(--ec-border-color);box-sizing:border-box;color:var(--ec-event-text-color);display:flex;font-size:.85em;line-height:1.5;padding:2px;z-index:1}.ec-all-day .ec-event,.ec-day-grid .ec-event{position:relative}.ec-list .ec-event{background-color:transparent;border-radius:0;color:inherit;flex-direction:row;padding:8px 14px}.ec-event.ec-preview{opacity:.8;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:1000}.ec-event.ec-pointer{box-shadow:none;color:inherit;display:flex;pointer-events:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:0}.ec-event-body{display:flex;flex-direction:column;width:100%}.ec-all-day .ec-event-body,.ec-day-grid .ec-event-body,.ec-timeline .ec-event-body{flex-direction:row}.ec-event-tag{border-radius:2px;margin-right:8px;width:4px}.ec-event-time{flex-shrink:0;margin:0 0 1px;overflow:hidden;white-space:nowrap}.ec-day-grid .ec-event-time,.ec-timeline .ec-event-time{margin:0 3px 0 0;max-width:100%;text-overflow:ellipsis}.ec-event-title{font-weight:inherit;margin:unset;overflow:hidden}.ec-all-day .ec-event-title,.ec-day-grid .ec-event-title,.ec-timeline .ec-event-title{min-height:1.5em;text-overflow:ellipsis;white-space:nowrap}.ec-list .ec-event-title{font-size:1rem}.ec-draggable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-ghost{opacity:.5;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-bg-events{position:relative}.ec-all-day .ec-bg-events,.ec-day-grid .ec-bg-events{inset:0;position:absolute}.ec-bg-event{background-color:var(--ec-bg-event-color);opacity:var(--ec-bg-event-opacity);position:absolute}.ec-all-day .ec-bg-event,.ec-day-grid .ec-bg-event{height:100%;z-index:auto}.ec-time{white-space:nowrap}.ec-popup{background-color:var(--ec-popup-bg-color);border:1px solid var(--ec-border-color);border-radius:6px;box-shadow:0 1px 3px 0 hsla(var(--ec-hs),50%,.15),0 4px 8px 3px hsla(var(--ec-hs),50%,.15);display:flex;flex-direction:column;min-width:180px;outline:1px solid transparent;padding:8px 10px 14px;position:absolute;top:0;width:110%;z-index:1010}.ec-popup .ec-day-head{display:flex;justify-content:space-between;text-align:left}.ec-popup .ec-day-head a{cursor:pointer;font-size:1.5em;line-height:.8}.ec-popup .ec-events{margin:0;min-height:0;overflow:auto}.ec-extra{height:100%;margin-left:-6.5px;overflow:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-now-indicator{border-top:2px solid var(--ec-now-indicator-color);pointer-events:none;position:absolute;width:100%;z-index:1005}.ec-now-indicator:before{background:var(--ec-now-indicator-color);border-radius:50%;content:"";height:12px;margin-top:-7px;pointer-events:none;position:absolute;width:12px}.ec-resizer{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-all-day .ec-resizer,.ec-day-grid .ec-resizer,.ec-timeline .ec-resizer{bottom:0;cursor:ew-resize;max-width:8px;right:0;top:0;width:50%}.ec-dragging{cursor:pointer!important}.ec-resizing-y{cursor:ns-resize!important}.ec-resizing-x{cursor:ew-resize!important} + +/* WPB Schedules */ + +#app-schedules .app-front-admin h2 { + margin: 0; +} + +#app-schedules .ec-week-view .ec-event.long, +#app-schedules .ec-day-view .ec-event.long { + display:none; +} + +.app-schedules-group { + position: relative; + margin-left: -20px; +} + +.app-account-page .app-schedules-group { + margin-left: 0; +} + +.app-schedules-group #app-navbar { + z-index: 100; + overflow: hidden; +} + +#schedules-filter .app-dash-title { + display: none; +} + +#schedules-filter div.app-actions { + justify-content: space-around; + gap: 10px 20px; +} + +#schedules-filter .app-filter-ms { + width: 180px; + max-width: 400px; +} + +#schedules-filter .app-filter-stats { + width: 150px; + max-width: 200px; +} + +#schedules-filter .app-filter-weekdays { + width: 120px; + max-width: 200px; +} + +#schedules-filter button.ui-multiselect { + width: 100%; +} + +.app-filter-services.app-filter-ms { + flex-grow: 2; +} + +.app-filter-workers.app-filter-ms { + flex-grow: 0.5; +} + +.has-color .ui-multiselect-checkboxes label span { + margin-right: auto; +} + +.has-color .ui-multiselect-checkboxes label { + display: flex; + padding: 3px 1px 3px 3px; + text-indent: 0; + justify-content: space-between; +} + +.has-color .ui-multiselect-checkboxes a.pickcolor { + width: 20px; + height: 15px; + padding: 0; + margin-right: 3px; + cursor: default; +} + +.has-color .ui-multiselect-checkboxes input { + align-self: center; +} + +body[class*="schedules"] .ui-multiselect-header.ui-widget-header, +body.app-account-schedules .ui-multiselect-header.ui-widget-header { + font-size: 11px; +} + +body[class*="schedules"] .ui-multiselect-header.ui-widget-header a, +body.app-account-schedules .ui-multiselect-header.ui-widget-header a { + display: flex; + align-items: center; +} + +body[class*="schedules"] .ui-multiselect-menu, +body.app-account-schedules .ui-multiselect-menu { + z-index: 1010; +} + +body[class*="schedules"] .app-users-quick-book.ui-multiselect-menu, +body.app-account-schedules .app-users-quick-book.ui-multiselect-menu { + z-index: 10002; + font-size: 11.5px; +} + +.bp-user .app-users-quick-book.ui-multiselect-menu span { + font-size: 11.5px !important; +} + +#schedules-filter .app-schedule-picker { + width: 120px; +} + +#schedules-filter .app-page .tablenav .actions { + padding-right: 20px; +} + +.app-front-admin #schedules-filter div.app-actions { + margin-top: 10px; +} + +.app-schedule-select.ui-widget { + font-size: 13px; +} + +#schedules-filter .app-schedule-start { + position: absolute; + z-index:101; + opacity: 0; + width: 120px; + font-size: 13px; + height: 30px; + min-height: 30px; + line-height: 30px; +} + +#schedules-filter .app-filter-submit-btn { + height: 30px; + min-height: 30px; + line-height: 30px; +} + +#schedules-filter .app-schedule-start-alt { + z-index:100; + width: 120px; + font-size: 13px; + height: 30px; + min-height: 30px; + line-height: 30px; +} + +@media screen and (max-width: 782px) { + #schedules-filter input { + min-height: 30px; + } +} + +#app-schedules { + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: transparent; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: transparent; + margin-left: 20px; +} + +.app-account-page #app-schedules { + margin-left: 0; +} + +#app-schedules .app-sched { + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, .125); + border-radius: .25rem; + margin-top: 0; + padding: 0; + max-width: none; + box-shadow: none; + box-sizing: border-box; +} + +#app-schedules .app-sched-body { + flex: 1 1 auto; + min-height: 1px; + padding: 1.25rem; +} + +#app-schedules .ec-toolbar { + flex-direction: row-reverse; +} + +#app-schedules .ec-start { + display: flex; + flex-direction: row-reverse; +} + +#app-schedules .ec-toolbar>*>:not(:last-child) { + margin-right: 0; +} + +#app-schedules .btn-group, +#app-schedules .btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} + +#app-schedules .btn-default:not(:disabled):not(.disabled).active, +#app-schedules .btn-default:not(:disabled):not(.disabled):active { + color: #212529; + background-color: rgb(229.5, 229.5, 229.5); + border-color: rgb(169.6773255814, 180.125, 190.5726744186); +} + +#app-schedules .btn-group>.btn-group:not(:last-child)>.btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +#app-schedules .btn-default:hover { + color: #212529; + background-color: rgb(235.875, 235.875, 235.875); + border-color: rgb(176.9418604651, 186.5, 196.0581395349); +} + +#app-schedules .btn-group-vertical>.btn, +#app-schedules .btn-group>.btn { + position: relative; + flex: 1 1 auto; +} + +#app-schedules .btn:hover { + color: #212529; + text-decoration: none; +} + +#app-schedules .btn { + white-space: nowrap; +} + +#app-schedules .btn { + display: inline-block; + font-weight: 400; + color: #212529; + text-align: center; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: .375rem .75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: .25rem; + transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; +} + +#app-schedules .btn-default { + color: #212529; + background-color: #fff; + border-color: #ced4da; +} + +#app-schedules .ec .ec-toolbar>*>:not(:first-child) { + margin-left: .75em; +} + +#app-schedules .ec .ec-toolbar>*>:not(:first-child) { + margin-right: .75em; +} + +#app-schedules .btn:not(:disabled) { + cursor: pointer; +} + +#app-schedules .ec .ec-toolbar>*>* { + margin-bottom: .5em; +} + +#app-schedules .btn-default:hover { + color: #212529; + background-color: rgb(235.875, 235.875, 235.875); + border-color: rgb(176.9418604651, 186.5, 196.0581395349); +} + +#app-schedules .ec-event:not(.ec-pointer) { + cursor: pointer; + color: inherit; + padding: 2px 2px 2px 5px; + border-radius: 8px; + border: 1px solid #f0f0f0; + box-shadow: -.5px 0 0 #f0f0f0; + overflow: hidden; + display: flex; +} + +#app-schedules .ec-week-view .ec-event, +#app-schedules .ec-day-view .ec-event { + /* font-size: 12px; */ +} + +#app-schedules .ec-month-view .ec-event:not(.ec-pointer) { + outline: 2px solid #f0f0f0; +} + +#app-schedules .ec-events { + cursor: cell; +} + +#app-schedules .ec:not(.ec-month-view) .ec-events { + margin-right: 0; +} + +#app-schedules .ec-month-view .ec-event, +#app-schedules .ec-week-view:not(.ec-list) .ec-event.long, +#app-schedules .ec-day-view:not(.ec-list) .ec-event.long, +#app-schedules .ec-timeline .ec-event { + max-height: 48px; +} + +#app-schedules .ec-month-view .ec-event { + left: 3px; +} + +#app-schedules .ec-month-view .ec-events:not(.ec-preview) .ec-event:hover, +#app-schedules .ec-week-view .ec-events:not(.ec-preview) .ec-event.long:hover, +#app-schedules .ec-day-view .ec-events:not(.ec-preview) .ec-event.long:hover { + max-height: 100%; +} + +#app-schedules .ec:not(.ec-timeline) .ec-events:not(.ec-preview) .ec-event:hover { + height: auto !important; + z-index: 99 !important; +} + +#app-schedules .ec:not(.ec-timeline) .ec-events:not(.ec-preview) .ec-event:not(.long):hover { + width: max(100% , 144px) !important; +} + +#app-schedules .ec:not(.ec-timeline) .ec-events:not(.ec-preview) .ec-event.long:hover { + min-width: 144px !important; +} + +#app-schedules .ec.ec-timeline .ec-events.ec-preview .ec-event:hover { + width: 100% !important; +} + +#app-schedules .ec-timeline .ec-event:hover { + max-height: unset; +} + +#app-schedules .ec-timeline .ec-event:not(.long):hover { + width: 144px !important; +} + +#app-schedules .ec-resource, +#app-schedules .ec-timeline .ec-events { + min-height: 48px; +} + +#app-schedules .ec-resource, +#app-schedules .ec-timeline .ec-days { + flex-basis: 50px !important; +} + +#app-schedules .ec-event-body { + display: block; +} + +#app-schedules .ec-event-time { + position: relative; + font-weight: 700; + line-height: 1.3em; + margin: 0 3px 0 0; + max-width: 100%; + text-overflow: ellipsis; +} + +#app-schedules .ec-event-title { + position: relative; + position: sticky; + line-height: 1.3em; + min-height: 1.5em; + text-overflow: ellipsis; + white-space: nowrap; +} + +#app-schedules .ec-month-view .ec-event-time, +#app-schedules .ec-month-view .ec-event-title, +#app-schedules .ec-resource-day-view .ec-event-time, +#app-schedules .ec-resource-day-view .ec-event-title { + line-height: 1.5em; +} + +#app-schedules .ec-week-view .ec-event-time, +#app-schedules .ec-week-view .ec-event-title { + line-height: 1.65em; +} + +#app-schedules .ec-timeline .ec-body { + overflow-x: visible; + overflow-y: hidden; +} + +.app-js-schedules .ec-bg-event { + cursor: not-allowed; +} + +#app-schedules .ec-pointer, +.app-js-schedules .ec-extra { + cursor: cell !important; +} + +#app-schedules .ec-resource span { + padding-top: 0; +} + +#app-schedules .ec-resource > span { + display: flex; + justify-content: space-between; + gap: 5px; + width: 100%; + max-width: 200px; + margin: auto; + padding-top: 4px; +} + +#app-schedules .ec-resource .app-ec-title { + max-width: 150px; + line-height: 18px; + align-self: center; +} + +#app-schedules .app-ec-img img.avatar { + border-radius: 5px; +} Only in /home/deploy/wp-safety.org/data/plugin-versions/wp-base-booking-of-appointments-services-and-events/6.0.0/css: stripe.css Only in /home/deploy/wp-safety.org/data/plugin-versions/wp-base-booking-of-appointments-services-and-events/5.9.0/css: updating.css @@ -555,7 +555,7 @@ wpb_admin_access_check( 'manage_tools' ); ?> -<div class="wrap app-tools"> +<div class="wrap app-page app-tools"> <h2 class="app-dashicons-before dashicons-admin-tools"><?php echo __('Tools', 'wp-base' ); ?></h2> <h3 class="nav-tab-wrapper"><?php @@ -1488,7 +1488,7 @@ /* Services */ $html .= wpb_wrap_field( 'service', $booking->is_event() ? __('Event', 'wp-base') : __('Service', 'wp-base'), - $controller->select_service( !$app_id ), + $controller->select_service( false, !$app_id ), apply_filters( 'app_inline_edit_service_helptip', '', $booking, $controller ) ); @@ -1993,7 +1993,7 @@ $out = array( 'locations_sel' => $controller->select_location(), - 'services_sel' => $controller->select_service( ! $app_id ), + 'services_sel' => $controller->select_service( false, ! $app_id ), 'workers_sel' => wpb_is_admin_user() ? $controller->select_worker() : $controller->select_self_worker(), ); @@ -2014,7 +2014,7 @@ $out = array_merge( $out, array( 'price' => $slot->get_subtotal() + $slot->get_fee(), 'deposit' => $slot->get_deposit() ) ); } - $out = apply_filters( 'app_inline_edit_update', $out, $booking, $old_booking, $controller, $this ); + $out = apply_filters( 'app_inline_edit_update', $out, $booking, $old_booking, $controller ); die( json_encode( $out ) ); } @@ -2123,7 +2123,7 @@ $booking->check_update( $old_booking ); } - do_action( 'app_inline_edit_save_before_save', $booking, $old_booking, $this ); + do_action( 'app_inline_edit_save_before_save', $booking, $old_booking ); $updated = $inserted = null; $changed = false; @@ -2170,12 +2170,12 @@ $changed = true; } - $changed = apply_filters( 'app_inline_edit_save', $changed, $booking, $old_booking, $this ); + $changed = apply_filters( 'app_inline_edit_save', $changed, $booking, $old_booking ); if ( $updated ) { - do_action( 'app_inline_edit_updated', $booking, $old_booking, $this ); + do_action( 'app_inline_edit_updated', $booking, $old_booking ); } else if ( $inserted ) { - do_action( 'app_inline_edit_new_booking', $booking, $old_booking, $this ); + do_action( 'app_inline_edit_new_booking', $booking, $old_booking ); } $email_sent = $this->send_email( $booking ); @@ -22,10 +22,16 @@ * @return object WpB_Controller object */ function wpb_prepare_booking( &$booking ) { + + if ( wpb_is_admin_user() ) { + $hier_forced = false; + } else { + $hier_forced = str_replace( 'W', '', wpb_setting( 'lsw_priority', WPB_DEFAULT_LSW_PRIORITY ) ) == 'LS' ? 'WLS' : 'WSL'; + } if ( $booking->get_ID() ) { - $hier_forced = str_replace( 'W', '', wpb_setting( 'lsw_priority', WPB_DEFAULT_LSW_PRIORITY ) ) == 'LS' ? 'WLS' : 'WSL'; - $controller = new WpB_Controller( $booking, wpb_controller_order_by( $booking ), ( wpb_is_admin_user() ? false : $hier_forced ) ); + + $controller = new WpB_Controller( $booking, wpb_controller_order_by( $booking ), $hier_forced ); } else { if ( ! empty( $_REQUEST['add_new_event'] ) ) { $booking->set_as_event(); @@ -42,7 +48,7 @@ $booking->set_status( 'confirmed' ); $booking->set_payment_method(''); - $controller = new WpB_Controller( $booking, wpb_controller_order_by( $booking ) ); + $controller = new WpB_Controller( $booking, wpb_controller_order_by( $booking ), $hier_forced ); } else { /* Add New */ $controller = wpb_init_controller(); @@ -43,6 +43,14 @@ } /** + * Get a list of editable fields keys + * @return array + */ + public static function editable_fields() { + return apply_filters( 'app_editable_fields_selections', array_merge( array('location','service','worker','date','time'), BASE()->get_user_fields() ) ); + } + + /** * Save admin settings */ public function save_settings() { @@ -87,6 +95,20 @@ $options['cancel_limit'] = preg_replace( '/[^0-9]/', '', $_POST['cancel_limit'] ); $options['cancel_page'] = isset( $_POST['cancel_page'] ) ? $_POST['cancel_page'] : ''; + $options['allow_edit'] = $_POST['allow_edit']; + $options['edit_limit'] = preg_replace( '/[^0-9]/', '', $_POST['edit_limit'] ); + $options['edit_upper_limit'] = preg_replace( '/[^0-9]/', '', $_POST['edit_upper_limit'] ); + + /* Which fields can be edited */ + $temp = array(); + foreach ( self::editable_fields() as $m ) { + if ( isset( $_POST['editable_'.$m ] ) ) { + $temp[] = $m; + } + } + + $options["editable"] = implode( ',', $temp ); + } else if ( 'save_global_advanced' == $_POST['action_app'] ) { $settings_changed = true; @@ -111,6 +133,7 @@ : $_POST['description_post_type']; $options['person_type_template'] = wp_unslash( $_POST['person_type_template'] ); $options['refresh_url'] = trim( $_POST['refresh_url'] ); + $options['account_page'] = $_POST['account_page']; $options['auto_delete'] = $_POST['auto_delete']; $options['auto_delete_time'] = preg_replace( '/[^0-9]/', '', $_POST['auto_delete_time'] ); @@ -120,10 +143,13 @@ $options['admin_toolbar'] = $_POST['admin_toolbar']; $options['records_per_page'] = preg_replace( '/[^0-9]/', '', $_POST['records_per_page'] ); $options['records_per_page_business'] = preg_replace( '/[^0-9]/', '', $_POST['records_per_page_business'] ); - $options['schedule_show_images'] = $_POST['schedule_show_images']; $options['schedule_allowed_stats'] = ! empty( $_POST['schedule_allowed_stats'] ) ? implode( ',', $_POST['schedule_allowed_stats'] ) : ''; + $options['schedule_allowed_stats_client'] = ! empty( $_POST['schedule_allowed_stats_client'] ) ? implode( ',', $_POST['schedule_allowed_stats_client'] ) : ''; $options['schedule_desc_admin'] = wp_unslash( $_POST['schedule_desc_admin'] ); $options['schedule_desc_worker'] = wp_unslash( $_POST['schedule_desc_worker'] ); + $options['schedule_desc_client'] = wp_unslash( $_POST['schedule_desc_client'] ); + $options['schedule_client_can'] = $_POST['schedule_client_can']; + $options['schedule_show_images'] = $_POST['schedule_show_images']; do_action( 'app_global_settings_maybe_updated' ); @@ -177,6 +203,16 @@ wpb_notice( 'saved' ); $this->settings_changed( $old_options, $options ); } + + if ( ! empty( $_POST['schedule_clear_cache'] ) && 'yes' == $_POST['schedule_clear_cache'] ) { + foreach ( array( 'admin', 'worker', 'client' ) as $context ) { + wpb_schedules_delete_transients( $context ); + } + + delete_transient( 'wpbase_schedule_data' ); + + wpb_notice( __( 'Schedules cache cleared', 'wp-base' ) ); + } } /** @@ -234,6 +270,18 @@ if ( ! empty( $old_options['min_time'] ) && $old_options['min_time'] != $options['min_time'] ) { wp_reschedule_event( strtotime( current_time( 'Y-m-d' ) ) - 24*3600, 'wpb_time_base_tick', 'app_time_base_tick' ); } + + if ( $options['schedule_desc_admin'] != $old_options['schedule_desc_admin'] ) { + wpb_schedules_delete_transients( 'admin' ); + } + + if ( $options['schedule_desc_worker'] != $old_options['schedule_desc_worker'] ) { + wpb_schedules_delete_transients( 'worker' ); + } + + if ( empty( $old_options['schedule_desc_client'] ) || $options['schedule_desc_client'] != $old_options['schedule_desc_client'] ) { + wpb_schedules_delete_transients( 'client' ); + } } /** @@ -422,8 +470,45 @@ </div> </div> + <p class="submit"> + <input type="submit" class="button-primary" value="<?php _e('Save All Basic Settings', 'wp-base' ) ?>" /> + </p> + <?php do_action( 'app_admin_settings_after_booking' ) ?> + <div class="postbox"> + <div class="postbox-header"> + <h3 class="hndle" id="front-end-edit"><span><?php _e('Editing & Rescheduling', 'wp-base'); ?></span></h3> + </div> + <div class="inside"> + <table class="form-table"> + + <?php wpb_setting_yn( 'allow_edit' ) ?> + <?php wpb_setting_text( 'edit_limit' ) ?> + <?php wpb_setting_text( 'edit_upper_limit' ) ?> + + <tr id="editable"> + <th scope="row" ><?php WpBConstant::echo_setting_name('editable') ?></th> + <td class="has-checkbox"> + <?php foreach ( self::editable_fields() as $m ) { ?> + <label> + <input type="checkbox" name="editable_<?php echo $m ?>" value="true" <?php if ( strpos( wpb_setting("editable"), $m ) !== false ) echo "checked='checked'"?>> + <span> + <?php + echo wpb_get_text($m); + ?></span> + </label> + <?php } ?> + <br><span class="description app-btm"><?php WpBConstant::echo_setting_desc('editable') ?></span> + </td> + </tr> + + </table> + </div> + </div> + + <?php do_action( 'app_admin_settings_after_editing' ) ?> + <div class="submit app-manage-row"> <input type="hidden" name="action_app" value="save_general" /> <?php wp_nonce_field( 'update_app_settings', 'app_nonce', true ) ?> @@ -536,6 +621,24 @@ </td> </tr> + <tr id="schedule-desc-client"> + <th scope="row"><?php WpBConstant::echo_setting_name( 'schedule_desc_client' ) ?></th> + <td> + <?php wp_editor( wpb_setting( 'schedule_desc_client', WpBConstant::$_schedule_desc_client ), 'schedule_desc_client', + array( 'editor_height' => WPB_EDITOR_HEIGHT, + 'editor_class' => 'app-wp-editor', + 'editor_css' => '', + 'tinymce' => array( 'body_class' => 'app-editor-body' ), + 'teeny' => true, + 'wpautop' => false, + 'media_buttons' => false, + )); + + do_action( 'app_admin_after_schedule_desc', 'client' ); ?> + <span class="description app-btm"><?php WpBConstant::echo_setting_desc( 'schedule_desc_client' ) ?></span> + </td> + </tr> + <tr id="schedule-allowed-stats"> <th scope="row" ><?php WpBConstant::echo_setting_name('schedule_allowed_stats') ?></th> <td> @@ -551,7 +654,26 @@ </td> </tr> - <?php wpb_setting_yn( 'schedule_show_images' ); ?> + <tr id="schedule-allowed-stats-client"> + <th scope="row" ><?php WpBConstant::echo_setting_name('schedule_allowed_stats_client') ?></th> + <td> + <select multiple data-noneSelectedText="<?php echo esc_attr( __('Select statuses', 'wp-base' ) ) ?>" data-selectedlist="12" name="schedule_allowed_stats_client[]" class="app_ms"> + <?php + $stat_arr = explode( ',', wpb_setting( 'schedule_allowed_stats_client', 'paid,confirmed,pending,running,completed,removed' ) ); + foreach( $this->a->get_statuses() as $key => $stat ) { + + echo '<option value="'.$key.'" '.selected( in_array( $key, $stat_arr ), true, false ) .'>' . $this->a->get_status_name( $key ) . '</option>'; + } + ?></select> + <span class="description app-btm"><?php WpBConstant::echo_setting_desc('schedule_allowed_stats_client') ?></span> + </td> + </tr> + + <?php + wpb_setting_yn( 'schedule_client_can' ); + wpb_setting_yn( 'schedule_show_images' ); + wpb_setting_yn( 'schedule_clear_cache' ); + ?> </table> </div> @@ -612,6 +734,18 @@ </td> </tr> + <tr id="account-page"> + <th scope="row"><?php WpBConstant::echo_setting_name('account_page') ?></th> + <td> + <select name="account_page"> + <?php + echo wpb_description_page_selection( 'page', wpb_setting( 'account_page' ) ); + ?> + </select> + <span class="description app-btm"><?php WpBConstant::echo_setting_desc('account_page') ?></span> + </td> + </tr> + </table> </div> </div> Only in /home/deploy/wp-safety.org/data/plugin-versions/wp-base-booking-of-appointments-services-and-events/6.0.0/includes/admin: service-rte.php @@ -62,6 +62,7 @@ public function __construct() { $this->a = BASE(); $this->table = $this->a->services_table; + include_once WPBASE_PLUGIN_DIR . '/includes/admin/service-rte.php'; } /** @@ -1559,6 +1560,8 @@ '<input type="hidden" name="service_description_check" value="1"/>', $service->get_ID(), 'service_description', 'textarea' ), __( 'Optional description text for the service.', 'wp-base' ) ); + do_action( 'app_service_inline_edit_after_description', $service ); + ?></div><?php if ( apply_filters( 'app_service_inline_edit_show_image', true, $service ) ) { ?> @@ -1763,6 +1766,12 @@ $changed = true; } } + + if ( ! empty( $_POST['rte_content_check'] ) ) { + if ( $service->update_rte_content( ! empty( $_POST['rte_content'] ) ? wp_kses_post( $_POST['rte_content'] ) : '' ) ) { + $changed = true; + } + } if ( ! empty( $_POST['service_image_check'] ) ) { if ( $service->update_image_url( ! empty( $_POST['service_image_url']) ? wpb_clean( trim( $_POST['service_image_url'] ) ) : '' ) ) { @@ -2274,6 +2283,8 @@ owner_check: par.find("input[name='owner_check']").val(), service_description: par.find("textarea[name='service_description']").val(), service_description_check: par.find("input[name='service_description_check']").val(), + rte_content: par.find(".rte_content").html(), + rte_content_check: par.find("input[name='rte_content_check']").val(), service_image_url: par.find("input[name='service_image_url']").val(), service_image_id: par.find("input[name='service_image_id']").val(), service_image_check: par.find("input[name='service_image_check']").val(), @@ -575,7 +575,7 @@ </select> <?php - if ( $loc_ids = wpb_front_admin_loc_ids() ) { + if ( ! wpb_is_client() && $loc_ids = wpb_front_admin_loc_ids() ) { $add_class = $filt['location_id'] ? 'class="app-option-selected"' : ''; ?> <select name="app_location_id" <?php echo $add_class ?>> @@ -593,7 +593,9 @@ <select name="app_service_id" <?php echo $add_class ?>> <option value=""><?php _e('Filter by service','wp-base'); ?></option> <?php - foreach ( wpb_front_admin_services() as $service ) { + $services = wpb_is_client() ? wpb_client_services() : wpb_front_admin_services(); + + foreach ( $services as $service ) { echo '<option '.selected( $filt['service_id'], $service->ID ).' value="'.$service->ID.'">'. $this->a->get_service_name( $service->ID ) .'</option>'; } ?> @@ -46,35 +46,35 @@ add_action( 'app_shortcode_found', array( $this, 'request_load' ) ); add_action( 'app_load_assets', array( $this, 'request_load' ) ); - + add_filter( 'do_shortcode_tag', array( $this, 'do_shortcode_tag' ), 10, 2 ); - + add_action( 'template_redirect', array( $this, 'template_redirect' ) ); } - + /** * Find post object for non-single posts * Get cart values and remaining time before headers sent */ public function template_redirect() { - + if ( is_author() ) { global $wp_query; $this->author_id = $wp_query->queried_object_id; } - + global $wp_the_query; - + if ( ! is_callable( array( $wp_the_query, 'get_queried_object' ) ) ) { return; } - + $current_object = $wp_the_query->get_queried_object(); - + if ( empty( $current_object ) ) { return; } - + $this->current_post_id = ! empty( $current_object->ID ) ? $current_object->ID : 0; if ( ! headers_sent() ) { @@ -124,11 +124,6 @@ wp_register_script( 'jquery-app-qtip', WPB_PLUGIN_URL . '/js/dev/jquery.qtip.min.js', array('jquery'), $this->ver() ); wp_register_script( 'jquery-blockui', WPB_PLUGIN_URL . '/js/dev/jquery.blockUI.js', array('jquery'), $this->ver() ); wp_register_script( 'wp-base-countdown', WPB_PLUGIN_URL . '/js/dev/jquery.countdown.min.js', array('jquery','jquery-plugin'), $this->ver() ); - wp_register_script( 'jquery-datatables', WPB_PLUGIN_URL . '/js/dev/jquery.dataTables.min.js', array('jquery-ui-core'), $this->ver() ); - wp_register_script( 'jquery-datatables-jqueryui', WPB_PLUGIN_URL . '/js/dev/dataTables.jqueryui.min.js', array('jquery-datatables'), $this->ver() ); - wp_register_script( 'jquery-datatables-jqueryui-responsive', WPB_PLUGIN_URL . '/js/dev/responsive.jqueryui.min.js', array('jquery-datatables-jqueryui','jquery-datatables-responsive'), $this->ver() ); - wp_register_script( 'jquery-datatables-moment', WPB_PLUGIN_URL . '/js/dev/moment.min.js', array('jquery-datatables'), $this->ver() ); - wp_register_script( 'jquery-datatables-responsive', WPB_PLUGIN_URL . '/js/dev/dataTables.responsive.min.js', array('jquery-datatables'), $this->ver() ); wp_register_script( 'jquery-plugin', WPB_PLUGIN_URL . '/js/mobile/jquery.plugin.min.js', array('jquery'), $this->ver() ); wp_register_script( 'jquery-qtip', WPB_PLUGIN_URL . "/js/dev/jquery.qtip.min.js", array('jquery'), $this->ver() ); wp_register_script( 'jquery-quickfit', WPB_PLUGIN_URL . '/js/dev/jquery.quickfit.js', array('jquery'), $this->ver() ); @@ -138,40 +133,31 @@ wp_register_script( 'jstz', WPB_PLUGIN_URL . '/js/dev/jstz.min.js', array(), $this->ver() ); wp_register_script( 'app-event-calendar', WPB_PLUGIN_URL . '/js/dev/event-calendar.min.js', array('jquery'), $this->ver() ); wp_register_script( 'app-schedules', WPB_PLUGIN_URL . '/js/schedules.js', array('app-event-calendar'), $this->ver() ); - wp_register_style( 'app-schedules', WPB_PLUGIN_URL . '/css/schedules.css', array(), $this->ver() ); - wp_register_style( 'wp-base-admin-front', WPB_PLUGIN_URL . '/css/front-admin.css', array(), WPB_VERSION ); wp_register_script( 'wp-base-common-scripts', WPB_PLUGIN_URL . '/js/common-scripts.js', array('jquery-ui-core','jquery-ui-widget', 'jquery-ui-position'), $this->ver(), true ); wp_register_script( 'wp-base-libs', WPB_PLUGIN_URL . '/js/libs.js', array('jquery-ui-widget','jquery-ui-button','jquery-ui-datepicker'), $this->ver(), true ); + wp_register_script( 'wp-base-datatables', WPB_PLUGIN_URL . '/js/app-datatables.js', array('jquery'), $this->ver(), true ); + + wp_register_style( 'app-schedules', WPB_PLUGIN_URL . '/css/schedules.css', array(), $this->ver() ); + wp_register_style( 'wp-base-admin-front', WPB_PLUGIN_URL . '/css/front-admin.css', array(), $this->ver() ); + wp_register_style( 'wp-base-panels', WPB_PLUGIN_URL . '/css/panels.css', array(), $this->ver() ); + wp_register_style( 'wp-base-admin', WPB_PLUGIN_URL . '/css/admin.css', array(), $this->ver() ); + wp_register_style( 'wp-base-stripe', WPB_PLUGIN_URL . '/css/stripe.css', array(), $this->ver() ); } /** - * Register moment locale for non English websites + * Register moment locale for non English websites - Deprecated * @since 3.6.2 + * @until 6.0.0 * @return string Handle of the script to be used as dependency */ private function register_moment_locale() { - $locale = strtolower( $this->a->get_locale() ); - $locale_short = current( explode( '-', $locale ) ); - - if ( $locale && 'en' != $locale && 'en-us' != $locale ) { - foreach( array( $locale, $locale_short ) as $lcl ) { - if ( file_exists( WPBASE_PLUGIN_DIR . '/js/locale/'.$lcl.'.js' ) ) { - - wp_register_script( 'jquery-moment-locale', - WPB_PLUGIN_URL . '/js/locale/'.$lcl.'.js', - (self::is_debug() ? array('jquery-datatables-moment') : array('wp-base-libs')), - $this->ver() - ); - - return 'jquery-moment-locale'; - } - } - } + return; } /** * Enqueue used jQuery effects * @since 3.0 + * @return none */ public function enqueue_effects(){ $effects = 'yes' == wpb_setting( 'ms_use_effect' ) ? array( 'blind', 'drop' ) : array( 'drop' ); @@ -189,6 +175,8 @@ $deps = array( 'wp-base-common-scripts', + 'wp-base-libs', + 'wp-base-datatables', 'codemirror', 'jquery-ui-button', 'jquery-ui-datepicker', @@ -196,7 +184,7 @@ 'jquery-ui-sortable', 'jquery-ui-tabs', 'wp-color-picker', - 'wp-base-libs', + 'moment', ); # FEBM may call on front end - these are only registered for admin, so we exclude them @@ -211,34 +199,15 @@ * Front end script dependencies */ private function deps_front() { - if ( self::is_debug() ) { - return array( - 'wp-base-common-scripts', - 'jquery-blockui', - 'wp-base-countdown', - 'jquery-datatables-jqueryui', - 'jquery-ui-button', - 'isotope', - 'jquery-datatables-jqueryui-responsive', - 'jquery-datatables-moment', - 'jquery-quickfit', - 'jquery-scrollto', - 'signature-pad', - 'app-flexslider', - 'jquery-effects-drop', - 'jquery-ui-button', - 'jquery-ui-dialog', - 'jstz', - ); - } else { - return array( - 'wp-base-common-scripts', - 'wp-base-libs', - 'jquery-effects-drop', - 'jquery-ui-button', - 'jquery-ui-dialog', - ); - } + return array( + 'wp-base-common-scripts', + 'wp-base-libs', + 'wp-base-datatables', + 'jquery-effects-drop', + 'jquery-ui-button', + 'jquery-ui-dialog', + 'moment', + ); } /** @@ -246,7 +215,7 @@ */ public function common_data() { global $wp_locale; - + return array( 'menuHeight' => 'size', 'checkAll' => wpb_get_text( 'check_all' ), @@ -278,7 +247,7 @@ 'decimal_sep' => wpb_decimal_separator(), 'done' => wpb_get_text( 'done' ), 'filterLabel' => '', // If left empty "Filter:" - 'filterPholder' => '', // If left empty "Enter keywords" + 'filterPholder' => '', // If left empty "Enter keywords" 'iedit_nonce' => wp_create_nonce('inline_edit'), 'js_date_format' => wpb_convert_dt_format( $this->a->safe_date_format() ), 'list' => wpb_get_text( 'list' ), @@ -335,10 +304,10 @@ * Admin data for javascript */ public function admin_data(){ - + $wh_starts = wpb_setting( 'wh_starts', '07:00' ); $wh_ends = wpb_setting( 'wh_ends', '18:00' ); - + return array( 'all_day' => wpb_get_text( 'all_day' ), 'checkin' => wpb_get_text( 'checkin_text' ), @@ -346,6 +315,7 @@ 'colorPresets' => wpb_get_preset(), 'confirmDeleteLog' => __( 'Are you sure to clear the log file?', 'wp-base' ), 'confirmEmpty' => __( 'You are about to delete at least one record. Are you sure to do this?', 'wp-base' ), + 'confirmPay' => __( 'Do you want to pay commission to the selected records?', 'wp-base' ), 'confirmReset' => __( 'WARNING!! This action will clear all existing database records (bookings, transactions, locations, services, service providers, working hours). Are you sure to do this?', 'wp-base' ), 'confirmResetAgain' => __( 'Are you REALLY SURE TO DELETE the database records?', 'wp-base' ), 'confirmRestore' => __( 'This action will restore all WP BASE settings to the defaults. Database records (bookings, transactions, locations, services, service providers, working hours) will not be changed. Are you sure to do this?', 'wp-base' ), @@ -391,7 +361,8 @@ 'showImages' => 'yes' == wpb_setting( 'schedule_show_images', 'yes' ), # Show worker images 'showCheckout' => 'yes' != wpb_setting( 'end_date_for_venue' ), # Show checkin/Checkout texts 'showTimeline' => wpb_is_admin_user() && BASE()->get_nof_workers(), # Whether show Timeline in Schedules - 'editable' => wpb_is_admin_user() || (wpb_is_worker() && in_array( wpb_setting( 'allow_worker_edit' ), array('yes','only_schedules','also_admin') ) ), # Whether allow workers editing in Schedules + 'client' => wpb_is_client(), + 'editable' => wpb_is_admin_user() || (wpb_is_worker() && in_array( wpb_setting( 'allow_worker_edit' ), array('yes','only_schedules','also_admin') ) ) || (wpb_is_client() && 'yes' == wpb_setting('allow_edit')), # Whether allow workers editing in Schedules 'lockEnabled' => (bool)BASE()->get_nof_workers(), # Interlocking (Global) 'lockEnabledMS' => wpb_is_multi_store(), # Interlocking (Multi Store) 'useFilter' => false, # User filter for Multiselect @@ -404,8 +375,8 @@ */ public function front_data(){ global $current_screen, $wp_locale, $post; - - $post_id = ! empty( $this->current_post_id ) + + $post_id = ! empty( $this->current_post_id ) ? $this->current_post_id : (!empty( $post->ID ) ? $post->ID : 0); @@ -546,10 +517,6 @@ $data = apply_filters( 'app_js_data', wpb_array_merge( $data, $this->front_data() ), 'front' ); } - if ( $handle = $this->register_moment_locale() ) { - $deps[] = $handle; - } - wp_register_script( 'wp-base-admin-scripts', WPB_PLUGIN_URL . '/js/admin/admin-scripts.js', $deps, $this->ver() ); $this->localize( $data ); @@ -573,10 +540,6 @@ } } - if ( $handle = $this->register_moment_locale() ) { - $deps[] = $handle; - } - wp_register_script( 'wp-base-front-scripts', WPB_PLUGIN_URL . '/js/front-scripts.js', $deps, $this->ver(), true ); $this->localize( $data ); $this->enqueue_effects(); @@ -590,7 +553,7 @@ * Load common styles */ private function load_common_css() { - wp_enqueue_style( 'wp-base-updating', WPB_PLUGIN_URL . '/css/updating.css', array(), $this->ver() ); + wp_enqueue_style( 'wp-base-panels' ); wp_enqueue_style( 'jquery-ui-'.sanitize_file_name( $this->a->selected_theme() ), $this->a->get_theme_file(), array(), $this->ver() ); if ( WpBDebug::is_debug() ) { @@ -602,7 +565,7 @@ wp_enqueue_style( 'jquery-datatables-responsive-ui', WPB_PLUGIN_URL . '/css/responsive.jqueryui.css', array(), $this->ver() ); wp_enqueue_style( 'jquery-datatables-jqueryui', WPB_PLUGIN_URL . '/css/dataTables.jqueryui.css', array(), $this->ver() ); } else { - wp_enqueue_style( "wp-base-libs-min", WPB_PLUGIN_URL . "/css/libs.min.css", array(), $this->ver() ); + wp_enqueue_style( 'wp-base-libs-min', WPB_PLUGIN_URL . '/css/libs.min.css', array(), $this->ver() ); } if ( is_rtl() ) { @@ -622,7 +585,7 @@ return; } - wp_enqueue_style( 'wp-base-admin', WPB_PLUGIN_URL . '/css/admin.css', array(), $this->ver() ); + wp_enqueue_style( 'wp-base-admin' ); wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_style( 'editor-buttons' ); // Fix for: wp_editor call does not load editor.min.css on emails page @@ -653,7 +616,7 @@ do_action( 'app_styles_enqueued', $this ); } - + /** * Load assets for unsupported page builders or templates upon WP BASE shortcode usage * @uses do_shortcode_tag filter hook @@ -661,18 +624,18 @@ * @return string */ public function do_shortcode_tag( $output, $tag ) { - + if ( ! did_action( 'app_scripts_enqueued' ) && in_array( $tag, wpb_shortcodes() ) ) { $this->load_front(); $this->load_front_css(); - - if ( 'app_account' == $tag || 'app_manage' == $tag ) { + + if ( in_array( $tag, array( 'app_account', 'app_manage', 'app_list', 'app_store' ) ) ) { wp_enqueue_style( 'wp-base-admin-front' ); $this->load_admin(); $this->load_admin_css(); } } - + return $output; } @@ -52,9 +52,9 @@ * @param $force_priority string Change priority by instance, e.g. in admin inline edit */ public function __construct( $norm_or_booking, $order_by = "sort_order", $force_priority = false, $event = null ) { - + $this->a = BASE(); - + if ( $norm_or_booking instanceof WpB_Booking ) { $booking = $norm_or_booking; $this->req_location = $booking->get_location(); @@ -84,7 +84,7 @@ $this->set_worker = $this->a->get_def_wid(); return; } - + if ( WPB_GCAL_SERVICE_ID == $this->req_service ) { $this->set_service = $this->req_service; $this->locations = array(); @@ -110,7 +110,7 @@ case self::WORKER: $this->adjust_worker(); break; } } - + add_filter( 'app_update_cals_reply', array( $this, 'update_cals_reply' ) ); } @@ -124,23 +124,23 @@ if ( empty( $_POST['active_step'] ) ) { return $reply; } - + $prev = ! empty( $reply['booking_info'] ) ? $reply['booking_info'] : array(); - + # Image if ( $img_url = wpb_get_service_meta( $this->get_service(), 'image_url' ) ) { $slider_image = '<div class="app-cover" style="background-image: url('.$img_url.')"></div>'; } else { $slider_image = ''; } - + # Duration $s = BASE()->get_service( $this->get_service() ); - $lasts = ! empty( $_REQUEST['app_duration'] ) - ? $_REQUEST['app_duration'] + $lasts = ! empty( $_REQUEST['app_duration'] ) + ? $_REQUEST['app_duration'] : (! empty( $s->duration ) ? $s->duration : BASE()->get_min_time()); - - $reply['booking_info'] = array_merge( $prev, array( + + $reply['booking_info'] = array_merge( $prev, array( 'service_id' => $this->get_service(), 'location' => $this->is_loc_active() && $this->get_location() ? wpb_booking_info_line_html( 'location', $this->a->get_location_name( $this->get_location() ) ) : '', 'service' => wpb_booking_info_line_html( 'service', $this->a->get_service_name( $this->get_service() ) ), @@ -149,7 +149,7 @@ 'image' => $slider_image, 'cart_contents' => ! wpb_is_hidden('details') && BASE('Multiple')->values() ? BASE('Multiple')->cart_contents_html( BASE('Multiple')->values() ) : '', ) ); - + return $reply; } @@ -294,9 +294,9 @@ * @return none */ private function set_random_worker( $ids ) { - + shuffle( $ids ); - + if ( empty( $_POST['app_value'] ) && defined( 'WPB_CHECK_WORKER_AVAIL' ) && WPB_CHECK_WORKER_AVAIL ) { $today = strtotime( 'today', $this->a->_time ); foreach ( $ids as $id ) { @@ -505,22 +505,27 @@ /** * Create HTML for location select element + * @param $ro bool Read Only, e.g not editable items * @since 3.0 * @return string */ - public function select_location( ) { + public function select_location( $ro = false ) { $html = '<select class="app-admin-lsw app_select_locations app-no-ms" data-lsw="location" name="location">'; - + $loc_ids = wpb_is_manage_store() ? wpb_managed_stores() : array_keys( (array)$this->locations ); foreach ( $loc_ids as $loc_id ) { $sel = $this->set_location == $loc_id ? ' selected="selected"' : ''; + if ( $ro && ! $sel ) { + continue; + } + $html .= '<option value="'.$loc_id.'"'.$sel.'>'. $this->a->get_location_name( $loc_id ) . '</option>'; } if ( ! $loc_ids ) { - $html .= '<option disabled="disabled">' . wpb_get_text('no_free_time_slots'). '</option>'; + $html .= '<option disabled>' . wpb_get_text('no_free_time_slots'). '</option>'; } $html .= '</select>'; @@ -530,22 +535,27 @@ /** * Create HTML for service select element + * @param $ro bool Read Only, e.g not editable items * @param $new bool Package selection is allowed for new booking * @since 3.0 * @return string */ - public function select_service( $new = false ) { + public function select_service( $ro = false, $new = false ) { $html = '<select class="app-admin-lsw app_select_services app-no-ms" data-lsw="service" name="service">'; foreach ( (array)$this->services as $service ) { $sel = $this->set_service == $service->ID ? ' selected="selected"' : ''; - $disabled = ! $new && $this->a->is_package( $service->ID ) ? ' disabled="disabled"' : ''; + $disabled = ! $new && $this->a->is_package( $service->ID ) ? ' disabled' : ''; + + if ( $ro && ! $sel ) { + continue; + } - $html .= '<option value="'.$service->ID.'"'.$sel.$disabled.'>'. $this->a->get_service_name( $service->ID ) . '</option>'; + $html .= '<option '.($ro && ! $sel ? 'disabled' : '').' value="'.$service->ID.'"'.$sel.$disabled.'>'. $this->a->get_service_name( $service->ID ) . '</option>'; } if ( ! $this->services ) { - $html .= '<option disabled="disabled">'. wpb_get_text('no_free_time_slots') .'</option>'; + $html .= '<option disabled>'. wpb_get_text('no_free_time_slots') .'</option>'; } $html .= '</select>'; @@ -555,10 +565,11 @@ /** * Create HTML for worker select element + * @param $ro bool Read Only, e.g not editable items * @since 3.0 * @return string */ - public function select_worker( ) { + public function select_worker( $ro = false ) { $html = '<select class="app-admin-lsw app_select_workers app-no-ms" data-lsw="worker" name="worker">'; if ( $this->workers ) { @@ -575,6 +586,10 @@ $sel = $this->set_worker == $worker->ID ? ' selected="selected"' : ''; + if ( $ro && ! $sel ) { + continue; + } + $html .= '<option value="'.$worker->ID.'"'.$sel.'>'. $this->a->get_worker_name( $worker->ID ) .'</option>'; } @@ -646,12 +661,12 @@ if ( $maybe_desc = wpb_get_location_meta( $ID, 'description' ) ) { $desc = $maybe_desc; $sub_context = 'description'; - } + } } else if ( 'worker' == $context ) { if ( $maybe_img = get_user_meta( $ID, 'app_profile_image', true ) ) { $slider_image = '<img src="'.esc_attr( $maybe_img ).'" alt="User Image" />'; } - + if ( $maybe_desc = get_user_meta( $ID, 'app_description', true ) ) { $desc = $maybe_desc; $sub_context = 'description'; @@ -580,6 +580,24 @@ } /** + * Get Rich Text Editor content + * @since 5.9.1 + * @return string + */ + public function get_rte_content() { + return wpb_get_service_meta( $this->ID, 'rte_content' ); + } + + /** + * Update Rich Text Editor content + * @since 5.9.1 + * @return bool + */ + public function update_rte_content( $desc ) { + return wpb_update_service_meta( $this->ID, 'rte_content', $desc ); + } + + /** * Get Featured Image Url * @return string */ @@ -151,6 +151,13 @@ Yours sincerely, SITE_NAME"; + public static $_commission_paid_message = "Dear VENDOR, + +A payment of AMOUNT has been made to your account. + +For your information, +SITE_NAME"; + public static $_waiting_list_message = "Dear CLIENT, We have received your appointment submission for SITE_NAME. @@ -255,6 +262,10 @@ <div><em>NOTE</em></div> <div><strong>STATUS</strong> · APP_ID</div>'; + public static $_schedule_desc_client = '<div>SERVICE · PAX pax</div> +<div>WORKER</div> +<div><strong>STATUS</strong> · APP_ID</div>'; + public static function privacy_content() { return __('We collect information about you during the checkout process on our website. This information may include, but is not limited to, your name, email address, phone number and any other details that might be requested from you for the purpose of processing your orders. Handling this data also allows us to: - Send you important account/order/service information. @@ -302,6 +313,7 @@ $currency = wpb_format_currency(); $defaults = array( + 'account_page' => array( '', __('Account Page', 'wp-base'), __('The page where <code>[app_account]</code> resides. Normally WP BASE automatically locates this page and sets this setting, however in some cases you may need to set it yourself.', 'wp-base') ), 'additional_css' => array( '', __('Additional css Rules (Front end)', 'wp-base'), __('You can add css rules to customize styling. These will be added to the front end appointment page(s) only.', 'wp-base') ), 'additional_css_admin' => array( '', __('Additional css Rules (Admin side)', 'wp-base'), __('You can add css rules to customize styling. These will be added to the admin side only, e.g. to user profile page.', 'wp-base') ), 'additional_min_time' => array( '', __('Additional Time Base (minutes)', 'wp-base'), __('If selectable time bases do not fit your business, you can add a new one, e.g. 90. Note: 1) After you save this additional time base, you must select it using the Time Base setting. 2) Minimum allowed time base setting is 5 minutes. 3) Entered value should be divisible by 5. For example, 24 is not allowed and it will be rounded to 25.', 'wp-base' ) ), @@ -315,12 +327,11 @@ 'agora_api_id' => array( '', __('App ID','wp-base'), sprintf( __('Get this value from your %s.', 'wp-base'), '<a class="app-btm" href="https://console.agora.io/" target="_blank">'.__('Agora account').'</a>' ), 'Online Meetings' ), 'agora_cert' => array( '', __('App Certificate','wp-base'), sprintf( __('Primary certificate from your %s.', 'wp-base'), '<a class="app-btm" href="https://console.agora.io/" target="_blank">'.__('Agora account').'</a>' ), 'Online Meetings' ), 'agora_enable' => array( 'yes', __('Enable Agora','wp-base'), __('Enables integration with Agora Online Meetings.', 'wp-base'), 'Online Meetings' ), - 'agora_layout' => array( 0, __('Layout','wp-base'), __('Layout of the participant screens', 'wp-base'), 'Online Meetings' ), 'agora_subject' => array( 'SITE_NAME SERVICE Meeting', __('Agora Subject','wp-base'), sprintf( __('Meeting subject (title). <abbr title="%s">Booking placeholders</abbr> can be used. During meeting creation, these placeholders will be replaced by their real values.', 'wp-base'), WpBConstant::email_desc(1) ), 'Online Meetings' ), 'allow_cancel' => array( 'no', __('Allow Client Cancel Own Bookings', 'wp-base'), __('Whether to allow clients cancel their bookings using the link in confirmation and reminder emails or using Booking List table or for logged in users, using check boxes in their profile pages. For the email case, you will also need to add CANCEL placeholder to the email message content.', 'wp-base' ) ), 'allow_client_set_tz' => array( 'no', __('Allow Clients Select Own Timezone', 'wp-base'), __('If selected as "Yes", clients can manually select their timezone in their profile page. This setting overrides automatic dedection.', 'wp-base') ), 'allow_confirm' => array( 'yes', __('Allow Client Confirm Bookings by Email', 'wp-base'), __('Whether to allow clients confirm their bookings using the link in any email they receive. This link is added by using CONFIRM placeholder in email bodies.', 'wp-base' ) ), - 'allow_edit' => array( 'no', __('Allow Client Edit Own Bookings','wp-base'), __('Whether you let client edit own appointments on the front end. Client can activate editing popup form by one of the following methods: 1) Clicking Edit button in WordPress user page, 2) Clicking Edit button in List Of Bookings, 4) Clicking Edit button in Bookings tab of Account page, 4) Clicking the link in emails. This link is created by inserting EDIT placeholder to the email body.','wp-base'),'Front End Edit' ), + 'allow_edit' => array( 'no', __('Allow Client Edit Own Bookings','wp-base'), __('Whether you let client edit own bookings on List of Bookings or Schedules tab of Account page.','wp-base') ), 'allow_now' => array( 'no', __('Allow Late Booking', 'wp-base'), __('Setting this as Yes will allow booking of a time slot when current time is within selected time slot, i.e. appointment start time has passed, but it has not ended yet.', 'wp-base' ) ), 'allow_register' => array( 'auto', __('Allow Registration at Checkout', 'wp-base'), __('Whether add registration fields at checkout. "Auto" follows WordPress "Anyone can register" setting.', 'wp-base' ) ), 'allow_worker_annual' => array( 'no', __('Set Own Seasonal Schedules', 'wp-base'), __('Requires Seasonal Working Hours Addon. Whether you let service providers to set their annual schedules using their navigation tab in BuddyPress (Requires BuddyPress addon) or their profile page in regular WordPress. They are also allowed to add new custom schedules, but not to delete them.', 'wp-base'), 'Service Providers' ), @@ -406,9 +417,9 @@ 'disable_tooltips' => array( 'no', __('Disable Tooltips in Booking Calendars', 'wp-base'), __('Selecting "No" will disable tooltips like "Click to pick date", etc. Note: In Debug mode, tooltips are displayed.', 'wp-base' ) ), 'dp_reminder_attach' => array( 'no', __('Create and Attach pdf File', 'wp-base'), __('Whether to attach a pdf file that will be created from the below fields. If attachment field is empty, file will not be attached (empty file will not be sent).', 'wp-base'), 'PDF' ), 'dp_reminder_limit' => array( '', sprintf( __('Due Payment Reminder Sending Limit of Balance (%s)', 'wp-base'), BASE()->get_options('currency', 'USD') ), __('Due payment reminder is only sent if balance is negative and absolute value of balance for the appointment is greater than this amount. For example, if this value is set as 10$, an appointment with -9$ balance will not result to a reminder email, but -11$ will. Leave empty if you want to remind client in case of any negative balance.', 'wp-base'), 'Reminder and Follow-up emails' ), - 'dp_reminder_message' => array( '', __('Due Payment Reminder email Message', 'wp-base'), '', 'Reminder and Follow-up emails' ), + 'dp_reminder_message' => array( '', __('Due Payment Reminder Email Message', 'wp-base'), '', 'Reminder and Follow-up emails' ), 'dp_reminder_statuses' => array( 'paid,confirmed,completed', __('Booking Statuses Due Payment emails Applied to', 'wp-base'), __('Only clients having appointments with selected status(es) will receive due payment reminder email. If none selected, due payment emails will not be sent at all.', 'wp-base'), 'Reminder and Follow-up emails' ), - 'dp_reminder_subject' => array( '', __('Due Payment Reminder email Subject', 'wp-base'), '', 'Reminder and Follow-up emails' ), + 'dp_reminder_subject' => array( '', __('Due Payment Reminder Email Subject', 'wp-base'), '', 'Reminder and Follow-up emails' ), 'dp_reminder_time' => array( '72,48', __('Due Payment Reminder email Sending Time (hours)', 'wp-base'), __('Defines the time in hours that reminder email will be sent after the appointment has been booked (creation time). Note that this is different than appointment reminder email where appointment start time is taken as reference. Multiple reminders are possible. To do so, enter reminding hours separated with a comma, e.g. 48,72.', 'wp-base'), 'Reminder and Follow-up emails' ), 'dummy_assigned_to' => array( 0, __('Assign Dummy Providers to', 'wp-base'), __('You can define "Dummy" service providers to enrich your service provider alternatives and variate your working schedules. Their availability and other properties will be exactly like ordinary providers except the emails they are supposed to receive will be forwarded to the user you select here.', 'wp-base'), 'Service Providers' ), 'duration_format' => array( 'hours_minutes', __('Service Duration Display Format', 'wp-base'), __('With this setting, you can select display format of durations on the front end (minutes, hours, hours+minutes).', 'wp-base' ) ), @@ -417,10 +428,10 @@ 'edd_price_name' => array( 'From: DATE_TIME To: END_DATE_TIME', __('Booking Info','wp-base'), sprintf( __('Short information about the booking, for example date, time, provider. All <abbr title="%s">booking placeholders</abbr> can be used.','wp-base'), WpBConstant::email_desc(1) ), 'EDD' ), 'edd_product_meta' => array( 'PRODUCT_LINK', __('Booking Details','wp-base'), sprintf( __('Details of booking that will be added below product name. All <abbr title="%s">booking placeholders</abbr> can be used.','wp-base'), WpBConstant::email_desc(1) ), 'EDD' ), 'edd_product_name' => array( 'SERVICE Booking', __('Booking Title','wp-base'), sprintf( __('Defines how the selected booking will be displayed in the cart and receipt. All <abbr title="%s">booking placeholders</abbr> can be used.','wp-base'), WpBConstant::email_desc(1) ), 'EDD' ), - 'editable' => array( $editable, __('Editable Booking Fields','wp-base'), sprintf( __('Select which booking fields can be edited. Note: UDF fields can be limited using "Editable" column on %s page. ','wp-base'), '<a href="'.admin_url('admin.php?page=app_display&tab=udf').'" target="_blank">'.__('UDF settings','wp-base').'</a>' ),'Front End Edit' ), - 'edit_change_price' => array( 'yes', __('Allow Price Display and Change'), __('Whether change in selections will affect price.','wp-base'),'Front End Edit' ), - 'edit_limit' => array( '', __('Editing Lower Limit (hours)','wp-base'), __('Number of hours from appointment start time until which client can edit their appointment. For example, entering 24 will disable editing one day before the appointment is due. In such a case any editing request will be replied with "Too late" response. Note: Admins and those who have given editing capability with "cap" attribute are not limited with this setting.','wp-base'),'Front End Edit' ), - 'edit_upper_limit' => array( 60, __('Editing Upper Limit (days)','wp-base'), __('Only bookings whose start date is earlier than this setting can be edited. If left empty, global Upper Limit will be used.','wp-base'),'Front End Edit' ), + 'editable' => array( $editable, __('Editable Booking Fields','wp-base'), sprintf( __('Select which booking fields can be edited. Note: UDF fields can be limited using "Editable" column on %s page. ','wp-base'), '<a href="'.admin_url('admin.php?page=app_display&tab=udf').'" target="_blank">'.__('UDF settings','wp-base').'</a>' ) ), + 'edit_change_price' => array( 'yes', __('Allow Price Display and Change'), __('Whether change in selections will affect price.','wp-base') ), + 'edit_limit' => array( '', __('Editing Lower Limit (hours)','wp-base'), __('Number of hours from appointment start time until which client can edit their appointment. For example, entering 24 will disable editing one day before the appointment is due. In such a case any editing request will be replied with "Too late" response. Note: Admins and those who have given editing capability with "cap" attribute are not limited with this setting.','wp-base') ), + 'edit_upper_limit' => array( 60, __('Editing Upper Limit (days)','wp-base'), __('Only bookings whose start date is earlier than this setting can be edited. If left empty, global Upper Limit will be used.','wp-base') ), 'enable_timezones' => array( 'no', __('Enable Timezones', 'wp-base'), __('If selected as "Yes", timezone of the client is taken into account during display of booking UI\'s, list of bookings and emails. Admin side and database records are not affected.', 'wp-base'), 'Advanced Features' ), 'end_date_for_venue' => array( 'no', __('Show End Date Based on Venue Bookings', 'wp-base'), __('For bookings that last one day and longer, whether display end date according to venue bookings. By default (Setting "No"), end date is displayed based on <i>nightly room bookings</i> and it shows the <i>checkout</i> date which is one day past the actual end timestamp. If you select "Yes", end date will be shown based on <i>daytime venue bookings</i> and there will not be an offset for checkout. Note: This selection does not affect how booking is saved to the database, but just how it is displayed on the front end.', 'wp-base' ) ), 'ep_if_several' => array( 'min', __('Price to Apply upon Multiple Rule Match', 'wp-base'), __('If there are several matching rules, price returned can be selected among minimum, maximum or average of the non-zero prices calculated by matching rules.', 'wp-base'), 'Custom Pricing' ), @@ -522,7 +533,10 @@ 'mv_client_approval_time' => array( 3, __('Auto Approval Time (days)', 'wp-base'), __('After this time, even if client did not approve, completed bookings will be automatically approved. Leaving empty means 3 days.', 'wp-base'), 'Marketplace' ), 'mv_commission_if_several' => array( 'max', __('Commission to Apply upon Multiple Role Match', 'wp-base'), __('If vendor has several matching roles, commission rate to be applied can be selected among minimum or maximum of the commissions of matching roles.', 'wp-base'), 'Marketplace' ), 'mv_commission_nof_rates' => array( 0, __('Number of Commission Rates', 'wp-base'), __('You can define commission percentage based on WordPress user role of the vendor, e.g. to give better commission to certain membership levels. If you will use them, select number of commission rates.', 'wp-base'), 'Marketplace' ), + 'mv_commission_payment' => array( 'manual', __('Commission Payment Method', 'wp-base'), __('Commissions can be paid to vendors automatically when booking is completed or booking is approved by the client or manually at any desired time. Note: When automatic payment is selected, you can also pay manually on Commissions page.', 'wp-base'), 'Marketplace' ), 'mv_commission_rate' => array( '60', __('Commission Rate (%)', 'wp-base'), __('Percentage of the booking revenue that will be received by the vendor.', 'wp-base'), 'Marketplace' ), + 'mv_enable_approved' => array( 'no', __('Enable Approved Status', 'wp-base'), __('Whether to use Approved status.', 'wp-base'), 'Marketplace' ), + 'mv_enable_stripe_connect' => array( 'no', __('Enable Stripe Connect', 'wp-base'), __('Whether to use Stripe Connect to pay commissions to vendors.', 'wp-base'), 'Marketplace' ), 'mv_fees_paid_by' => array( 'website', __('Fees Covered By', 'wp-base'), __('Who will cover the transaction fees. If covered by vendor, fees are deducted from client payment and vendor\'s earning will be lower.', 'wp-base'), 'Marketplace' ), 'mv_give_commission_own_sales' => array( 'no', __('Give Commission for Own Sales', 'wp-base'), __('Whether to give commission if client is the vendor themselves.', 'wp-base'), 'Marketplace' ), 'mv_hide_non_vendor_calendar' => array( 'yes', __('Hide Non-Vendor Booking Calendars', 'wp-base'), __('Whether to hide booking calendars on pages of non-vendors. Setting this to "Yes" will mean: For the above bio page CPTs, booking is only allowed on approved vendor bio pages.', 'wp-base'), 'Marketplace' ), @@ -544,7 +558,6 @@ 'mv_store_post_content' => array( '', __('Default Page Content', 'wp-base'), __('Content of the store page, typically including <code>[app_book]</code> shortcode in order to let clients book their services. Only services of this store are selectable from this shortcode.', 'wp-base'), 'Marketplace' ), 'mv_store_post_title' => array( 'COMPANY_NAME', __('Default Page Title', 'wp-base'), __('Title of the store page. Placeholders COMPANY_NAME and VENDOR_NAME will be replaced by vendor data.', 'wp-base'), 'Marketplace' ), 'mv_store_post_type' => array( 'post', __('Post Type for Store Pages', 'wp-base'), __('Post type that will be used for stores. A CPT is recommended, e.g. Place', 'wp-base' ), 'Marketplace' ), - 'mv_enable_approved' => array( 'no', __('Enable Approved Status', 'wp-base'), __('Whether to use Approved status.', 'wp-base'), 'Marketplace' ), 'mv_um_account_page' => array( '', __('Account Page (only for UM)', 'wp-base'), __('UM Account Page may have a Bookings item to redirect to WP BASE Account page. The page which includes <code>[app_account]</code> should be selected here.', 'wp-base'), 'Marketplace' ), 'mv_use_wc_cart' => array( 'no', __('Use WooCommerce Cart for Payment', 'wp-base'), sprintf( __('When you enable WooCommerce cart, payments will be handled with WooCommerce checkout system even if bio page is not a WooCommerce product CPT. WooCommerce plugin and WP BASE WooCommerce Integration addon must be activated. Also see %s.', 'wp-base'), '<a href="'.admin_url( 'admin.php?page=app_settings&tab=advanced#woocommerce' ).'">'.__( 'WooCommerce settings', 'wp-base' ).'</a>'), 'Marketplace' ), 'mv_usership' => array( '', __('User Profile Plugin Integration', 'wp-base'), __('Select the user profile plugin you want to integrate from the list. With this integration, vendor can be directly booked from profile page of the user profile plugin.', 'wp-base'), 'Marketplace' ), @@ -570,9 +583,13 @@ 'reminder_time_sms_worker' => array( '4', __('Reminder SMS Sending Time for the Provider (hours)', 'wp-base'), __('Same as Reminder SMS Sending Time for the Client, but defines the time for service provider.', 'wp-base'), 'SMS' ), 'reminder_time_worker' => array( '4', __('Reminder email Sending Time for the Provider (hours)', 'wp-base'), __('Same as Reminder email Sending Time for the Client, but defines the time for service provider.', 'wp-base'), 'Reminder and Follow-up emails' ), 'reverse_log' => array( 'yes', __('Reverse Log', 'wp-base'), sprintf( __('Select "Yes" to reverse the display order of records in %s, from newest to oldest.', 'wp-base' ), '<a class="app-btm" href="'.admin_url("admin.php?page=app_tools&tab=log").'">'.__('log file').'</a>' ) ), + 'schedule_allowed_stats_client' => array( 'paid,confirmed,pending,running,completed,removed', __('Allowed Booking Statuses (Client)', 'wp-base'), __('Clients can select only these booking statuses to be displayed in their schedules', 'wp-base') ), + 'schedule_allowed_stats' => array( 'paid,confirmed,pending,running,completed,removed', __('Allowed Booking Statuses (Provider)', 'wp-base'), __('Service providers can select only these booking statuses to be displayed in their schedules', 'wp-base') ), + 'schedule_clear_cache' => array( 'no', __('Clear Schedules Cache', 'wp-base'), __('To Clear the cache, set "Yes". After save and cache cleared, this setting will automatically turn back to "No".', 'wp-base') ), + 'schedule_client_can' => array( 'yes', __('Clients can Use Schedules', 'wp-base'), __('Whether allow clients use Schedules', 'wp-base') ), 'schedule_desc_admin' => array( self::$_schedule_desc_admin, __('Template for Schedule (Admin)', 'wp-base'), sprintf( __('Bookings in %1$s will be displayed to admin according to this template. <abbr title="%2$s">Booking placeholders</abbr> will be replaced by their real values.', 'wp-base'), '<a class="app-btm" href="'.admin_url("admin.php?page=app_schedules").'">'.__('Booking Schedules').'</a>', WpBConstant::email_desc(1) ) ), + 'schedule_desc_client' => array( self::$_schedule_desc_client, __('Template for Schedule (Client)', 'wp-base'), sprintf( __('Bookings in %1$s will be displayed to the client according to this template. <abbr title="%2$s">Booking placeholders</abbr> will be replaced by their real values.', 'wp-base'), '<a class="app-btm" href="'.admin_url("admin.php?page=app_schedules").'">'.__('Booking Schedules').'</a>', WpBConstant::email_desc(1) ) ), 'schedule_desc_worker' => array( self::$_schedule_desc_worker, __('Template for Schedule (Provider)', 'wp-base'), sprintf( __('Bookings in %1$s will be displayed to service provider according to this template. <abbr title="%2$s">Booking placeholders</abbr> will be replaced by their real values.', 'wp-base'), '<a class="app-btm" href="'.admin_url("admin.php?page=app_schedules").'">'.__('Booking Schedules').'</a>', WpBConstant::email_desc(1) ) ), - 'schedule_allowed_stats' => array( 'paid,confirmed,pending,running,completed,removed', __('Allowed Booking Statuses (Provider)', 'wp-base'), __('Service providers can select only these booking statuses to be displayed in their schedules', 'wp-base') ), 'schedule_show_images' => array( 'yes', __('Show Profile Images', 'wp-base'), __('Whether show service provider profile images in the Schedules', 'wp-base') ), 'send_approved' => array( 'yes', __('Send Approved email', 'wp-base'), __('Whether to send an email after vendor application automatically approved. Note: Admin can always send manual email on Vendors page.', 'wp-base' ), 'Marketplace' ), 'send_cancellation' => array( 'yes', __('Send Cancellation email (Single)', 'wp-base'), __('Whether to send an email after cancellation of the booking. Note: Admin and service provider will also get a copy as separate emails.', 'wp-base' ) ), @@ -581,23 +598,24 @@ 'send_cancellation_sms_admin' => array( 'yes', __('Send Cancellation SMS (Admin)', 'wp-base'), __('Whether to send an SMS after cancellation of the appointment.', 'wp-base'), 'SMS' ), 'send_cancellation_sms_bulk' => array( 'no', __('Send Cancellation SMS (Bulk)', 'wp-base'), __('Same as above but whether to send SMS messages to clients when "bulk" status change of removed is applied to bookings on admin side.', 'wp-base'), 'SMS' ), 'send_cancellation_sms_worker' => array( 'yes', __('Send Cancellation SMS (Provider)', 'wp-base'), __('Whether to send an SMS after cancellation of the appointment.', 'wp-base'), 'SMS' ), + 'send_commission_paid' => array( 'yes', __('Send Commission Paid email', 'wp-base'), __('Whether to send an email after a commission is paid to the vendor.', 'wp-base' ), 'Marketplace' ), 'send_completed' => array( 'no', __('Send Completed email (Single)', 'wp-base'), __('Whether to send an email after an appointment has been completed.', 'wp-base' ) ), 'send_completed_bulk' => array( 'no', __('Send Completed email (Bulk)', 'wp-base'), __('Send email to the client(s) when "bulk" status change of completed is applied to bookings on admin side. ', 'wp-base' ) ), 'send_completed_sms' => array( 'no', __('Send Completed SMS', 'wp-base'), __('Whether to send an SMS after an appointment has been completed.', 'wp-base'), 'SMS' ), 'send_completed_sms_admin' => array( 'no', __('Send Completed SMS (Admin)', 'wp-base'), __('Whether to send an SMS after an appointment has been completed.', 'wp-base'), 'SMS' ), 'send_completed_sms_bulk' => array( 'no', __('Send Completed SMS (Bulk)', 'wp-base'), __('Send SMS to the client(s) when "bulk" status change of completed is applied to bookings on admin side. ', 'wp-base'), 'SMS' ), 'send_completed_sms_worker' => array( 'no', __('Send Completed SMS (Provider)', 'wp-base'), __('Whether to send an SMS after an appointment has been completed.', 'wp-base'), 'SMS' ), - 'send_confirmation' => array( 'yes', __('Send Confirmation email (Single)', 'wp-base'), __('Whether to send an email after confirmation of the booking. Note: Admin and service provider will also get a copy as separate emails.', 'wp-base' ) ), - 'send_confirmation_bulk' => array( 'no', __('Send Confirmation email (Bulk)', 'wp-base'), __('Send Confirmation email to the client(s) when "bulk" status change of confirmed or paid is applied to bookings on admin side. ', 'wp-base' ) ), + 'send_confirmation' => array( 'yes', __('Send Confirmation Email (Single)', 'wp-base'), __('Whether to send an email after confirmation of the booking. Note: Admin and service provider will also get a copy as separate emails.', 'wp-base' ) ), + 'send_confirmation_bulk' => array( 'no', __('Send Confirmation Email (Bulk)', 'wp-base'), __('Send Confirmation Email to the client(s) when "bulk" status change of confirmed or paid is applied to bookings on admin side. ', 'wp-base' ) ), 'send_confirmation_sms' => array( 'yes', __('Send Confirmation SMS', 'wp-base'), __('Whether to send an SMS after confirmation of the booking.', 'wp-base'), 'SMS' ), 'send_confirmation_sms_admin' => array( 'yes', __('Send Confirmation SMS (Admin)', 'wp-base'), __('Whether to send an SMS after confirmation of the booking.', 'wp-base'), 'SMS' ), 'send_confirmation_sms_bulk' => array( 'no', __('Send Confirmation SMS (Bulk)', 'wp-base'), __('Send Confirmation SMS to the client(s) when "bulk" status change of confirmed or paid is applied to bookings on admin side. ', 'wp-base'), 'SMS' ), 'send_confirmation_sms_worker' => array( 'yes', __('Send Confirmation SMS (Provider)', 'wp-base'), __('Whether to send an SMS after confirmation of the booking.', 'wp-base'), 'SMS' ), 'send_dp_reminder' => array( 'yes', __('Send Due Payment Reminder email to the Client', 'wp-base'), __('Whether to send due payment reminder email(s) to the clients in intervals selected below. This email is only sent for the selected booking statuses when balance (total payments minus total price for the appointment) is negative and its absolute value is greater than the amount selected below.', 'wp-base'), 'Reminder and Follow-up emails' ), 'send_follow_up' => array( 'yes', __('Send Follow-up email to the Client', 'wp-base'), __('Whether to send follow-up email(s) to the client', 'wp-base'), 'Reminder and Follow-up emails' ), - 'send_notification' => array( 'yes', __('Send Pending email to Admin', 'wp-base'), __('You may want to receive a notification email whenever a new appointment is made from front end in pending status. This email is only sent if your approval is required. Note: Notification email is also sent to the service provider, if they are allowed to confirm. That is, "Allow Service Provider Confirm Own Appointments" is set as Yes.', 'wp-base' ) ), - 'send_pending' => array( 'yes', __('Send Pending email to the Client (Single)', 'wp-base'), __('Whether to send an email after a booking has been made in pending status.', 'wp-base' ) ), - 'send_pending_bulk' => array( 'no', __('Send Pending email to the Client (Bulk)', 'wp-base'), __('Send email to the client(s) when "bulk" status change of pending is applied to bookings on admin side. ', 'wp-base' ) ), + 'send_notification' => array( 'yes', __('Send Pending Email to Admin', 'wp-base'), __('You may want to receive a notification email whenever a new appointment is made from front end in pending status. This email is only sent if your approval is required. Note: Notification email is also sent to the service provider, if they are allowed to confirm. That is, "Allow Service Provider Confirm Own Appointments" is set as Yes.', 'wp-base' ) ), + 'send_pending' => array( 'yes', __('Send Pending Email to the Client (Single)', 'wp-base'), __('Whether to send an email after a booking has been made in pending status.', 'wp-base' ) ), + 'send_pending_bulk' => array( 'no', __('Send Pending Email to the Client (Bulk)', 'wp-base'), __('Send email to the client(s) when "bulk" status change of pending is applied to bookings on admin side. ', 'wp-base' ) ), 'send_pending_sms' => array( 'yes', __('Send Pending SMS', 'wp-base'), __('Whether to send an SMS after a booking has been made in pending status.', 'wp-base'), 'SMS' ), 'send_pending_sms_admin' => array( 'yes', __('Send Pending SMS (Admin)', 'wp-base'), __('Whether to send an SMS after a booking has been made in pending status.', 'wp-base'), 'SMS' ), 'send_pending_sms_bulk' => array( 'no', __('Send Pending SMS (Bulk)', 'wp-base'), __('Send SMS to the client(s) when "bulk" status change of pending is applied to bookings on admin side. ', 'wp-base'), 'SMS' ), @@ -681,66 +699,68 @@ ); $default_templates = array( - 'approved_subject' => array( __('Your application to SITE_NAME approved!','wp-base'), __('Approved email Subject', 'wp-base'), __('Subject of email which is sent to the applicant informing that their application has been approved', 'wp-base'), 'Marketplace' ), - 'approved_message' => array( self::$_approved_message, __('Approved email Message', 'wp-base'), __('CLIENT, HOME_URL, SITE_NAME, PAGE_LINK (Link to vendor bio page) placeholders can be used.', 'wp-base'), 'Marketplace' ), + 'approved_subject' => array( __('Your application to SITE_NAME approved!','wp-base'), __('Approved Email Subject', 'wp-base'), __('Subject of email which is sent to the applicant informing that their application has been approved', 'wp-base'), 'Marketplace' ), + 'approved_message' => array( self::$_approved_message, __('Approved Email Message', 'wp-base'), __('CLIENT, HOME_URL, SITE_NAME, PAGE_LINK (Link to vendor bio page) placeholders can be used.', 'wp-base'), 'Marketplace' ), 'cancellation_attachment' => array( '', __('Cancellation email Attachment Text', 'wp-base'), __('Contents of PDF file. HTML allowed and will be formatted with related css rules.', 'wp-base'), 'PDF' ), 'cancellation_css' => array( '', __('css Codes for Attachment pdf File', 'wp-base'), __( 'Important: Only css for block elements (p, div, table, td, tr, etc) are allowed.', 'wp-base' ), 'PDF' ), - 'cancellation_message' => array( self::$_cancellation_message, __('Cancellation email Message', 'wp-base'), '' ), + 'cancellation_message' => array( self::$_cancellation_message, __('Cancellation Email Message', 'wp-base'), '' ), 'cancellation_message_sms' => array( self::$_cancellation_message_sms, __('Cancellation SMS Message', 'wp-base'), '', 'SMS' ), 'cancellation_message_sms_admin'=> array( self::$_cancellation_message_sms_admin, __('Cancellation SMS Message (Admin)', 'wp-base'), '', 'SMS' ), 'cancellation_message_sms_worker'=> array( self::$_cancellation_message_sms_admin, __('Cancellation SMS Message (Provider)', 'wp-base'), '', 'SMS' ), 'cancellation_subject' => array( __('Your appointment has been cancelled','wp-base'), __('Cancellation Email Subject', 'wp-base'), '' ), + 'commission_paid_subject' => array( __('Good news! You received a payment from SITE_NAME','wp-base'), __('Commission Paid Email Subject', 'wp-base'), __('Subject of email which informs vendor that a commission payment has been made', 'wp-base'), 'Marketplace' ), + 'commission_paid_message' => array( self::$_commission_paid_message, __('Commission Paid Email Message', 'wp-base'), __('This email template is used when a payment is sent to vendor. VENDOR, HOME_URL, SITE_NAME, PAGE_LINK (Link to vendor bio page), AMOUNT placeholders can be used which will be replaced with their real values..', 'wp-base'), 'Marketplace' ), 'completed_attachment' => array( '', __('Completed email Attachment Text', 'wp-base'), __('Contents of PDF file. HTML allowed and will be formatted with related css rules.', 'wp-base'), 'PDF' ), 'completed_css' => array( '', __('css Codes for Attachment pdf File', 'wp-base'), __( 'Important: Only css for block elements (p, div, table, td, tr, etc) are allowed.', 'wp-base' ), 'PDF' ), - 'completed_message' => array( self::$_completed_message, __('Completed email Message', 'wp-base'), '' ), + 'completed_message' => array( self::$_completed_message, __('Completed Email Message', 'wp-base'), '' ), 'completed_message_sms' => array( self::$_completed_message_sms, __('Completed SMS Message', 'wp-base'), '', 'SMS' ), 'completed_message_sms_admin' => array( self::$_completed_message_sms_admin, __('Completed SMS Message (Admin)', 'wp-base'), '', 'SMS' ), 'completed_message_sms_worker' => array( self::$_completed_message_sms_admin, __('Completed SMS Message (Provider)', 'wp-base'), '', 'SMS' ), - 'completed_subject' => array( __('Your appointment has been completed','wp-base'), __('Completed email Subject', 'wp-base'), '' ), + 'completed_subject' => array( __('Your appointment has been completed','wp-base'), __('Completed Email Subject', 'wp-base'), '' ), 'confirmation_attachment' => array( '', __('Confirmation email Attachment Text', 'wp-base'), __('Contents of PDF file. HTML allowed and will be formatted with related css rules.', 'wp-base'), 'PDF' ), 'confirmation_css' => array( '', __('css Codes for Attachment pdf File', 'wp-base'), __( 'Important: Only css for block elements (p, div, table, td, tr, etc) are allowed.', 'wp-base' ), 'PDF' ), - 'confirmation_message' => array( self::$_confirmation_message, __('Confirmation email Message', 'wp-base'), '' ), + 'confirmation_message' => array( self::$_confirmation_message, __('Confirmation Email Message', 'wp-base'), '' ), 'confirmation_message_sms' => array( self::$_confirmation_message_sms, __('Confirmation SMS Message', 'wp-base'), '' ), 'confirmation_message_sms_admin'=> array( self::$_confirmation_message_sms_admin, __('Confirmation SMS Message (Admin)', 'wp-base'), '', 'SMS' ), 'confirmation_message_sms_worker'=> array( self::$_confirmation_message_sms_admin, __('Confirmation SMS Message (Provider)', 'wp-base'), '', 'SMS' ), 'confirmation_subject' => array( __('Confirmation of your appointment','wp-base'), __('Confirmation Email Subject', 'wp-base'), '' ), 'confirmation_text' => array( self::$_confirmation_text, __('Confirmation Message Dialog Content', 'wp-base'), sprintf( __('This will be displayed to the client in a dialog pop-up after confirmed or paid bookings. All <abbr title="%s">booking placeholders</abbr> can be used. If left empty, a plain javascript message will be displayed instead (see appointment_received in Custom Texts).','wp-base'), WpBConstant::email_desc(1) ) ), 'confirmation_title' => array( 'Confirmation of Your Booking', __('Confirmation Message Dialog Title', 'wp-base'), __('Title of the confirmation pop-up which will be displayed to the client after confirmed or paid bookings.','wp-base') ), - 'declined_subject' => array( __('Your application declined', 'wp-base'), __('Declined email Subject', 'wp-base'), __('Subject of email which is sent to the applicant informing that their application has been declined', 'wp-base'), 'Marketplace' ), - 'declined_message' => array( self::$_declined_message, __('Declined email Message', 'wp-base'), __('CLIENT, HOME_URL, SITE_NAME placeholders can be used.', 'wp-base'), 'Marketplace' ), + 'declined_subject' => array( __('Your application declined', 'wp-base'), __('Declined Email Subject', 'wp-base'), __('Subject of email which is sent to the applicant informing that their application has been declined', 'wp-base'), 'Marketplace' ), + 'declined_message' => array( self::$_declined_message, __('Declined Email Message', 'wp-base'), __('CLIENT, HOME_URL, SITE_NAME placeholders can be used.', 'wp-base'), 'Marketplace' ), 'dp_reminder_attachment' => array( '', __('Due Payment Reminder email Attachment Text', 'wp-base'), __('Contents of PDF file. HTML allowed and will be formatted with related css rules.', 'wp-base'), 'PDF' ), 'dp_reminder_css' => array( '', __('css Codes for Attachment pdf File', 'wp-base'), __( 'Important: Only css for block elements (p, div, table, td, tr, etc) are allowed.', 'wp-base' ), 'PDF' ), - 'dp_reminder_message' => array( self::$_dp_reminder_message, __('Due Payment Reminder email Message', 'wp-base'), '', 'Reminder and Follow-up emails' ), - 'dp_reminder_subject' => array( __('Due Payment Reminder','wp-base'), __('Due Payment Reminder email Subject', 'wp-base'), '', 'Reminder and Follow-up emails' ), + 'dp_reminder_message' => array( self::$_dp_reminder_message, __('Due Payment Reminder Email Message', 'wp-base'), '', 'Reminder and Follow-up emails' ), + 'dp_reminder_subject' => array( __('Due Payment Reminder','wp-base'), __('Due Payment Reminder Email Subject', 'wp-base'), '', 'Reminder and Follow-up emails' ), 'follow_up_attachment' => array( '', __('Follow up email Attachment Text', 'wp-base'), __('Contents of PDF file. HTML allowed and will be formatted with related css rules.', 'wp-base'), 'PDF' ), 'follow_up_css' => array( '', __('css Codes for Attachment pdf File', 'wp-base'), __( 'Important: Only css for block elements (p, div, table, td, tr, etc) are allowed.', 'wp-base' ), 'PDF' ), - 'follow_up_message' => array( self::$_follow_up_message, __('Follow-up email Message', 'wp-base'), '', 'Reminder and Follow-up emails' ), - 'follow_up_subject' => array( __('Warmest greetings from SITE_NAME','wp-base'), __('Follow-up email Subject', 'wp-base'), '', 'Reminder and Follow-up emails' ), + 'follow_up_message' => array( self::$_follow_up_message, __('Follow-up Email Message', 'wp-base'), '', 'Reminder and Follow-up emails' ), + 'follow_up_subject' => array( __('Warmest greetings from SITE_NAME','wp-base'), __('Follow-up Email Subject', 'wp-base'), '', 'Reminder and Follow-up emails' ), 'pending_attachment' => array( '', __('Pending email Attachment Text', 'wp-base'), __('Contents of PDF file. HTML allowed and will be formatted with related css rules.', 'wp-base'), 'PDF' ), 'pending_css' => array( '', __('css Codes for Attachment pdf File', 'wp-base'), __( 'Important: Only css for block elements (p, div, table, td, tr, etc) are allowed.', 'wp-base' ), 'PDF' ), - 'pending_message' => array( self::$_pending_message, __('Pending email Message', 'wp-base'), '' ), + 'pending_message' => array( self::$_pending_message, __('Pending Email Message', 'wp-base'), '' ), 'pending_message_sms' => array( self::$_pending_message_sms, __('Pending SMS Message', 'wp-base'), '', 'SMS' ), 'pending_message_sms_admin' => array( self::$_pending_message_sms_admin, __('Pending SMS Message (Admin)', 'wp-base'), '', 'SMS' ), 'pending_message_sms_worker' => array( self::$_pending_message_sms_admin, __('Pending SMS Message (Provider)', 'wp-base'), '', 'SMS' ), - 'pending_subject' => array( __('We have received your booking','wp-base'), __('Pending email Subject', 'wp-base'), '' ), + 'pending_subject' => array( __('We have received your booking','wp-base'), __('Pending Email Subject', 'wp-base'), '' ), 'pending_text' => array( self::$_pending_message, __('Pending Message Dialog Content', 'wp-base'), sprintf( __('This will be displayed to the client in a dialog pop-up after pending bookings. All <abbr title="%s">booking placeholders</abbr> can be used. If left empty, a plain javascript message will be displayed instead (see appointment_received in Custom Texts).','wp-base'), WpBConstant::email_desc(1) ) ), 'pending_title' => array( 'We have received your submission', __('Pending Message Dialog Title', 'wp-base'), __('Title of the pending pop-up which will be displayed to the client when an appointment submission is received in pending status.','wp-base') ), 'reminder_attachment' => array( '', __('Reminder email Attachment Text', 'wp-base'), __('Contents of PDF file. HTML allowed and will be formatted with related css rules.', 'wp-base'), 'PDF' ), 'reminder_css' => array( '', __('css Codes for Attachment pdf File', 'wp-base'), __( 'Important: Only css for block elements (p, div, table, td, tr, etc) are allowed.', 'wp-base' ), 'PDF' ), - 'reminder_message' => array( self::$_reminder_message, __('Reminder email Message', 'wp-base'), '', 'Reminder and Follow-up emails' ), + 'reminder_message' => array( self::$_reminder_message, __('Reminder Email Message', 'wp-base'), '', 'Reminder and Follow-up emails' ), 'reminder_message_sms' => array( self::$_reminder_message_sms, __('Reminder SMS Message', 'wp-base'), '', 'SMS' ), 'reminder_message_sms_worker' => array( self::$_reminder_message_sms_worker, __('Reminder SMS Message (Provider)', 'wp-base'), '', 'SMS' ), - 'reminder_subject' => array( __('Reminder for your appointment on DATE_TIME','wp-base'), __('Reminder email Subject', 'wp-base'), '', 'Reminder and Follow-up emails' ), + 'reminder_subject' => array( __('Reminder for your appointment on DATE_TIME','wp-base'), __('Reminder Email Subject', 'wp-base'), '', 'Reminder and Follow-up emails' ), 'terms_text' => array( self::$_terms, __('Dialog Content', 'wp-base'), __('Terms & Conditions text. SITE_NAME and HOME_URL placeholders will be replaced by their actual values.','wp-base' ) ), 'terms_title' => array( 'Terms & Conditions', __('Dialog Title', 'wp-base'), __('Title of the pop-up which displays terms and conditions.','wp-base') ), - 'validation_subject' => array( __('Activation for SITE_NAME','wp-base'), __('Validation email Subject', 'wp-base'), __('Subject of email which is sent to vendor in order to validate their email address and activate their account', 'wp-base'), 'Marketplace' ), - 'validation_message' => array( self::$_validation_message, __('Validation email Message', 'wp-base'), __('Must include ACTIVATE placeholder which will be replaced with activation link. CLIENT, HOME_URL, SITE_NAME placeholders can also be used.', 'wp-base'), 'Marketplace' ), - 'vendor_pending_subject' => array( __('Your application to SITE_NAME has been received','wp-base'), __('Vendor Pending email Subject', 'wp-base'), __('Subject of email which informs vendor that application has been received and in pending status', 'wp-base'), 'Marketplace' ), - 'vendor_pending_message' => array( self::$_vendor_pending_message, __('Vendor Pending email Message', 'wp-base'), __('This email template is used when user application is in pending status. CLIENT, HOME_URL, SITE_NAME, PAGE_LINK (Link to vendor bio page) placeholders can be used.', 'wp-base'), 'Marketplace' ), - 'waiting_list_message' => array( self::$_waiting_list_message, __('Submission Received email Message', 'wp-base'), __('Body of email which informs client that their submission has been added to the waiting list.','wp-base') ), - 'waiting_list_notify_message' => array( self::$_waiting_list_notify_message, __('Notification email Message', 'wp-base'), __('Body of email which informs client that there is an opening for the requested time slot. CLAIM should be included in the message so that client can confirm their request is still valid.','wp-base') ), - 'waiting_list_notify_subject' => array( __('Urgent action required for SITE_NAME','wp-base'), __('Notification email Subject', 'wp-base'), __('Subject of email which informs client that there is an opening for the requested time slot.','wp-base') ), - 'waiting_list_subject' => array( __('Your Booking has been added to SITE_NAME waiting list','wp-base'), __('Submission Received email Subject', 'wp-base'), __('Subject of email which informs client that their submission has been added to the waiting list.','wp-base') ), + 'validation_subject' => array( __('Activation for SITE_NAME','wp-base'), __('Validation Email Subject', 'wp-base'), __('Subject of email which is sent to vendor in order to validate their email address and activate their account', 'wp-base'), 'Marketplace' ), + 'validation_message' => array( self::$_validation_message, __('Validation Email Message', 'wp-base'), __('Must include ACTIVATE placeholder which will be replaced with activation link. CLIENT, HOME_URL, SITE_NAME placeholders can also be used.', 'wp-base'), 'Marketplace' ), + 'vendor_pending_subject' => array( __('Your application to SITE_NAME has been received','wp-base'), __('Vendor Pending Email Subject', 'wp-base'), __('Subject of email which informs vendor that application has been received and in pending status', 'wp-base'), 'Marketplace' ), + 'vendor_pending_message' => array( self::$_vendor_pending_message, __('Vendor Pending Email Message', 'wp-base'), __('This email template is used when user application is in pending status. CLIENT, HOME_URL, SITE_NAME, PAGE_LINK (Link to vendor bio page) placeholders can be used.', 'wp-base'), 'Marketplace' ), + 'waiting_list_message' => array( self::$_waiting_list_message, __('Submission Received Email Message', 'wp-base'), __('Body of email which informs client that their submission has been added to the waiting list.','wp-base') ), + 'waiting_list_notify_message' => array( self::$_waiting_list_notify_message, __('Notification Email Message', 'wp-base'), __('Body of email which informs client that there is an opening for the requested time slot. CLAIM should be included in the message so that client can confirm their request is still valid.','wp-base') ), + 'waiting_list_notify_subject' => array( __('Urgent action required for SITE_NAME','wp-base'), __('Notification Email Subject', 'wp-base'), __('Subject of email which informs client that there is an opening for the requested time slot.','wp-base') ), + 'waiting_list_subject' => array( __('Your Booking has been added to SITE_NAME waiting list','wp-base'), __('Submission Received Email Subject', 'wp-base'), __('Subject of email which informs client that their submission has been added to the waiting list.','wp-base') ), ); @@ -418,6 +418,10 @@ if ( '0.0' != $prev_ver && version_compare( $prev_ver, '5.1', '<' ) ) { wpb_upgrade_510(); } + + if ( '0.0' != $prev_ver && version_compare( $prev_ver, '5.9.9', '<' ) ) { + wpb_upgrade_600(); + } do_action( 'app_installed', $current_ver, $prev_ver ); @@ -2687,7 +2691,7 @@ } /** - * Number of *days* that an appointment can be taken (Upper Limit) + * Number of *days* that a booking can be made (Upper Limit) * @param start_ts: Optionally calculate limit based on timestamp of selected time slot (just passed to the filter) * @return integer */ @@ -2918,21 +2922,20 @@ return false; } - // If there is no valid user email try to find one from user data + $valid_email = ''; $maybe_email = wpb_get_app_meta( $app_id, 'email' ); + // If there is no valid user email try to find one from user data if ( ! is_email( $maybe_email ) ) { - $email_found = false; if ( $r->user ) { $app_user = BASE('User')->get_app_userdata( 0, $r->user ); if ( isset( $app_user['email'] ) ) { - $r->email = $app_user['email']; - $email_found = true; + $valid_email = $app_user['email']; } } - if ( ! $email_found ) { + if ( ! $valid_email ) { if ( wpb_is_admin() ) { wpb_log_email( sprintf( __('No valid email is defined for booking #%s','wp-base'), $r->ID ) ); } @@ -2941,7 +2944,7 @@ return false; } } else { - $r->email = $maybe_email; + $valid_email = $maybe_email; } $subject = $this->_replace( @@ -2957,7 +2960,7 @@ $attach = apply_filters( 'app_email_attachment', array(), $r, $context ); $mail_result = wp_mail( - apply_filters( 'app_send_email_client_email', array( $r->email ), $body, $r, $app_id, $context, $resend, $edit ), + apply_filters( 'app_send_email_client_email', array( $valid_email ), $body, $r, $app_id, $context, $resend, $edit ), $subject, $body, $this->message_headers( $context, $r ), @@ -2985,7 +2988,7 @@ wpb_log_email( sprintf( __('%1$s message resent to %2$s for booking #%3$s','wp-base'), ucwords($context_local), - $r->email, + $valid_email, $app_id ) ); @@ -2995,7 +2998,7 @@ wpb_log_email( sprintf( __('%1$s message sent to %2$s for booking #%3$s','wp-base'), ucwords($context_local), - $r->email, + $valid_email, $app_id ) ); @@ -3093,7 +3096,7 @@ return false; } } else { - wpb_log_email( sprintf( __('Message sending to %s for booking #%s has failed.','wp-base'), $r->email, $app_id ) ); + wpb_log_email( sprintf( __('Message sending to %s for booking #%s has failed.','wp-base'), $valid_email, $app_id ) ); do_action( 'app_email_failed', $body, $r, $app_id, $context, $resend, $edit ); } } @@ -3450,7 +3453,7 @@ continue; } - if ( 'edit' == $action && ( ! BASE('FEE') || BASE('FEE')->is_too_late( $r ) ) ) { + if ( 'edit' == $action && wpb_edit_is_too_late( $r ) ) { continue; } else if ( 'cancel' == $action && BASE('Cancel')->is_too_late( $r ) ) { continue; @@ -144,18 +144,26 @@ $this->help_texts = array( 'action' => __('Column header of Action for Bookings shortcode', 'wp-base' ), 'address' => __('Title for Address field in the confirmation form and user page','wp-base'), - 'address_placeholder' => __('Placeholder for Address field in the confirmation form','wp-base'), 'add_to_cart' => __('Button text to add a product to shopping cart of WooCommerce or EDD', 'wp-base'), 'added_to_cart' => __('Message displayed when an item is added to WooCommerce or EDD shopping cart. %s will be replaced with item name.', 'wp-base' ), 'admin' => __('Label for admin user', 'wp-base'), 'agora' => __('Column header of Agora for List of Bookings', 'wp-base' ), 'agora_already_started' => __('Javascript message displayed to the host when he/she is trying to start a meeting which has been already started', 'wp-base'), 'agora_called' => __('Javascript message displayed to the participant when he/she is called to the meeting by the host.','wp-base'), + 'agora_connecting' => __('Message displayed above video streaming area during connection to Agora servers','wp-base'), + 'agora_join' => __('Text for Join button','wp-base'), + 'agora_leave_call' => __('Tooltip text for Leave Call icon','wp-base'), 'agora_meeting_note_host' => __('Default text displayed to the meeting host at the Meeting Room.','wp-base'), 'agora_meeting_note' => __('Default text about general meeting rules.','wp-base'), 'agora_meeting_started' => __('Text displayed to participant when meeting has started. Keep MEETING_LINK placeholder which will be replaced by the link to the Meeting Room page.','wp-base'), + 'agora_no_camera' => __('Javascript error message displayed when no camera and/or mic found or not permitted to use','wp-base'), + 'agora_no_other_camera' => __('Javascript error message displayed when no other camera found to switch to','wp-base'), 'agora_no_meeting' => __('Text displayed when user has no future or current meetings.','wp-base'), 'agora_start_meeting' => __('Label for Start Meeting link','wp-base'), + 'agora_switch_camera' => __('Tooltip text for Switch Camera icon','wp-base'), + 'agora_toggle_mic' => __('Tooltip text for Toggle Microphone icon','wp-base'), + 'agora_toggle_camera' => __('Tooltip text for Toggle Camera icon','wp-base'), + 'agora_switch_camera_failed' => __('Javascript error message diisplayed when camera switch action failed', 'wp-base'), 'agora_waiting_note' => __('Default text for client about how meeting will start.','wp-base'), 'agora_waiting_note_host' => __('Default text for host about how meeting will start.','wp-base'), 'all' => __('Selection in provider dropdown when no particular provider is selected', 'wp-base'), @@ -268,7 +276,6 @@ 'checkout_button_tip' => __('Tooltip text for checkout button', 'wp-base' ), 'choose_image' => __('Label to select an image for service or avatar', 'wp-base'), 'city' => __('Title for City field in the confirmation form and user page','wp-base'), - 'city_placeholder' => __('Placeholder for City field in the confirmation form','wp-base'), 'clear' => __('Clear signature button text', 'wp-base' ), 'clear_all' => __('Label for Clear All','wp-base'), 'click_for_waiting_list' => __('Hint text to book as Waiting List','wp-base'), @@ -338,7 +345,6 @@ 'edit_saved' => __('Javascript message displayed after changes on booking have been saved', 'wp-base' ), 'edit_too_early' => __('Javascript message displayed when client attempts to edit an appointment with a start time which falls in lead time (lower limit) margin. Keep %s which will be replaced by the latest time client can pick.','wp-base'), 'email' => __('Title for email field in the confirmation form and user page','wp-base'), - 'email_placeholder' => __('Placeholder for email field in the confirmation form','wp-base'), 'email_unmatch' => __('Javascript message displayed when logged in client attempts to make a booking with email of another registered user','wp-base'), 'empty_cart' => __('Label for Empty Cart button', 'wp-base'), 'end' => __('Label for end time in confirmation form', 'wp-base' ), @@ -367,7 +373,6 @@ 'fee' => __('Label for Fee', 'wp-base'), 'full_name' => __('Title for Full Name field in the forms','wp-base'), 'first_name' => __('Title for First Name field in the confirmation form and user page','wp-base'), - 'first_name_placeholder' => __('Placeholder for First Name field in the confirmation form','wp-base'), 'friday' => __('Friday', 'wp-base'), 'friday_initial' => __('Initial letter of Friday', 'wp-base'), 'friday_short' => __('Short form of Friday', 'wp-base'), @@ -406,7 +411,6 @@ 'language' => __('Label for Client Language', 'wp-base' ), 'lasts' => __('Title for Duration of the selected service(s) in the confirmation form', 'wp-base' ), 'last_name' => __('Title for Last Name field in the confirmation form and user page','wp-base'), - 'last_name_placeholder' => __('Placeholder for Last Name field in the confirmation form','wp-base'), 'length_menu' => __('Localization for pulldown menu that selects the number of records to be displayed in the tables. Keep _MENU_ which stands for the pulldown menu itself.', 'wp-base'), 'limit_exceeded' => __('Javascript message displayed when selected number of appointments exceeds permitted number. Keep %d which will be replaced by actual limit', 'wp-base'), 'list' => __('Text for List Button', 'wp-base' ), @@ -511,7 +515,6 @@ 'mv_video' => __('Label for Video in user profile','wp-base'), 'mv_wait' => __('Account activation complete message. Displayed when vendor application awaits admin approval', 'wp-base' ), 'name' => __('Title for Name field in the confirmation form','wp-base'), - 'name_placeholder' => __('Placeholder for Name field in the confirmation form','wp-base'), 'next' => __('Pagination button text for Next','wp-base'), 'next_day' => __('Note added to details field on confirmation form to notify a booking ending next day', 'wp-base' ), 'next_month' => __('Pagination button text for Next Month','wp-base'), @@ -585,7 +588,6 @@ 'pending_payment' => __('Text for status pending and an automatic payment via a gateway is expected', 'wp-base'), 'person_types' => __('Label for Person Types', 'wp-base' ), 'phone' => __('Title for Phone field in the confirmation form and user page','wp-base'), - 'phone_placeholder' => __('Placeholder for Phone field in the confirmation form','wp-base'), 'please_wait' => __('Message displayed while submitting a form', 'wp-base' ), 'pm_button_text' => __('Private Message button text. RECIPIENT placeholder will be replaced by the display name of the other party', 'wp-base'), 'pop_placeholder' => __('Placeholder for participant phone field. %d will be replaced by the order in the list.', 'wp-base' ), @@ -674,7 +676,6 @@ 'standby' => __('Text for status stand by', 'wp-base'), 'start' => __('Label for start time in confirmation form', 'wp-base' ), 'state' => __('Title for State field in the confirmation form and user page','wp-base'), - 'state_placeholder' => __('Placeholder for State field in the confirmation form','wp-base'), 'status' => __('Column header of Status for List of Bookings', 'wp-base' ), 'store' => __('Label for Store', 'wp-base' ), 'stores' => __('Label for Stores', 'wp-base' ), @@ -696,7 +697,8 @@ 'timezone' => __('Label for Time Zone', 'wp-base'), 'timezone_title' => __('Title of Time Zone selection pulldown menu', 'wp-base'), 'today' => __('Button text for Today in Schedules', 'wp-base' ), - 'too_late' => __('Javascript message displayed when client attempts to cancel/edit/add an appointment, but it is too late','wp-base'), + 'too_early' => __('Javascript message or tooltip text displayed when it is early to edit a booking','wp-base'), + 'too_late' => __('Javascript message or tooltip text displayed when client attempts to cancel/edit/add a booking, but it is too late','wp-base'), 'too_less' => __('Javascript message displayed when selected number of appointments is less than the permitted number. Keep %d which will be replaced by actual limit', 'wp-base'), 'total_paid' => __('Column header of Total Paid amount for List of Bookings', 'wp-base'), 'trial_service_limit' => __('Javascript error message when client attempts to select a time slot which would exceed trial limit. Keep LIMIT placeholder which will be replaced by set limit value.', 'wp-base'), @@ -737,7 +739,6 @@ 'yes' => __('Translation for Yes, e.g. to show a check box is checked','wp-base'), 'your_price' => __('Label for Your Rate field in user profile. The same for hourly and fixed rates.','wp-base'), 'zip' => __('Title for Postcode field in the confirmation form and user page','wp-base'), - 'zip_placeholder' => __('Placeholder for Postcode field in the confirmation form','wp-base'), 'zoom' => __('Column header of Zoom for List of Bookings', 'wp-base' ), 'zoom_id' => __('Meeting ID label in List of Bookings','wp-base'), 'zoom_join' => __('Button label for Join to Meeting','wp-base'), @@ -781,18 +782,26 @@ $this->default_texts = array( 'action' => __('Action', 'wp-base' ), 'address' => __('Address','wp-base'), - 'address_placeholder' => ' ', 'add_to_cart' => __('Add to Cart', 'wp-base'), 'added_to_cart' => __( '%s has been added to your shopping cart.', 'wp-base' ), 'admin' => __('Admin', 'wp-base'), 'agora' => __('Agora', 'wp-base' ), 'agora_already_started' => __('This meeting has already started.', 'wp-base'), 'agora_called' => __('Meeting has been started by the host and you are being called. Please confirm to join the meeting.','wp-base'), + 'agora_connecting' => __('Connecting...','wp-base'), + 'agora_join' => __('Join','wp-base'), + 'agora_leave_call' => __('Leave Call','wp-base'), 'agora_meeting_note' => __(' ','wp-base'), - 'agora_meeting_note_host' => __('You can start by clicking START_MEETING link immediately. If you do so, participant will be able to attend to the meeting even before meeting time arrives.','wp-base'), + 'agora_meeting_note_host' => __('You can start by clicking START_MEETING link immediately. If you do so, participant will be able to attend to the meeting even before the scheduled meeting time.','wp-base'), 'agora_meeting_started' => __('Meeting already started. Please click MEETING_ROOM to join.','wp-base'), + 'agora_no_camera' => __('Could not access microphone and/or camera. Please check permissions','wp-base'), + 'agora_no_other_camera' => __('Could not find another camera to switch to','wp-base'), 'agora_no_meeting' => __('You don\'t have any upcoming or running meetings.','wp-base'), 'agora_start_meeting' => __('Start Meeting','wp-base'), + 'agora_switch_camera' => __('Switch Camera','wp-base'), + 'agora_toggle_mic' => __('Toggle Microphone','wp-base'), + 'agora_toggle_camera' => __('Toggle Camera','wp-base'), + 'agora_switch_camera_failed' => __('Failed to switch camera', 'wp-base'), 'agora_waiting_note' => __('When countdown expires, you will be redirected to the Meeting Room. Please keep this page open until then.','wp-base'), 'agora_waiting_note_host' => __('You are the host of this meeting. You can click MEETING_ROOM to go to the Meeting Room, or wait here. If you prefer to stay, when countdown expires, you will be redirected to the Meeting Room. Please keep this page open until then.','wp-base'), 'all' => __('All', 'wp-base'), @@ -823,7 +832,7 @@ 'blacklisted' => __('We are sorry, but the provided email cannot be accepted. Please contact website admin for details.', 'wp-base'), 'booking' => __('Processing booking...','wp-base'), 'booking_id' => __('Booking','wp-base'), - 'booking_approved' => __( 'Selected booking approved', 'wp-base' ), + 'booking_approved' => __('Selected booking approved', 'wp-base' ), 'booking_closed' => __('Booking closed', 'wp-base'), 'book_now_long' => __('Book Now for START', 'wp-base'), 'book_now_short' => __('Book Now', 'wp-base'), @@ -905,7 +914,6 @@ 'choose_image' => __('Choose Image', 'wp-base'), 'checkout_button_tip' => __('Click to submit', 'wp-base' ), 'city' => __('City','wp-base'), - 'city_placeholder' => ' ', 'clear' => __('Clear', 'wp-base' ), 'clear_all' => __('Clear All', 'wp-base' ), 'click_for_waiting_list' => __('Click to add to Waiting List','wp-base'), @@ -936,7 +944,6 @@ 'continue_button' => __('Add Another Slot', 'wp-base'), 'countdown_title' => __('Your next appointment', 'wp-base'), 'country' => __('Country','wp-base'), - 'country_placeholder' => ' ', 'coupon' => __('Discount Code', 'wp-base'), 'coupon_invalid' => __('Code is invalid', 'wp-base'), 'coupon_valid' => __('Code is valid', 'wp-base'), @@ -969,13 +976,14 @@ 'duration' => __('Duration', 'wp-base'), 'edd_payment' => __('EDD', 'wp-base'), 'edit' => __('Edit', 'wp-base'), - 'edit_app_confirm' => __('You are about to edit an existing appointment. Click OK to continue.','wp-base'), + 'edit_app_confirm' => __('You are about to edit an existing booking. Click OK to continue.','wp-base'), 'edit_button' => __('Edit','wp-base'), 'edit_disabled' => __('Editing of bookings is disabled. Please contact website admin.','wp-base'), + 'edit_error' => __('% parameter of the booking cannot be edited.','wp-base'), 'edit_saved' => __('Booking successfully changed.', 'wp-base' ), + 'edit_status_error' => __('Bookings in this stage cannot be edited.','wp-base'), 'edit_too_early' => __('New time of the booking is too close. Please select a time later than %s.','wp-base'), 'email' => __('Email','wp-base'), - 'email_placeholder' => ' ', 'email_unmatch' => __('Submitted email does not belong to you','wp-base'), 'empty_cart' => __('Empty Cart', 'wp-base'), 'end' => __('End', 'wp-base'), @@ -1006,7 +1014,6 @@ 'fee' => __('Fee', 'wp-base'), 'full_name' => __('Full Name','wp-base'), 'first_name' => __('First Name','wp-base'), - 'first_name_placeholder' => ' ', 'friday' => $method_exists ? $wp_locale->get_weekday( 5 ) : 'Friday', 'friday_initial' => $method_exists ? $wp_locale->get_weekday_initial( $wp_locale->get_weekday( 5 ) ) : 'F', 'friday_short' => $method_exists ? $wp_locale->get_weekday_abbrev( $wp_locale->get_weekday( 5 ) ) : 'Fr', @@ -1036,7 +1043,7 @@ 'jitsi_already_started' => __('This meeting has already started.', 'wp-base'), 'jitsi_called' => __('Meeting has been started by the host and you are being called. Please confirm to join the meeting.','wp-base'), 'jitsi_meeting_note' => __(' ','wp-base'), - 'jitsi_meeting_note_host' => __('You can start by clicking START_MEETING link immediately. If you do so, participant will be able to attend to the meeting even before meeting time arrives.','wp-base'), + 'jitsi_meeting_note_host' => __('You can start by clicking START_MEETING link immediately. If you do so, participant will be able to attend to the meeting even before the scheduled meeting time.','wp-base'), 'jitsi_meeting_started' => __('Meeting already started. Please click MEETING_ROOM to join.','wp-base'), 'jitsi_no_meeting' => __('You don\'t have any upcoming or running meetings.','wp-base'), 'jitsi_start_meeting' => __('Start Meeting','wp-base'), @@ -1045,7 +1052,6 @@ 'language' => __('Language', 'wp-base' ), 'lasts' => __('Lasts', 'wp-base' ), 'last_name' => __('Last Name','wp-base'), - 'last_name_placeholder' => ' ', 'length_menu' => __('Display _MENU_ records', 'wp-base'), 'limit_exceeded' => __('Number of time slot limit (%d) has been reached.', 'wp-base'), 'list' => __('List', 'wp-base' ), @@ -1061,7 +1067,7 @@ 'logged_message' => __('Click a free day to apply for an appointment.', 'wp-base'), 'logging_in' => __('Preparing login...','wp-base'), 'login' => __('Login', 'wp-base'), - 'login_for_cancel' => __('Please login in order to cancel the appointment','wp-base'), + 'login_for_cancel' => __('Please login in order to cancel the booking','wp-base'), 'login_for_confirm' => __('Please login in order to confirm the booking','wp-base'), 'login_for_edit' => __('Please login in order to edit the booking','wp-base'), 'login_message' => __('Click here to login:', 'wp-base' ), @@ -1081,6 +1087,7 @@ 'min_short' => __('min','wp-base'), 'missing_extra' => __('Please select at least one option from the list','wp-base'), 'missing_field' => __('Please fill in the required field','wp-base'), + 'missing_id' => __('Missing booking ID or service','wp-base'), 'missing_terms_check' => __('Please accept Terms and Conditions','wp-base'), 'monday' => $method_exists ? $wp_locale->get_weekday( 1 ) : 'Monday', 'monday_initial' => $method_exists ? $wp_locale->get_weekday_initial( $wp_locale->get_weekday( 1 ) ) : 'M', @@ -1149,7 +1156,6 @@ 'mv_video' => __('Video','wp-base'), 'mv_wait' => __('Please wait until you receive an email from us about the result of your vendor application.', 'wp-base' ), 'name' => __('Name','wp-base'), - 'name_placeholder' => ' ', 'next' => __('Next','wp-base'), 'next_day' => __('Ends next day', 'wp-base' ), 'next_month' => __('Next Month','wp-base'), @@ -1220,7 +1226,6 @@ 'pending_payment' => __('Pending Payment', 'wp-base'), 'person_types' => __('Pax Details', 'wp-base' ), 'phone' => __('Phone','wp-base'), - 'phone_placeholder' => ' ', 'please_wait' => __('Please Wait...', 'wp-base' ), 'pm_button_text' => __('PM to RECIPIENT', 'wp-base'), 'pop_placeholder' => __('Phone of the %d. guest', 'wp-base' ), @@ -1243,6 +1248,7 @@ 'provider_name' => __('Specialist', 'wp-base' ), 'provider_names' => __('Specialists', 'wp-base' ), 'quota' => __('Sorry, but you have reached the booking quota. No additional bookings are allowed.', 'wp-base'), + 'read_more' => __('Read More »','wp-base'), 'reading' => __('Reading data...','wp-base'), 'redirect' => __('Login required for this action. Now you will be redirected to login page.', 'wp-base' ), 'reference' => __('Reference','wp-base'), @@ -1309,7 +1315,6 @@ 'standby' => __('Stand by', 'wp-base'), 'start' => __('Start', 'wp-base'), 'state' => __('State','wp-base'), - 'state_placeholder' => ' ', 'status' => __('Status', 'wp-base' ), 'store_page' => __('Store Page', 'wp-base' ), 'store' => __('Store', 'wp-base' ), @@ -1331,7 +1336,8 @@ 'timezone' => __('Time Zone', 'wp-base'), 'timezone_title' => __('Select your timezone', 'wp-base'), 'today' => __('Today', 'wp-base' ), - 'too_late' => __('We are sorry, but it is too late for this action.','wp-base'), + 'too_early' => __('It is too early for this action.','wp-base'), + 'too_late' => __('It is too late for this action.','wp-base'), 'too_less' => __('You should select at least %d time slots to proceed.', 'wp-base'), 'total_paid' => __('Paid', 'wp-base'), 'trial_service_limit' => __('You have exceeded trial services limit LIMIT', 'wp-base'), @@ -1372,7 +1378,6 @@ 'yes' => __('Yes','wp-base'), 'your_price' => __('Your Rate','wp-base'), 'zip' => __('Postcode','wp-base'), - 'zip_placeholder' => ' ', 'zoom' => __('Zoom', 'wp-base' ), 'zoom_id' => __('Zoom ID','wp-base'), 'zoom_join' => __('Join','wp-base'), @@ -46,7 +46,6 @@ public function add_hooks(){ add_action( 'init', array( $this, 'init' ) ); add_filter( 'app_conf_form_fields', array( $this, 'conf_form_fields' ) ); // Add category to definition of fields - add_filter( 'app_confirmation_before_service', array( $this, 'confirmation' ), 20, 3 ); // Add to confirmation form add_filter( 'app_pre_confirmation_reply', array( $this, 'pre_confirmation' ), 20, 2 ); add_filter( 'app_email_replace_pre', array( $this, 'email_replace' ), 10, 3 ); @@ -81,17 +80,11 @@ } /** - * Add location to confirmation form + * Add location to confirmation form - DEPRECATED * @since 2.0 + * @until WP Base 6.0 */ public function confirmation( $ret, $app_id, $editing ) { - if ( wpb_is_hidden( 'category' ) ) { - return $ret; - } - - $ret .= '<div class="app-conf-category">'; - $ret .= '</div>'; - return $ret; } Only in /home/deploy/wp-safety.org/data/plugin-versions/wp-base-booking-of-appointments-services-and-events/5.9.0/includes/freeons: front-end-edit.php @@ -6,8 +6,8 @@ * ID: 706 * Category: Free * Author: Hakan Ozevin - * Version: 5.1.1 - * WPB requires: 5.1.0 + * Version: 5.2.0 + * WPB requires: 5.8.0 * * Copyright © 2018-2022 Hakan Ozevin * @package WP BASE @@ -87,9 +87,9 @@ add_action( 'wp_ajax_test_service_changed', array( $this, 'service_changed' ) ); // Update provider field by ajax add_filter( 'app_statuses', array( $this, 'get_statuses' ), 30 ); // Modify array of statuses - add_filter( 'app_edit_allowed_status', array( $this, 'allowed_statuses' ), 16, 3 ); // Modify allowed edit/cancel statuses - add_filter( 'app_cancel_allowed_status', array( $this, 'allowed_statuses' ), 16, 3 ); // Modify allowed edit/cancel statuses - add_filter( 'app_list_status', array( $this, 'listing_statuses' ), 16, 1 ); // Modify default statuses of Listing shortcode + add_filter( 'app_edit_allowed_status', array( $this, 'allowed_statuses' ), 16 ); // Modify allowed edit/cancel statuses + add_filter( 'app_cancel_allowed_status', array( $this, 'allowed_statuses' ), 16 ); // Modify allowed edit/cancel statuses + add_filter( 'app_list_status', array( $this, 'listing_statuses' ), 16 ); // Modify default statuses of Listing shortcode add_filter( 'app_reserved_status_query', array( $this, 'status_query' ), 16, 2 ); // Modify reserved statuses query add_filter( 'app_admin_apps_sql', array( $this, 'admin_apps_sql' ), 16, 5 ); // Modify admin side query to display test bookings add_filter( 'app_admin_apps_where', array( $this, 'admin_apps_where' ), 16, 2 ); // Modify admin side query to filter test bookings @@ -103,7 +103,7 @@ * Modify all statuses array and add test status inside */ public function get_statuses( $s ) { - $s['test'] = $this->a->get_text('test'); + $s['test'] = wpb_get_text('test'); return $s; } @@ -111,7 +111,7 @@ * Modify allowed statuses array and add test status inside * @return array */ - public function allowed_statuses( $statuses, $app_id, $args ) { + public function allowed_statuses( $statuses ) { $statuses[] = 'test'; return $statuses; } @@ -623,7 +623,7 @@ public function service_changed() { if ( ! isset( $_POST['test_service'] ) ) { $error = WpBDebug::is_debug() - ? $this->a->get_text('error') + ? wpb_get_text('error') : sprintf( __('POST["test_service"] is empty in %1$s line %2$d in version %3$s','wp-base'), basename(__FILE__), __LINE__, @@ -22,6 +22,10 @@ private $args_arr = array(); private $current_id = ''; + + private $client_data = array(); + + public $assets_called; /** * WP BASE Core + Front [+Admin] instance @@ -40,10 +44,55 @@ */ public function add_hooks() { add_shortcode( 'app_list', array( $this,'display' ) ); + add_filter( 'the_posts', array( $this, 'maybe_load_assets' ), 16 ); add_action( 'wp_ajax_app_prepare_print', array( $this, 'prepare_print' ) ); add_action( 'wp_ajax_nopriv_app_prepare_print', array( $this, 'prepare_print' ) ); add_action( 'wp_ajax_app_show_children_in_tooltip', array( $this, 'show_children_in_tooltip' ) ); add_action( 'wp_ajax_nopriv_app_show_children_in_tooltip', array( $this, 'show_children_in_tooltip' ) ); + add_action( 'wp_ajax_app_listing_edit', 'wpb_listing_inline_edit' ); + add_action( 'wp_ajax_app_listing_update', 'wpb_listing_inline_edit_update' ); + add_action( 'wp_ajax_app_listing_save', 'wpb_listing_inline_edit_save' ); + + // add_action( 'init', array( $this, 'handle_edit' ), 200 ); // Handle editing via link + } + + /** + * Check if we will add css files and Ensure that they are loaded last + */ + public function maybe_load_assets( $posts ) { + + foreach ( $posts as $post ) { + + if ( is_object( $post ) && has_shortcode( $post->post_content, 'app_list' ) ) { + $this->request_assets(); + break; + } + } + + return $posts; + } + + public function request_assets(){ + add_filter( 'app_is_admin_page', '__return_true' ); + add_filter( 'app_requires_front', '__return_true' ); + add_filter( 'app_can_use_dialog', '__return_false' ); + add_action( 'wp_enqueue_scripts', array( $this, 'load_assets' ), 14 ); + } + + /** + * Load js and css files + */ + public function load_assets( ) { + if ( ! empty( $this->assets_called ) ) { + return; + } + + wp_enqueue_style( 'wp-base-admin-front', WPB_PLUGIN_URL . '/css/front-admin.css', array(), WPB_VERSION ); + add_action( 'wp_print_styles', array( BASE('Assets'), 'load_admin_css' ), 12 ); + add_action( 'wp_enqueue_scripts', array( BASE('Assets'), 'load_admin' ), 16 ); + remove_action( 'wp_enqueue_scripts', array( BASE('Assets'), 'load_front' ), 20 ); + + $this->assets_called = true; } /** @@ -55,6 +104,10 @@ $allowed = array( 'id','created','location','location_address','service','worker','owner','client','email','phone','city','address', 'zip','country','note','price','date_time','end_date_time','date','day','time','status','pdf','balance', 'deposit','total_paid', 'security', 'fee', 'woocommerce_order_id', 'timezone', 'language', 'client_ip', ); + + if ( wpb_edit_can_override( $args ) || wpb_can_worker_edit() || wpb_can_client_edit() ) { + $allowed[] = 'edit'; + } # Filter pdf, paypal depending on existence of addons $allowed = array_flip( $allowed ); @@ -67,6 +120,22 @@ } /** + * Add Editing Panel HTML to the page & call scripts + * @since 6.0 + * @return string + */ + public function render_panel() { + + wp_enqueue_script( 'app-schedules' ); + + ob_start(); + + wpb_editing_panel_html(); + + return ob_get_clean(); + } + + /** * Shortcode showing user's or worker's, or all appointments * @since 2.0 */ @@ -125,8 +194,8 @@ if ( empty( $statuses ) ) { return WpBDebug::debug_text( __('Check "status" parameter in List shortcode','wp-base') ) ; } - - wpb_add_action_footer( $this ); + + wpb_add_action_footer( $this, 1000 ); $can_edit = wpb_current_user_can( $cap ); $stat = wpb_listing_stat_sql( $statuses ); @@ -157,11 +226,11 @@ } else { $q = $this->worker_sql( $what, $cap, $user_id ); $event_sql = wpb_listing_event_sql( $user_id ); - + $query = " SELECT * FROM " . $this->a->app_table . " WHERE ({$q} OR {$event_sql}) AND ({$stat}) AND {$datetime_sql} AND ({$service_sql}) ORDER BY ". $this->a->sanitize_order_by( $order_by ); - + $results = $this->a->db->get_results( $query, OBJECT_K ); } } else if ( 'all' == $what ) { @@ -184,14 +253,16 @@ $hard_limit = false; $this->colspan = 0; - $ret = ''; - $ret .= '<div class="app-sc app-list-wrapper table-responsive">'; - + $ret = '<div class="wrap app-front-admin app-clearfix">'; + $ret .= '<div class="app-sc app-manage app-form app-list-wrapper table-responsive">'; + if ( apply_filters( 'app_list_show_print', true, $args ) ) { $ret .= '<div class="app-print-list-wrap"><span class="dashicons dashicons-printer app-ml10"></span>'; $ret .= '<a href="javascript:void(0)" class="app-print-list app-ml10 app-b" data-print_target="">'. esc_html( __( 'Print All', 'wp-base' ) ) .'</a></div>'; } + $ret .= self::render_panel(); + $ret = apply_filters( 'app_list_before_table', $ret, $args ); $ret .= '<table style="width:100%" data-args="'.wpb_esc_json( wp_json_encode( $args ) ).'" id="'.esc_attr($id).'" class="app-list dt-responsive display dataTable nowrap">'; $ret .= '<caption>'. $this->title( $title, $what, $cap, $user_id ). '</caption>'; @@ -229,7 +300,7 @@ $no_results = false; - $ret .= '<tr id="app-tr-'.$r->ID.'" class="app-service-'.$r->service.' app-worker-'.$r->worker.'">'; + $ret .= '<tr id="app-tr-'.esc_attr($r->ID).'" data-app_id="'.esc_attr($r->ID).'" class="app-service-'.esc_attr($r->service).' app-worker-'.esc_attr($r->worker).'">'; foreach( $cols as $col ) { @@ -241,7 +312,17 @@ continue; } - $ret .= '<td class="'.$col.'-app-mng">'; + if ( 'client' == $col ) { + $order = $this->client_raw_name( $r->ID, $r ); + } else if ( 'end_date_time' == $col ) { + $order = $r->end; + } else if ( in_array( $col, array('date_time', 'date', 'day', 'time') ) ) { + $order = $r->start; + } else { + $order = ''; + } + + $ret .= '<td class="'.$col.'-app-mng"'.($order ? ' data-order="'. esc_attr( $order ) .'"' : '').'>'; $ret .= $this->table_cell( $col, $r, $args ); $ret .= '</td>'; @@ -274,11 +355,40 @@ $ret = apply_filters( 'app_list_table', $ret, $args, $results ); $ret .= '</div>'; + $ret .= '</div>'; return $ret; } /** + * Find client name from booking without HTML + * @since 6.0.0 + * @return string + */ + private function client_raw_name( $app_id, $r ) { + if ( isset( $this->client_data[ $app_id ] ) ) { + return $this->client_data[ $app_id ]['raw_name']; + } else { + $this->client_data[ $app_id ] = BASE('User')->get_client_name( $app_id, $r, 'full' ); + return $this->client_data[ $app_id ]['raw_name']; + } + } + + /** + * Find client name from booking with HTML + * @since 6.0.0 + * @return string + */ + private function client_name( $app_id, $r ) { + if ( isset( $this->client_data[ $app_id ] ) ) { + return $this->client_data[ $app_id ]['name']; + } else { + $this->client_data[ $app_id ] = BASE('User')->get_client_name( $app_id, $r, 'full' ); + return $this->client_data[ $app_id ]['name']; + } + } + + /** * Print script * @return none */ @@ -295,7 +405,7 @@ args: JSON.stringify(args), ajax_nonce: _app_.iedit_nonce }; - + $.infoPanel("please_wait"); $.post(_app_.ajax_url, data, function (r) { @@ -310,6 +420,37 @@ } }, "json"); }); + + $(".app-readonly input, .app-readonly textarea").prop("readonly", true ); + + $(document).on("click", ".app-list-edit", function (e) { + e.preventDefault(); + var $this = $(this); + if ($this.hasClass("app-disabled-button")) { + return false; + } + + var par = $this.parents("table").first(); + // par.find(".app-list-edit").removeClass("app-disabled-button"); + par.find("tr").css("opacity", 1); + $this.addClass("app-disabled-button"); + $this.closest("tr").css("opacity",_app_.opacity); + + var app_id = $this.data("app_id"); + var arg = {}; + arg.event = {}; + arg.fee = {}; + arg.event.id = app_id; + arg.fee.post_id = _app_.post_id; + arg.fee.author_id = parseInt(_app_.author_id); + arg.fee.cap = $this.data("cap"); + arg.fee.lang = _app_.lang; + arg.fee.override = $this.data("override"); + arg.fee.edit_btn = ".app-list-edit[data-app_id='"+ app_id +"']"; + arg.fee.list_table = par; + + $.WPB_Quickbook.upsert( 'edit', arg ); + }); }); </script> <?php @@ -327,7 +468,7 @@ $args = isset( $_POST['args'] ) ? json_decode( wpb_clean( wp_unslash( $_POST['args'] ) ), true ) : array(); $args['_children_of'] = absint( wpb_clean( $_POST['app_id'] ) ); $args['title'] = __('Connected bookings','wp-base'); - + add_filter( 'app_list_allowed_columns', array( $this, 'remove_button_cols' ) ); wp_send_json( array( 'result' => preg_replace( '%<thead(.*?)</thead>%', '', $this->display( $args ) ) ) ); @@ -342,8 +483,8 @@ wpb_check_ajax_referer(); $args = json_decode( wpb_clean( wp_unslash( $_POST['args'] ) ), true ); - - add_filter( 'app_list_allowed_columns', array( $this, 'remove_button_cols' ) ); + + add_filter( 'app_list_allowed_columns', array( $this, 'remove_button_cols' ), 1000 ); $table = $this->display( $args ); @@ -356,11 +497,11 @@ */ public function remove_button_cols( $cols ) { $cols = array_flip( $cols ); - - foreach( array( 'cancel', 'confirm', 'edit', 'pdf', 'zoom', 'jitsi', 'agora', 'pay', 'gcal', 'private_message' ) as $b ) { + + foreach( array( 'cancel', 'confirm', 'edit', 'pdf', 'zoom', 'jitsi', 'agora', 'pay', 'gcal', 'google_meet', 'private_message' ) as $b ) { unset( $cols[ $b ] ); } - + return array_flip( $cols ); } @@ -564,7 +705,7 @@ case 'provider': case 'worker': $ret .= $this->a->get_worker_name( $r->worker ); break; case 'owner': $ret .= $this->a->get_worker_name( wpb_get_service_owner( $r->service ) ); break; - case 'client': $ret .= BASE('User')->get_client_name( $r->ID, $r, true ). apply_filters( 'app_bookings_add_text_after_client', '', $r->ID, $r ); break; + case 'client': $ret .= $this->client_name( $r->ID, $r ). apply_filters( 'app_bookings_add_text_after_client', '', $r->ID, $r ); break; case 'price': $ret .= wpb_format_currency( $r->price ); break; case 'deposit': $ret .= wpb_format_currency( $r->deposit ); break; case 'total_paid': $ret .= wpb_format_currency( $paid/100 ); break; @@ -590,6 +731,7 @@ case 'timezone': case 'language': case 'client_ip': $ret .= $booking->get_meta( $col ); break; + case 'edit': $ret .= self::table_cell_edit( $r, $args ); break; case $col: $ret .= apply_filters( 'app_list_add_cell', '', $col, $r, $args );break; } @@ -631,112 +773,122 @@ private function is_parent( $r ) { return ( ! $r->parent_id && ( $this->a->is_app_recurring( $r->ID ) || $this->a->is_app_package( $r->ID ) ) ); } + + /** + * Prepare FEE Button cell + * @return string + */ + public static function table_cell_edit( $r, $args ) { + if ( wpb_edit_is_allowed( $r, $args ) ) { + $_disabled = ''; + $title = ''; + } else { + $_disabled = ' app-disabled-button'; -} - BASE('Listing')->add_hooks(); -} - -/** - * Build service SQL - * @param $service integer|string|array Service ID, service name, multiple service IDs separated with comma or array of service IDs/names - * @since 5.4.0 - * @return string - */ -function wpb_listing_service_sql( $service ) { - $service_sql = ''; - if ( $service ) { - $services = is_array( $service ) ? $service : explode( ',', $service ); - foreach ( $services as $s ) { - if ( ! is_numeric( $s ) ) { - $s = BASE()->find_service_id_from_name( $s ); - } - - # Allow only defined services - if ( BASE()->service_exists( $s ) ) { - $service_sql .= " service=".trim( $s )." OR "; + if ( wpb_edit_is_too_late( $r ) ) { + $title = 'title="'. wpb_get_text('too_late').'"'; + } else if ( wpb_edit_is_too_early( $r ) ) { + $title = 'title="'. wpb_get_text('too_early').'"'; + } else if ( ! wpb_can_worker_edit() && ! wpb_can_client_edit() ) { + $title = 'title="'. wpb_get_text('unauthorised').'"'; + } else { + $title = 'title="'. wpb_get_text('not_possible').'"'; } } - $service_sql = rtrim( $service_sql, "OR " ); - } + $button_text = ! empty( $args['edit_button'] ) ? $args['edit_button'] : wpb_get_text('edit_button'); + $class = ! empty( $args['button_class'] ) ? $args['button_class'] : 'ui-button ui-state-default'; + + $ret = '<button '.$title.' class="app-list-edit '.$class.$_disabled.'" data-app_id="'.$r->ID.'" data-cap="'.$args['cap'].'" data-override="'.$args['override'].'">'.$button_text.'</button>'; - if ( ! trim( $service_sql ) ) { - $service_sql = ' 1=1 '; + return $ret; } - return $service_sql; -} + /** + * Handle edit request by email link + * Handled before load_assets of front.php + * @return none + */ + public function handle_edit() { -/** - * Build events SQL - * @since 5.5.1 - * @return string - */ -function wpb_listing_event_sql( $user_id ) { - $sql = ''; - if ( wpb_use_events() ) { - global $wpdb; - - $events = array_map( function( $id ) { return $id * -1; }, (array)$wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_author=%d", $user_id ?: get_current_user_id() ) ) ); - - if ( $events ) { - $sql = " (worker=0 AND service IN (".implode( ',', $events ).")) "; + if ( ! empty( $_GET['app_re_edit_login'] ) && ! is_user_logged_in() ) { + wpb_notice( wpb_get_text('login_for_edit') ); + return; } - } - - return $sql ?: '1=2'; -} -/** - * Build status SQL - * @since 5.4.0 - * @return string - */ -function wpb_listing_stat_sql( $statuses ) { - if ( ! is_array( $statuses ) ) { - $statuses = array_filter( array_map( 'trim', explode( ',', $status ) ) ); - } + if ( empty( $_GET['app_edit'] ) || empty( $_GET['app_id'] ) || empty( $_GET['edit_nonce'] ) ) { + return; + } - # Check for 'all' - if ( empty( $statuses ) || in_array( 'all', $statuses ) ) { - $stat = '1=1'; - } else { - $stat = ''; - foreach ( $statuses as $s ) { - # Allow only defined stats - if ( array_key_exists( trim( $s ), BASE()->get_statuses() ) ) { - $stat .= " status='".trim( $s )."' OR "; + if ( 'yes' != wpb_setting('allow_edit') ) { + if ( ! empty( $_GET['app_edit'] ) && ! empty( $_GET['edit_nonce'] ) ) { + wpb_notice( 'edit_disabled', 'error' ); } + + return; } - $stat = rtrim( $stat, "OR " ); - } - return $stat; -} + $app_id = wpb_clean($_GET['app_id'] ); + $app = wpb_get_app( $app_id ); -/** - * Build date/time SQL - * @since 5.4.0 - * @return string - */ -function wpb_listing_dt_sql( $start, $end, $_wide_coverage ) { - if ( $start && $end ) { - if ( $_wide_coverage ) { - $datetime_sql = " start <= '" . wpb_date( $end ) . "' AND end > '" . wpb_date( $start ) . "' "; - } else { - $datetime_sql = " start >= '" . wpb_date( $start ) . "' AND start <= '" . wpb_date( $end ) . "' "; + # Check provided hash + if ( $_GET['edit_nonce'] != $this->a->create_hash( $app, 'edit' ) ) { + wpb_notice( 'error', 'error' ); + return; + } + + if ( wpb_edit_is_too_late( $app ) ) { + wpb_notice('too_late'); + return; } - } else { - $datetime_sql = ' 1=1 AND'; - # This is different than is_busy. Here, we want to catch the start time of an appointment. So we dont look at app->end - if ( $start ) { - $datetime_sql = " start>='" . wpb_date( $start ) . "' AND"; + + if ( wpb_edit_is_too_early( $app ) ) { + wpb_notice('too_early'); + return; + } + + if ( empty( $app->created ) || ! self::in_allowed_status( $app ) ) { + wpb_notice('not_possible'); + return; // Appt deleted completely + } + + if ( ! empty( $app->user ) && ! is_user_logged_in() ) { + $redirect = add_query_arg( 'app_re_edit_login', $app_id, wp_login_url( esc_url_raw( $_SERVER['REQUEST_URI'] ) ) ); + wp_redirect( $redirect ); + exit; } - if ( $end ) { - $datetime_sql .= " start<'" . wpb_date( $end ) . "' "; + if ( ! wpb_edit_is_owner( $app ) ) { + wpb_notice( 'not_owner', 'error' ); + return; } + + # Checks are ok. Run script + do_action( 'app_load_assets' ); + add_action( 'wp_footer', array( $this, 'edit_on_footer' ) ); } - return rtrim( $datetime_sql, "AND" ); -} \ No newline at end of file + /** + * Print edit js and html on the footer in case of activation with email link + */ + public function edit_on_footer() { + $app_id = isset( $_GET['app_id'] ) ? wpb_clean( $_GET['app_id'] ) : 0; + $u_fields = apply_filters( 'app_edit_allowed_fields', $this->a->get_user_fields(), $app_id ); + + foreach( $u_fields as $key => $f ) { + if ( in_array( strtolower( $f ), $this->a->get_user_fields() ) && ! wpb_setting("ask_".$f) ) { + unset( $u_fields[ $key ] ); + } + } + + $u = $u_fields ? htmlspecialchars( wp_json_encode( $u_fields ) ) : ''; +?> +<script type="text/html" class="app-template-for-edit" data-standalone="1" data-app_id="<?php echo esc_attr( $app_id ) ?>" data-user_fields="<?php echo $u ?>"> +</script> +<?php + } + + +} + BASE('Listing')->add_hooks(); +} @@ -327,9 +327,9 @@ $ret .= '</div>'; $ret .= wpb_booking_info_html( ); $ret .= '</div>'; - $ret .= '</div>'; # Close app-conf-wrapper + $ret .= '</div>'; - $ret .= '</div>'; # Close gr2 + $ret .= '</div>'; return $ret; } @@ -27,14 +27,14 @@ * Add action and filter hooks */ public function add_hooks_front() { - - include_once( WPBASE_PLUGIN_DIR . '/includes/front-listing.php' ); // List Shortcode - include_once( WPBASE_PLUGIN_DIR . '/includes/front-account.php' ); // Account page - include_once( WPBASE_PLUGIN_DIR . '/includes/front-cancel.php' ); // Handle cancel requests - include_once( WPBASE_PLUGIN_DIR . '/includes/front-confirm.php' ); // Handle confirm requests - include_once( WPBASE_PLUGIN_DIR . '/includes/front-pay-later.php' ); // Handle pay later requests - include_once( WPBASE_PLUGIN_DIR . '/includes/front-long-bookings.php' ); - include_once( WPBASE_PLUGIN_DIR . '/includes/front-deprecated.php' ); + include_once WPBASE_PLUGIN_DIR . '/includes/functions.listing.php'; + include_once WPBASE_PLUGIN_DIR . '/includes/front-listing.php'; // List Shortcode + include_once WPBASE_PLUGIN_DIR . '/includes/front-account.php'; // Account page + include_once WPBASE_PLUGIN_DIR . '/includes/front-cancel.php'; // Handle cancel requests + include_once WPBASE_PLUGIN_DIR . '/includes/front-confirm.php'; // Handle confirm requests + include_once WPBASE_PLUGIN_DIR . '/includes/front-pay-later.php'; // Handle pay later requests + include_once WPBASE_PLUGIN_DIR . '/includes/front-long-bookings.php'; + include_once WPBASE_PLUGIN_DIR . '/includes/front-deprecated.php'; add_filter( 'the_posts', array($this, 'maybe_load_assets') ); // Determine if we use shortcodes on the page @@ -406,7 +406,7 @@ $s .= $title; $s .= '</div>'; } - $s .= '<input autocomplete="off" type="text" '.(!$history ? 'data-mindate="0"' : '').' data-maxdate="'.BASE()->get_app_limit().'" name="app_timestamp" class="app-sc app_select_date ui-toolbar ui-state-default" value="'.$date.'"/>'; + $s .= '<input autocomplete="off" type="text" '.(!$history ? 'data-mindate="0"' : '').' data-maxdate="'.BASE()->get_app_limit().'" name="app_timestamp" class="app-sc app_select_date ui-toolbar ui-state-default" value="'.$date.'">'; $s .= '</div>'; return $s; @@ -831,7 +831,7 @@ $out .= (string)$step_title === '0' ? '' : '<span class="step-center-title">'.$step_title.'</span>'; if ( $has_cart && $astep == $key ) { - $out .= '<input type="hidden" class="has-cart" value="1"/>'; + $out .= '<input type="hidden" class="has-cart" value="1">'; } $out .= '</div>'; @@ -1397,7 +1397,7 @@ } if ( $url = apply_filters( 'app_new_app_url', $url, $slot ) ) { - $new_link ='<input type="hidden" class="app-new-link" value="'.esc_attr( $url ).'" />'; + $new_link ='<input type="hidden" class="app-new-link" value="'.esc_attr( $url ).'" >'; } if ( ! $new_link ) { @@ -1414,8 +1414,8 @@ $ret .= '<td class="'.$class_name.' app_day app_day_'.$day_start.' app_worker_'.($calendar->get_worker() ?: '0').'" '. 'data-title="'.date_i18n( $this->date_format, $day_start ).'" data-solo="1" title="'.esc_attr( $click_hint_text ).'"><p>'.date( 'j', $d ).'</p>'. - '<input type="hidden" class="app-select-ts" value="'.$day_start .'" />'. - '<input type="hidden" class="app-packed" value="'.$calendar->slot( $day_start )->pack().'" />'; + '<input type="hidden" class="app-select-ts" value="'.$day_start .'" >'. + '<input type="hidden" class="app-packed" value="'.$calendar->slot( $day_start )->pack().'" >'; $ret = apply_filters( 'app_monthly_calendar_html_after_td', $ret, $slot, $calendar ); @@ -1760,8 +1760,9 @@ } /** - * Default confirmation shortcode atts + * Default confirmation shortcode atts - DEPRECATED * @since 3.0 + * @Until 6.0 * @return array */ public function confirmation_atts() { @@ -1793,7 +1794,8 @@ } /** - * Shortcode function to generate a confirmation box + * Shortcode function to generate a confirmation box - DEPRECATED + * @until 6.0 */ public function confirmation( $atts = array() ) { @@ -1906,7 +1908,7 @@ # A non-functional form so that browser autofill can be used $ret .='<form class="app-conf-client-fields" onsubmit="return false;">'; - $ret .='<input type="text" autocomplete="off" name="confirm-email-username" class="app_confirm_email_username" id="app_confirm_email_username" />'; + $ret .='<input type="text" autocomplete="off" name="confirm-email-username" class="app_confirm_email_username" id="app_confirm_email_username" >'; /* Sanitize and filter User and UDF fields */ $sorted_fields = wpb_sanitize_user_fields( $fields, $_app_id, $_editing ); @@ -1923,7 +1925,7 @@ $ret .= '<div class="app-'.$f.'-field" '.$style.'>'; $ret .= '<label><span class="app-conf-title">'. ${$f} . '<sup> *</sup></span>'; - $ret .= '<input type="text" placeholder="'.wpb_get_text($f.'_placeholder').'" class="app-'.$f.'-field-entry '.$mobile_cl.'" value="'.esc_attr(${'user_'.$f}).'" '. ($is_readonly ? 'readonly' : '').' />'; + $ret .= '<input type="text" placeholder="'.wpb_get_text($f.'_placeholder').'" class="app-'.$f.'-field-entry '.$mobile_cl.'" value="'.esc_attr(${'user_'.$f}).'" '. ($is_readonly ? 'readonly' : '').' >'; $ret .= '</label>'; $ret .= '</div>'; $ret = apply_filters( 'app_confirmation_after_'.$f.'_field', $ret, $_app_id, $f, $_editing, $fields ); @@ -1955,15 +1957,15 @@ /* Submit, Cancel Buttons */ $button_text = apply_filters( 'app_confirmation_button_text', $button_text, $_app_id, $_editing ); $ret .= '<div class="app-conf-buttons">'; - $ret .= '<input type="hidden" class="has-cart" value="'.($use_cart ? 1: 0) .'"/>'; - $ret .= '<input type="hidden" class="app-disp-price" value="" />'; - $ret .= "<input type='hidden' class='app-user-fields' value='".esc_attr( wp_json_encode( $sorted_fields ) )."' />"; + $ret .= '<input type="hidden" class="has-cart" value="'.($use_cart ? 1: 0) .'">'; + $ret .= '<input type="hidden" class="app-disp-price" value="" >'; + $ret .= "<input type='hidden' class='app-user-fields' value='".esc_attr( wp_json_encode( $sorted_fields ) )."' >"; if ( $_app_id ) { - $ret .= '<input type="hidden" class="app-edit-id" value="'.$_app_id.'"/>'; + $ret .= '<input type="hidden" class="app-edit-id" value="'.$_app_id.'">'; } - $ret .= '<input type="hidden" name="app_editing_value" class="app_editing_value" value="'. $_editing .'"/>'; + $ret .= '<input type="hidden" name="app_editing_value" class="app_editing_value" value="'. $_editing .'">'; $ret .= '<button data-button_text="'.$button_text.'" data-icon="check" class="app-conf-button ui-button ui-btn ui-btn-icon-left">'.$button_text.'</button>'; $ret .= '<button data-icon="delete" data-iconpos="left" class="app-conf-cancel-button app-cancel-button ui-button ui-btn ui-btn-icon-left" >'. ($use_cart && ! $_editing ? wpb_get_text('cancel_cart') : wpb_get_text('cancel')).'</button>'; @@ -394,17 +394,6 @@ } /** - * Check if user is a service provider (worker) - * @param $ID integer WP user ID. If not provided, current user is checked - * @return bool - * @since 3.0 - */ -function wpb_is_worker( $ID = 0 ) { - $uid = $ID ? $ID : ( function_exists( 'get_current_user_id' ) ? get_current_user_id() : 0 ); - return BASE()->is_worker( $uid ); -} - -/** * Returns service provider (worker) object * @param $ID integer ID of the worker to be retrieved = WP User ID * @since 3.0 @@ -714,4 +703,75 @@ " WHERE service = %d AND ID IN (SELECT object_id FROM ". BASE()->meta_table . " WHERE meta_type='app' AND meta_key='event_session_id' AND meta_value = %s )", $booking->get_service(), strtotime( $booking->get_start() ) .'_'. strtotime( $booking->get_end() ) ) ); -} \ No newline at end of file +} + +/** + * Find services that user booked from first day of last year until end of next year + * @since 5.9.1 + * @return array of objects + */ +function wpb_client_services( $user_id = 0, $order = 'name' ) { + $user_id = $user_id ?: get_current_user_id(); + + $args = array( + 'range' => 'custom', + 'start' => 'first day of last year', + 'end' => 'last day of this year +1 year', + 'user' => $user_id, + 'limit' => 100, + 'output'=> OBJECT_K, + ); + + if ( ! $pop = wpb_popular_services( $args ) ) { + return array(); + } + + $out = array(); + $ids = array_keys( $pop ); + $services = BASE()->get_services( $order ); + + foreach( $services as $id => $service ) { + if ( in_array( $id, $ids ) ) { + $out[ $id ] = $service; + } + } + + return $out; +} + +/** + * Find workers that user booked a service from first day of last year until end of next year + * @since 5.9.1 + * @return array of objects + */ +function wpb_client_workers( $user_id = 0, $order = 'name' ) { + if ( ! $workers = BASE()->get_workers( $order ) ) { + return array(); + } + + $user_id = $user_id ?: get_current_user_id(); + + $args = array( + 'range' => 'custom', + 'start' => 'first day of last year', + 'end' => 'last day of this year +1 year', + 'user' => $user_id, + 'limit' => 100, + 'output'=> OBJECT_K, + ); + + if ( ! $pop = wpb_popular_workers( $args ) ) { + return array(); + } + + $out = array(); + $ids = array_keys( $pop ); + + foreach( $workers as $id => $worker ) { + if ( in_array( $id, $ids ) ) { + $out[ $id ] = $worker; + } + } + + return $out; +} @@ -352,10 +352,12 @@ if ( $methods = array_filter( explode( ',', wpb_setting( 'social_login_methods' ) ) ) ) { $out .= '<div class="app-social-buttons">'; + + $requested_url = wpb_requested_url(); foreach ( $methods as $m ) { - $url = add_query_arg( array( 'app-social-login' => $m, 'redirect' => wpb_requested_url() ), wpb_requested_url() ); - $out .= '<a href="'.esc_url( $url ).'" id="app-'.$m.'-button" title="'.esc_attr( wpb_get_text( 'login_with_'.$m ) ).'">'. wpb_social_login_icon( $m ).'</a>'; + $url = add_query_arg( array( 'app-social-login' => $m, 'redirect' => $requested_url ), $requested_url ); + $out .= '<a href="'.esc_url( $url ).'" id="app-'.$m.'-button" title="'.esc_attr( wpb_get_text( 'login_with_'.$m ) ).'" rel="nofollow">'. wpb_social_login_icon( $m ).'</a>'; } $out .= '</div>'; @@ -907,14 +909,14 @@ $ret .= '<div class="app-step-content app-checkout-content">'; if ( $has_cart ) { - $ret .= '<input type="hidden" class="has-cart" value="1"/>'; + $ret .= '<input type="hidden" class="has-cart" value="1">'; } $ret .= wpb_client_info_html( $fields ) . wpb_gateways_html( $_final_note_pre ) . wpb_checkout_button_html( $use_cart ) . $_final_note; $ret .= '</div>'; $ret .= '</div>'; $ret .= wpb_booking_info_html( ); $ret .= '</div>'; - $ret .= '</div>'; # Close app-conf-wrapper + $ret .= '</div>'; $ret .= '</div>'; # Close gr2 @@ -1266,3 +1268,115 @@ return array( $time, $num_limit, $upper_limit, $compans, $error ); } + +/** + * Get HTML for list of services provided by vendor + * @param $args array HTML parameters + * @since 5.9.1 + * @return string + */ +function wpb_services_list_html( $args ) { + $defaults = array( + 'elm' => 'grid', + 'title' => __( 'My Services', 'wp-base' ), + 'target' => '', + 'columns' => 3, + 'services' => '', + ); + + $args = wp_parse_args( $args, $defaults ); + + $items = array(); + + $_services = array_filter( explode( ',', $args['services'] ) ); + + foreach ( $_services as $service_id ) { + $service = new WpB_Service( $service_id ); + + if ( 'grid' == $args['elm'] ) { + + $item = wpb_service_list_item_html( $service, $args['target'] ); + } else { + + $name = BASE()->get_service_name( $service_id ); + + if ( $link = $service->get_page_permalink() ) { + $item = '<a href="'. $link .'"'. ($args['target'] ? ' target="'. $args['target'] .'"' : '') .'>'. $name .'</a>'; + } else { + $item = $name; + } + } + + $items[] = 'ul' === $args['elm'] || 'ol' === $args['elm'] ? '<li>'. $item .'</li>' : $item; + } + + if ( '0' === (string)$args['title'] ) { + $title_html = ''; + } else { + $title_html = '<div class="app-services-list-title app-title">'. esc_html( $args['title'] ) .'</div>'; + } + + if ( 'grid' == $args['elm'] ) { + if ( ! is_numeric( $args['columns'] ) || $args['columns'] < 1 || $args['columns'] > 4 ) { + $args['columns'] = 3; + } + + $cols = min( $args['columns'], count( $_services ) ); + + return $title_html .'<div class="app-services-list app-grid app-grid-'.$cols.'"><div class="app-grid">'. implode( "\n", $items ) .'</div></div>'; + } else if ( 'ul' === $args['elm'] ) { + return $title_html .'<ul class="app-services-list">'. implode( "\n", $items ) .'</ul>'; + } else if ( 'ol' === $args['elm'] ) { + return $title_html .'<ol class="app-services-list">'. implode( "\n", $items ) .'</ol>'; + } else { + return implode( ', ', $items ); + } +} + +/** + * Get HTML for a single service provided by vendor + * @param $service object WopB_Service object + * @since 5.9.1 + * @return string + */ +function wpb_service_list_item_html( $service, $target ) { + $name = BASE()->get_service_name( $service->get_ID() ); + + if ( $permalink = $service->get_page_permalink() ) { + $link = $permalink; + $link_css = ' has-link'; + } else { + $link = 'javascript:void(0)'; + $link_css = ' no-link'; + } + + if ( $attach = wp_get_attachment_image( $service->get_image_id(), 'medium', false, array( 'class' => 'app-item-img', 'loading' => false, 'alt' => $name ) ) ) { + $img_html = $attach; + $pholder_css = ' no-pholder'; + } else { + $img_html = '<img class="app-item-img" src="'.esc_attr( wpb_placeholder_img_src() ).'" alt="Service" />'; + $pholder_css = ' has-pholder'; + } + + $out = '<div class="app-item-card'.$pholder_css.$link_css.'">'; + $out .= '<a class="app-item-thumb-link" href="'. $link .'"'. ($target ? ' target="'. $target .'"' : '') .'>'; + $out .= '<div class="app-item-thumb">'; + $out .= $img_html; + $out .= '</div>'; + $out .= '</a>'; + $out .= '<div class="app-item-text">'; + $out .= '<h3 class="app-item-title">'. $name .'</h3>'; + $out .= '<div class="app-item-excerpt">'. ($service->get_description() ?: wp_trim_words( $service->get_rte_content(), 55, '')) .'</div>'; + + $out .= '<div class="app-item-read-more-wrapper">'; + if ( $permalink ) { + $out .= '<a class="app-item-read-more" href="'. $link .'"'. ($target ? ' target="'. $target .'"' : '') .'>'. wpb_get_text( 'read_more' ) .'</a>'; + } + $out .= '</div>'; + + $out .= '</div>'; + $out .= '</div>'; + + return $out; +} + @@ -340,6 +340,91 @@ return WpBMeta::delete_metadata_by_oid( 'payment', $pid ); } + /** + * Add meta data field to a commission + * + * @since 6.0.0 + * + * @param int $pid commission ID. + * @param string $meta_key Metadata name. + * @param mixed $meta_value Metadata value. Must be serializable if non-scalar. + * @param bool $unique Optional. Whether the same key should not be added. + * Default true. + * @return int|false Meta ID on success, false on failure. + */ +function wpb_add_commission_meta( $pid, $meta_key, $meta_value, $unique = true ) { + return WpBMeta::add_metadata( 'commission', $pid, $meta_key, $meta_value, $unique ); +} + +/** + * Retrieve payment meta field for a commission. + * + * @since 6.0.0 + * + * @param int $pid commission ID. + * @param string $key Optional. The meta key to retrieve. By default, returns + * data for all keys. Default empty. + * @param bool $single Optional. Whether to return a single value. + * @return mixed Will be an array if $single is false. Will be value of meta data + * field if $single is true. + */ +function wpb_get_commission_meta( $pid, $key = '', $single = true ) { + return WpBMeta::get_metadata( 'commission', $pid, $key, $single ); +} + +/** + * Update payment meta field based on commission ID. + * + * Use the $prev_value parameter to differentiate between meta fields with the + * same key and payment ID. + * + * If the meta field for the post does not exist, it will be added. + * + * @since 6.0.0 + * + * @param int $pid commission ID. + * @param string $meta_key Metadata key. + * @param mixed $meta_value Metadata value. Must be serializable if non-scalar. + * @param mixed $prev_value Optional. Previous value to check before removing. + * Default empty. + * @return int|bool Meta ID if the key didn't exist, true on successful update, + * false on failure. + */ +function wpb_update_commission_meta( $pid, $meta_key, $meta_value, $prev_value = '' ) { + return WpBMeta::update_metadata( 'commission', $pid, $meta_key, $meta_value, $prev_value ); +} + +/** + * Remove metadata matching criteria from a commission record. + * + * You can match based on the key, or key and value. Removing based on key and + * value, will keep from removing duplicate metadata with the same key. It also + * allows removing all metadata matching key, if needed. + * + * @since 6.0.0 + * + * @param int $pid commission ID. + * @param string $meta_key Metadata name. + * @param mixed $meta_value Optional. Metadata value. Must be serializable if + * non-scalar. Default empty. + * @return bool True on success, false on failure. + */ +function wpb_delete_commission_meta( $pid, $meta_key, $meta_value = '' ) { + return WpBMeta::delete_metadata( 'commission', $pid, $meta_key, $meta_value ); +} + +/** + * Remove all metadata of a commission record. + * + * @since 6.0.0 + * + * @param int $pid commission ID. + * @return bool True on success, false on failure. + */ +function wpb_delete_commission_metadata( $pid ) { + return WpBMeta::delete_metadata_by_oid( 'commission', $pid ); +} + /** * Get salt. If it does not exist, create it * @since 2.0 @@ -902,6 +987,15 @@ } /** +* Get a list of zero decimal currency +* @sine 6.0.0 +* @return array +*/ +function wpb_zero_decimal_currency(){ + return array( 'BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'UGX', 'VND', 'VUV', 'XAF', 'XOF', 'XPF' ); +} + +/** * Converts 1 to 1st, 2 to 2nd, etc * https://stackoverflow.com/a/3110033 * @return string @@ -1054,16 +1148,6 @@ } /** - * Check if user is WP BASE admin - * @param $user object|integer User object or ID - * @since 5.1.0 - * @return bool - */ -function wpb_is_admin_user( $user = null ) { - return user_can( $user ?: get_current_user_id(), WPB_ADMIN_CAP ); -} - -/** * Check if user has at least one of the required capability * @param $cap array|string Comma delimited string or array with required caps to check * @since 3.0 @@ -858,12 +858,12 @@ 'Z' => '', // time zone offset in minutes => moment().zone(); 'z' => 'DDD', ); - + // Converts escaped characters. foreach ($replacements as $from => $to) { $replacements['\\' . $from] = '[' . $from . ']'; - } - + } + if ( 'safe' === $par ) { $momentFormat = strtr( BASE()->safe_date_format(), $replacements ); } else if ( $par ) { @@ -1449,7 +1449,7 @@ */ function wpb_description_page_selection( $ptypes, $page_id ) { $ptypes = is_array( $ptypes ) ? $ptypes : array_map( 'trim', explode( ',', $ptypes ) ); - + $html = '<option value="0">'. __('None','wp-base') .'</option>'; foreach( (array)$ptypes as $ptype ) { @@ -1458,20 +1458,20 @@ } else { $pages = get_posts( array('post_type' => $ptype, 'post_status' => 'publish,private', 'numberposts' => -1, 'orderby' => 'title', 'order' => 'ASC') ); } - + $post_obj = get_post_type_object( $ptype ); - $label = ! empty( $post_obj->labels->name ) ? $post_obj->labels->name : __( 'Custom Posts', 'wp-base' ); - + $label = ! empty( $post_obj->labels->name ) ? $post_obj->labels->name : __( 'Custom Posts', 'wp-base' ); + $html .= '<optgroup label="'. $label .'">'; - + foreach( (array)$pages as $page ) { $s = $page_id == $page->ID ? ' selected="selected"' : ''; - $html .= '<option value="'.$page->ID.'"'.$s.'>'. esc_html( $page->post_title ) . '</option>'; + $html .= '<option value="'.$page->ID.'"'.$s.'>'. esc_html( $page->post_title ) .' (#'. esc_html( $page->ID ) .')</option>'; } - + $html .= '</optgroup>'; } - + return $html; } @@ -2195,7 +2195,7 @@ * @author maliayas */ function wpb_adjustBrightness($hexCode, $adjustPercent) { - $hexCode = ltrim($hexCode, '#'); + $hexCode = ltrim( ($hexCode ?: ''), '#'); if (strlen($hexCode) == 3) { $hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2]; @@ -2362,7 +2362,7 @@ if ( user_can( $user_id, WPB_ADMIN_CAP ) || user_can( $user_id, 'manage_transactions' ) ) { return true; } - + if ( wpb_is_manager( $user_id ) && wpb_is_manage_store() ) { return true; } @@ -2488,7 +2488,7 @@ if ( ! $is_admin && ! $is_worker && ! $is_manager ) { return false; } - + if ( $is_manager && wpb_is_manage_store() ) { return true; } @@ -2842,28 +2842,63 @@ */ function wpb_upgrade_510() { update_user_meta( get_current_user_id(), 'app_service_check_needed', true ); - + $options = wpb_setting(); $changed = false; - + if ( empty( $options['schedule_show_images'] ) ) { $options['schedule_show_images'] = 'yes'; $changed = true; } - + if ( empty( $options['ms_use_effect'] ) ) { $options['ms_use_effect'] = 'no'; $changed = true; } - + if ( $changed ) { BASE()->update_options( $options ); } - + add_user_meta( get_current_user_id(), 'app_schedules_notice', true, true ); } /** + * When upgrading to V6.0, set commission email template + * @since 6.0.0 + * @return none + */ +function wpb_upgrade_600() { + if ( ! WPB_DEV ) { + return; + } + + include_once( WPBASE_PLUGIN_DIR . '/includes/constant-data.php' ); + + $options = wpb_setting(); + $changed = false; + + if ( empty( $options['send_commission_paid'] ) ) { + $options['send_commission_paid'] = 'yes'; + $changed = true; + } + + if ( empty( $options['commission_paid_subject'] ) ) { + $options['commission_paid_subject'] = __('Good news! You received a payment from SITE_NAME','wp-base'); + $changed = true; + } + + if ( empty( $options['commission_paid_message'] ) ) { + $options['commission_paid_message'] = WpBConstant::$_commission_paid_message; + $changed = true; + } + + if ( $changed ) { + BASE()->update_options( $options ); + } +} + +/** * Get login link of the website * @since 4.0.2 * @return string @@ -3024,9 +3059,9 @@ if ( ! wpb_is_multi_store() ) { return false; } - + $worker = new WpB_Worker( $user_id ?: get_current_user_id() ); - + return $worker->get_store() ?: false; } @@ -3076,6 +3111,61 @@ } /** + * Check if user is WP BASE admin + * @param $user object|integer User object or ID + * @since 5.1.0 + * @return bool + */ +function wpb_is_admin_user( $user = null ) { + return user_can( $user ?: get_current_user_id(), WPB_ADMIN_CAP ); +} + +/** + * Check if user is a service provider (worker) + * @param $ID integer WP user ID. If not provided, current user is checked + * @return bool + * @since 3.0 + */ +function wpb_is_worker( $ID = 0 ) { + $uid = $ID ? $ID : ( function_exists( 'get_current_user_id' ) ? get_current_user_id() : 0 ); + return BASE()->is_worker( $uid ); +} + +/** + * Whether a user is client ONLY + * @sine 5.9.1 + * @return bool + */ +function wpb_is_client( $user_id = null ) { + $user_id = $user_id ?: get_current_user_id(); + + if ( ! wpb_is_admin_user( $user_id ) && ! wpb_is_manager( $user_id ) && ! wpb_is_worker( $user_id ) ) { + return true; + } + + return false; +} + +/** + * User highest role for basic configuration (without Marketplace roles) + * @sine 6.0 + * @return string + */ +function wpb_user_role( $user_id = null ) { + $user_id = $user_id ?: get_current_user_id(); + + if ( wpb_is_admin_user( $user_id ) ) { + $role = 'admin'; + } else if ( wpb_is_worker( $user_id ) ) { + $role = 'worker'; + } else { + $role = 'client'; + } + + return $role; +} + +/** * Bring list of location IDs to be used account, store and admin pages * @since 5.6.0 * @return array Only in /home/deploy/wp-safety.org/data/plugin-versions/wp-base-booking-of-appointments-services-and-events/6.0.0/includes: functions.listing.php @@ -47,18 +47,18 @@ */ function wpb_get_paid_by_app_ids( $ids ) { $ids = is_array( $ids ) ? $ids : array_map( 'trim', explode( ',', $ids ) ); - + if ( empty( $ids ) ) { return array(); } - + $cache_id = wpb_cache_prefix() . 'paid_by_app_ids_'. md5( serialize( $ids ) ); $trs = wp_cache_get( $cache_id ); if ( false === $trs ) { $tr_table = BASE()->transaction_table; $app_table = BASE()->app_table; - + $ids = array_map( 'esc_sql', $ids ); $id_list = implode( ',', $ids ); @@ -69,7 +69,7 @@ " GROUP BY app.ID"; $result = BASE()->db->get_results( $q, OBJECT_K ); - + $trs = wp_list_pluck( $result, 'total_paid', 'app_id' ); wp_cache_set( $cache_id, $trs ); @@ -133,8 +133,8 @@ # First check if a cache is available $trs = wp_cache_get( wpb_cache_prefix() . 'all_transactions' ); - if ( isset( $trs[$app_id] ) && isset( $trs[$app_id]->total_paid ) ) { - return $trs[$app_id]->total_paid; + if ( isset( $trs[ $app_id ] ) && isset( $trs[ $app_id ]->total_paid ) ) { + return $trs[ $app_id ]->total_paid; } // If we are interested in just one payment. e.g. to use in email, it is resource saver if we call it from DB @@ -160,15 +160,15 @@ // We are prefering the first method, because it caches user's all transactions if ( ! empty( $app->user ) ) { $trs = wpb_get_transactions_by_user( $app->user ); - if ( isset( $trs[$app_id] ) && isset( $trs[$app_id]->total_paid ) ) { - return $trs[$app_id]->total_paid; + if ( isset( $trs[ $app_id ] ) && isset( $trs[ $app_id ]->total_paid ) ) { + return $trs[ $app_id ]->total_paid; } else { return 0; } } else { $trs = wpb_get_all_transactions( ); - if ( isset( $trs[$app_id]->total_paid ) ) { - return $trs[$app_id]->total_paid; + if ( isset( $trs[ $app_id ]->total_paid ) ) { + return $trs[ $app_id ]->total_paid; } else { return 0; } @@ -224,12 +224,13 @@ $args = wp_parse_args( $args, $defaults ); // Create a uniqe ID in manual payments, if not given by user - if ( 'manual-payments' == $args['gateway'] && !$args['paypal_ID'] ) { + if ( 'manual-payments' == $args['gateway'] && ! $args['paypal_ID'] ) { $args['paypal_ID'] = uniqid('auto_'); } $table = BASE()->transaction_table; $result = $new_record = false; + $data = array(); $data['transaction_app_ID'] = $args['app_id']; $data['transaction_total_amount'] = ( $args['amount'] ?: 0 ) * 100; @@ -387,6 +388,7 @@ * day_by_day bool Whether x-axis will be daily or longer (15 days or monthly) * by_created bool If true give the results by creation time. If false, give the results for start time * exclude string/array Exclude booking ID(s) + * output string Output format, e.g. ARRAY_A, OBJECT_K. Defaults to ARRAY_A * @since 3.5.0 * @return array */ @@ -409,8 +411,19 @@ * Helper to retrieve revenue and sales data * @param $context string Either sales or revenue or seats * @param $stats array Optionally select different stats - * @param $args array (All optional): - * See wpb_get_sales + * @param $args array (All parameters optional): + * range string today, yesterday, tomorrow, this_week, last_week, next_week, last_30_days, this_month, last_month, next_month, last_year, this_year + * start integer/string Start of the report as timestamp or date time in any standard format, preferably Y-m-d H:i:s + * end integer/string End of the report as timestamp or date time. If left empty, end time is calculated from duration of service + * location integer ID of location. If left empty, all locations + * service integer ID of service. If left empty, all services + * worker integer ID of service provider. If left empty, all providers + * user integer ID of the client. If left empty, all clients + * day_by_day bool Whether x-axis will be daily or longer (15 days or monthly) + * by_created bool If true give the results by creation time. If false, give the results for start time + * exclude string/array Exclude booking ID(s) + * limit integer mySQL LIMIT for certain context + * output string Output format, e.g. ARRAY_A, OBJECT_K. Defaults to ARRAY_A * @since 3.5.0 * @return array */ @@ -429,6 +442,8 @@ 'by_created' => false, 'stats' => $stats, 'exclude' => false, + 'limit' => 10, + 'output' => ARRAY_A, ); $args = _wpb_setup_report_args( wp_parse_args( $args, $defaults ) ); @@ -443,7 +458,7 @@ } if ( false === $data ) { - + $stores = wpb_managed_stores(); $by = ! empty( $args['by_created'] ) ? 'created' : 'start'; @@ -472,7 +487,7 @@ $com_stasuses = "'" . implode( "', '", $com_stasuses ) . "'"; if ( is_array( $args['location'] ) ) { - $locs = wpb_is_manage_store() ? array_intersect( $args['location'], $stores ) : $args['location']; + $locs = wpb_is_manage_store() ? array_intersect( $args['location'], $stores ) : $args['location']; $location = $args['location'] ? "location IN (". implode( ',', array_map( 'esc_sql', $locs ) ) .")" : "1=1"; } else { if ( wpb_is_manage_store() ) { @@ -481,11 +496,11 @@ $location = $args['location'] ? $wpdb->prepare( "location=%d", $args['location'] ) : "1=1"; } } - + $service = $args['service'] ? $wpdb->prepare( "service=%d", $args['service'] ) : "1=1"; - + if ( wpb_is_manage_store() ) { - $pop_worker = $worker = $stores + $pop_worker = $worker = $stores ? "worker IN ( SELECT user_id FROM {$wpdb->usermeta} AS usermeta WHERE meta_key='app_store' AND meta_value IN(".implode(',', $stores).") ) " : " 1=2"; } else { @@ -495,15 +510,15 @@ $wpdb->prefix ."base_meta WHERE meta_type='service' AND meta_key='owner' AND meta_value=%d)) )", $args['worker'], $args['worker'] ) : "1=1"; } - + $com_worker = $args['worker'] || '0' === (string)$args['worker'] ? $wpdb->prepare( "coms.worker=%d", $args['worker'] ) : "1=1"; - $user = $args['user'] ? $wpdb->prepare( "user=%d", $args['user'] ) : "1=1"; + $user = $args['user'] || '0' === (string)$args['user'] ? $wpdb->prepare( "user=%d", $args['user'] ) : "1=1"; $exclude = $args['exclude'] ? (is_array( $args['exclude'] ) ? implode( ',', array_map( 'absint', $args['exclude'] ) ) : absint( $args['exclude'] )) : 0; - $limit = apply_filters( 'app_report_limit', 10, $context, $args ); + $limit = apply_filters( 'app_report_limit', $args['limit'], $context, $args ); if ( 'revenue' == $context ) { $data = $wpdb->get_results( $wpdb->prepare( @@ -516,9 +531,10 @@ AND $location AND $service AND $worker + AND $user AND apps.ID NOT IN ($exclude) GROUP BY $grouping - ORDER by apps.{$by} ASC", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), ARRAY_A ); + ORDER by apps.{$by} ASC", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), $args['output'] ); } else if ( 'commissions' == $context ) { $query = $wpdb->prepare( @@ -531,8 +547,9 @@ AND $location AND $service AND $com_worker + AND $user ORDER by apps.{$by} ASC", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ); - $data = $wpdb->get_results( $query, ARRAY_A ); + $data = $wpdb->get_results( $query, $args['output'] ); } else if ( 'seats' == $context ) { $data = $wpdb->get_results( $wpdb->prepare( @@ -544,9 +561,10 @@ AND $location AND $service AND $worker + AND $user AND apps.ID NOT IN ($exclude) GROUP BY $grouping - ORDER by apps.{$by} ASC", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), ARRAY_A ); + ORDER by apps.{$by} ASC", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), $args['output'] ); } else if ( 'popular_services' == $context ) { $data = $wpdb->get_results( $wpdb->prepare( @@ -557,10 +575,11 @@ AND apps.status IN ($statuses) AND $location AND $worker + AND $user AND apps.ID NOT IN ($exclude) GROUP BY service ORDER by total_seats DESC - LIMIT $limit", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), ARRAY_A ); + LIMIT $limit", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), $args['output'] ); } else if ( 'popular_services_by_revenue' == $context ) { $data = $wpdb->get_results( $wpdb->prepare( @@ -572,10 +591,11 @@ AND apps.status IN ($statuses) AND $location AND $worker + AND $user AND apps.ID NOT IN ($exclude) GROUP BY service ORDER by total DESC - LIMIT $limit", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), ARRAY_A ); + LIMIT $limit", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), $args['output'] ); } else if ( 'popular_workers' == $context ) { $data = $wpdb->get_results( $wpdb->prepare( @@ -586,10 +606,11 @@ AND apps.status IN ($statuses) AND $location AND $pop_worker + AND $user AND apps.ID NOT IN ($exclude) GROUP BY worker ORDER by total_seats DESC - LIMIT $limit", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), ARRAY_A ); + LIMIT $limit", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), $args['output'] ); } else if ( 'popular_workers_by_revenue' == $context ) { $data = $wpdb->get_results( $wpdb->prepare( @@ -601,10 +622,11 @@ AND apps.status IN ($statuses) AND $location AND $pop_worker + AND $user AND apps.ID NOT IN ($exclude) GROUP BY worker ORDER by total DESC - LIMIT $limit", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), ARRAY_A ); + LIMIT $limit", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), $args['output'] ); } else if ( 'popular_clients' == $context ) { $data = $wpdb->get_results( $wpdb->prepare( @@ -618,7 +640,7 @@ AND apps.ID NOT IN ($exclude) GROUP BY user ORDER by total_seats DESC - LIMIT $limit", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), ARRAY_A ); + LIMIT $limit", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), $args['output'] ); } else if ( 'popular_clients_by_revenue' == $context ) { $data = $wpdb->get_results( $wpdb->prepare( @@ -633,7 +655,7 @@ AND apps.ID NOT IN ($exclude) GROUP BY user ORDER by total DESC - LIMIT $limit", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), ARRAY_A ); + LIMIT $limit", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), $args['output'] ); } else { $data = $wpdb->get_results( $wpdb->prepare( @@ -648,7 +670,7 @@ AND $user AND apps.ID NOT IN ($exclude) GROUP BY $grouping - ORDER by apps.{$by} ASC", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), ARRAY_A ); + ORDER by apps.{$by} ASC", date( 'Y-m-d H:i:s', $args['start'] ), date( 'Y-m-d H:i:s', $args['end'] ) ), $args['output'] ); } if ( ! $non_cachable ) { @@ -727,6 +749,7 @@ * worker integer ID of service provider. If left empty, all providers * by_created bool If true give the results by creation time. If false, give the results for start time * exclude string/array Exclude booking ID(s) + * output string Output format, e.g. ARRAY_A, OBJECT_K. Defaults to ARRAY_A * @since 3.5.0 * @return integer (hours) */ @@ -777,6 +800,7 @@ * user integer ID of the client. If left empty, all clients * by_created bool If true give the results by creation time. If false, give the results for start time * exclude string/array Exclude booking ID(s) + * output string Output format, e.g. ARRAY_A, OBJECT_K. Defaults to ARRAY_A * @since 3.5.0 * @return integer */ @@ -797,6 +821,7 @@ * user integer ID of the client. If left empty, all clients * by_created bool If true give the results by creation time. If false, give the results for start time * exclude string/array Exclude booking ID(s) + * output string Output format, e.g. ARRAY_A, OBJECT_K. Defaults to ARRAY_A * @since 3.7.8 * @return integer */ @@ -816,6 +841,8 @@ * user integer ID of the client. If left empty, all clients * by_created bool If true give the results by creation time. If false, give the results for start time * exclude string/array Exclude booking ID(s) + * limit integer mySQL LIMIT + * output string Output format, e.g. ARRAY_A, OBJECT_K. Defaults to ARRAY_A * @since 3.8.7 * @return array of arrays */ @@ -836,6 +863,8 @@ * user integer ID of the client. If left empty, all clients * by_created bool If true give the results by creation time. If false, give the results for start time * exclude string/array Exclude booking ID(s) + * limit integer mySQL LIMIT + * output string Output format, e.g. ARRAY_A, OBJECT_K. Defaults to ARRAY_A * @since 3.8.7 * @return array of arrays */ @@ -856,6 +885,8 @@ * user integer ID of the client. If left empty, all clients * by_created bool If true give the results by creation time. If false, give the results for start time * exclude string/array Exclude booking ID(s) + * limit integer mySQL LIMIT + * output string Output format, e.g. ARRAY_A, OBJECT_K. Defaults to ARRAY_A * @since 3.8.7 * @return array of arrays */ @@ -877,6 +908,8 @@ * user integer ID of the client. If left empty, all clients * by_created bool If true give the results by creation time. If false, give the results for start time * exclude string/array Exclude booking ID(s) + * limit integer mySQL LIMIT + * output string Output format, e.g. ARRAY_A, OBJECT_K. Defaults to ARRAY_A * @since 3.8.7 * @return array of arrays */ @@ -897,6 +930,8 @@ * worker integer ID of service provider. If left empty, all providers * by_created bool If true give the results by creation time. If false, give the results for start time * exclude string/array Exclude booking ID(s) + * limit integer mySQL LIMIT + * output string Output format, e.g. ARRAY_A, OBJECT_K. Defaults to ARRAY_A * @since 3.8.7 * @return array of arrays */ @@ -916,6 +951,8 @@ * worker integer ID of service provider. If left empty, all providers * by_created bool If true give the results by creation time. If false, give the results for start time * exclude string/array Exclude booking ID(s) + * limit integer mySQL LIMIT + * output string Output format, e.g. ARRAY_A, OBJECT_K. Defaults to ARRAY_A * @since 3.8.7 * @return array of arrays */ @@ -22,18 +22,12 @@ private $order_arr = array(); - private $bg_colors = array(); - - private $text_colors = array(); - - private $parents = array(); - private $schedules_page; /** * WP BASE Core + Front [+Admin] instance */ - protected $a = null; + protected $a; /** * Constructor @@ -48,50 +42,104 @@ public function add_hooks(){ add_action( 'app_menu_before_all', array( $this, 'add_menu' ), 19 ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); + add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); add_action( 'in_admin_header', array( $this, 'remove_notices' ) ); add_action( 'wp_ajax_app_get_schedule_bookings', array( $this, 'get_bookings' ) ); add_action( 'wp_ajax_app_quick_book_upsert', array( $this, 'upsert' ) ); add_action( 'wp_ajax_app_quick_book_update', array( $this, 'update' ) ); add_action( 'wp_ajax_app_quick_book_save', array( $this, 'save' ) ); add_action( 'wp_ajax_app_save_navbar_schedule', array( $this, 'save_navbar' ) ); - add_action( 'wp_ajax_app_panel_save_left', array( $this, 'save_left' ) ); add_action( 'wp_ajax_app_schedule_save_filters', array( $this, 'save_filters' ) ); - # Delete cache - add_action( 'app_new_appointment', array( $this, 'delete_cache' ) ); - add_action( 'app_status_changed', array( $this, 'delete_cache' ) ); - add_action( 'app_bulk_status_change', array( $this, 'delete_cache' ) ); - add_filter( 'app_inline_edit_save_result_final', array( $this, 'inline_edit_save_result_final' ), 100, 4 ); - add_filter( 'app_edit_maybe_updated', array( $this, 'delete_cache' ) ); - add_action( 'app_delete_pre', array( $this, 'delete_cache' ) ); - add_action( 'app_booking_updated', array( $this, 'delete_cache' ) ); + # Delete cache + Set new one + add_filter( 'app_inline_edit_save_result_final', array( $this, 'inline_edit_result_booking' ), 100, 4 ); + + # Delete all cache for changed services + add_filter( 'app_service_inline_edit_save_result_final', array( $this, 'inline_edit_result_service' ), 100, 4 ); + + # Set single cache + add_action( 'app_new_appointment', array( __CLASS__, 'set_event_cache' ), 1000, 1 ); + add_action( 'app_change_status', array( __CLASS__, 'set_event_cache' ), 1000, 1 ); + add_action( 'app_inline_edit_updated', array( __CLASS__, 'set_event_cache' ), 1000, 1 ); + add_action( 'app_inline_edit_new_booking', array( __CLASS__, 'set_event_cache' ), 1000, 1 ); + + # Delete caches of permanently deleted apps + add_action( 'app_deleted', array( __CLASS__, 'delete_event_cache' ), 10, 2 ); } /** - * Update when booking maybe changed/edit/created + * Delete cache when booking maybe changed/edit/created * @since 5.1.1 */ - public function inline_edit_save_result_final( $result, $booking, $old_booking, $obj ) { - if ( $obj->booking_changed || $obj->booking_updated || $obj->booking_inserted || $booking != $old_booking ) { - $this->delete_cache(); + public function inline_edit_result_booking( $result, $booking, $old_booking, $obj ) { + if ( ! empty( $obj->booking_changed ) || ! empty( $obj->booking_updated ) || ! empty( $obj->booking_inserted ) || $booking != $old_booking ) { + self::delete_cache( $booking ); } return $result; } /** - * Delete cache + * Delete cache when service color changed + * @since 6.0 + */ + public function inline_edit_result_service( $result, $service, $old_service, $obj ) { + if ( (isset( $_POST['bg_color'] ) && $_POST['bg_color'] != $old_service->bg_color()) || $service->get_name() != $old_service->get_name() ) { + delete_transient( 'wpbase_schedule_data' ); + + wpb_schedules_delete_transients_by_service( $service->get_ID() ); + } + + return $result; + } + + /** + * Delete overall schedule cache * @since 5.1.1 */ - public function delete_cache() { + public static function delete_cache( $app_booking = null ) { delete_transient( 'wpbase_schedule_data' ); + + if ( null !== $app_booking ) { + self::set_event_cache( $app_booking ); + } + } + + /** + * Build cache for a single booking + * @since 6.0 + */ + public static function set_event_cache( $app_booking ) { + $booking = $app_booking instanceof WpB_Booking ? $app_booking : new WpB_Booking( $app_booking ); + + $builder = new WpB_Event_Builder(); + + $expires = WEEK_IN_SECONDS + rand(0, 72) * HOUR_IN_SECONDS; + + set_transient( 'wpbase_schedule_admin_'. $booking->get_ID(), $builder->build( $booking, 'admin' ), $expires ); + set_transient( 'wpbase_schedule_worker_'. $booking->get_ID(), $builder->build( $booking, 'worker' ), $expires ); + set_transient( 'wpbase_schedule_client_'. $booking->get_ID(), $builder->build( $booking, 'client' ), $expires ); + } + + /** + * Delete cache for booking(s) + * @param $context string Irrelevant + * @param $ids array List of booking ids + * @since 6.0 + */ + public static function delete_event_cache( $context, $ids ) { + foreach ( (array)$ids as $id ) { + delete_transient( 'wpbase_schedule_admin_'. $id ); + delete_transient( 'wpbase_schedule_worker_'. $id ); + delete_transient( 'wpbase_schedule_client_'. $id ); + } } /** * Load assets */ public function enqueue_scripts() { - if ( wpb_is_admin_page() ) { + if ( wpb_is_account_page() || wpb_is_admin_page() || wpb_is_manage_store() ) { wp_enqueue_style( 'app-schedules' ); } } @@ -115,23 +163,46 @@ } /** - * Stats that will be displayed as faded at EC - * @return array + * Helper + * @since 5.9.1 + * @return string */ - public static function faded_stats() { - return apply_filters( 'app_schedule_faded_stats', array( 'completed', 'removed' ) ); + private static function non_admin_stats_sql() { + $_stats = ! empty( $_POST['stats'] ) && 'null' !== $_POST['stats'] && 'undefined' !== $_POST['stats'] + ? array_map( 'esc_sql', explode( ',', $_POST['stats'] ) ) + : array_keys( BASE()->get_statuses() ); + $stat_arr = array_intersect( $_stats, wpb_schedules_allowed_stats() ); + $stats = $stat_arr ? 'status IN ("'. implode('","', $stat_arr ) .'")' : '1=2'; + + return $stats; } /** - * Template as booking description + * Helper + * @since 5.9.1 * @return string */ - public static function template( $role ) { - $set = 'admin' == $role - ? wpb_setting( 'schedule_desc_admin', WpBConstant::$_schedule_desc_admin ) - : wpb_setting( 'schedule_desc_worker', WpBConstant::$_schedule_desc_worker ); + private static function worker_services_sql() { + $all_by_worker = BASE()->get_services_by_worker( get_current_user_id() ); + $ids = ! empty( $_POST['service_ids'] ) && 'null' !== $_POST['service_ids'] && 'undefined' !== $_POST['service_ids'] + ? array_map( 'esc_sql', explode( ',', $_POST['service_ids'] ) ) + : false; + + $serv_arr = array(); + if ( $ids ) { + foreach ( $ids as $id ) { + if ( in_array( $id, array_keys( $all_by_worker ) ) ) { + $serv_arr[] = $id; + } + } + } else { + $serv_arr = array_keys( $all_by_worker ); + $serv_arr[] = WPB_GCAL_SERVICE_ID; + } - return apply_filters( 'app_schedule_template', $set, $role ); + $serv = $serv_arr ? 'SERVICE IN ('. implode(',', $serv_arr ) .')' : '1=2'; + + return $serv; } /** @@ -153,36 +224,23 @@ $work = ! empty( $_POST['worker_ids'] ) && 'null' !== $_POST['worker_ids'] && 'undefined' !== $_POST['worker_ids'] ? 'worker IN ('.esc_sql( $_POST['worker_ids'] ).')' : '1=1'; + $user = '1=1'; } else if ( wpb_is_worker() ) { + $stats = self::non_admin_stats_sql(); $locs = '1=1'; + $serv = self::worker_services_sql(); $work = BASE()->db->prepare( 'worker=%d', get_current_user_id() ); - - $_stats = ! empty( $_POST['stats'] ) && 'null' !== $_POST['stats'] && 'undefined' !== $_POST['stats'] - ? array_map( 'esc_sql', explode( ',', $_POST['stats'] ) ) - : array_keys( BASE()->get_statuses() ); - $stat_arr = array_intersect( $_stats, wpb_schedules_allowed_stats() ); - $stats = $stat_arr ? 'status IN ("'. implode('","', $stat_arr ) .'")' : '1=2'; - - $all_by_worker = BASE()->get_services_by_worker( get_current_user_id() ); - $ids = ! empty( $_POST['service_ids'] ) && 'null' !== $_POST['service_ids'] && 'undefined' !== $_POST['service_ids'] - ? array_map( 'esc_sql', explode( ',', $_POST['service_ids'] ) ) - : false; - - $serv_arr = array(); - if ( $ids ) { - foreach ( $ids as $id ) { - if ( in_array( $id, array_keys( $all_by_worker ) ) ) { - $serv_arr[] = $id; - } - } - } else { - $serv_arr = array_keys( $all_by_worker ); - $serv_arr[] = WPB_GCAL_SERVICE_ID; - } - - $serv = $serv_arr ? 'SERVICE IN ('. implode(',', $serv_arr ) .')' : '1=2'; + $user = '1=1'; } else { - wp_send_json( array( 'error' => __('Role not supported at the moment','wp-base') ) ); + $stats = self::non_admin_stats_sql(); + $locs = '1=1'; + $serv = ! empty( $_POST['service_ids'] ) && 'null' !== $_POST['service_ids'] && 'undefined' !== $_POST['service_ids'] + ? 'service IN ('.esc_sql( $_POST['service_ids'] ).')' + : '1=1'; + $work = ! empty( $_POST['worker_ids'] ) && 'null' !== $_POST['worker_ids'] && 'undefined' !== $_POST['worker_ids'] + ? 'worker IN ('.esc_sql( $_POST['worker_ids'] ).')' + : '1=1'; + $user = BASE()->db->prepare( 'user=%d', get_current_user_id() ); } $start = ! empty( $_POST['start'] ) ? strtotime( wpb_clean( $_POST['start'] ) ) : strtotime( 'first day of this month' ); @@ -190,7 +248,7 @@ $stores = wpb_is_manage_store() ? " location IN (". implode( ',', wpb_managed_stores() ) .") " : '1=1'; $query = BASE()->db->prepare( "SELECT * FROM ". BASE()->app_table ." WHERE ". - "$stats AND $locs AND $stores AND $serv AND $work AND start <= %s AND end > %s", + "$stats AND $locs AND $stores AND $serv AND $work AND $user AND start <= %s AND end > %s", date( 'Y-m-d H:i:s', $end ), date( 'Y-m-d H:i:s', $start ) ); $cached = get_transient( 'wpbase_schedule_data' ); @@ -202,15 +260,28 @@ $results = BASE()->db->get_results( $query ); + $app_ids = wp_list_pluck( $results, 'ID' ); + WpBMeta::update_meta_cache( 'app', $app_ids ); + update_meta_cache( 'user', wp_list_pluck( $results, 'user' ) ); + $out = $events = $conns = array(); + + $role = wpb_user_role(); + + $builder = new WpB_Event_Builder(); foreach ( (array)$results as $app ) { $booking = new WpB_Booking( $app->ID ); - $events[ $booking->get_ID() ] = $this->prepare_event( $booking ); + if ( $saved = get_transient( 'wpbase_schedule_'. $role .'_'. $booking->get_ID() ) ) { + $events[ $booking->get_ID() ] = $saved; + } else { + $events[ $booking->get_ID() ] = $builder->build( $booking ); + set_transient( 'wpbase_schedule_'. $role .'_'. $booking->get_ID(), $events[ $booking->get_ID() ], WEEK_IN_SECONDS + rand(0, 72) * HOUR_IN_SECONDS ); + } } - foreach ( array_count_values( $this->parents ) as $val => $c ) { + foreach ( array_count_values( $builder->get_parents() ) as $val => $c ) { if ( $c > 1 ) { $conns[] = $val; } @@ -234,84 +305,24 @@ set_transient( 'wpbase_schedule_data', $cached, HOUR_IN_SECONDS ); # Cleared with wpb_flush_cache } - // wp_send_json( $data ); - die( json_encode( array( 'out' => $data, 'conns' => $conns ) ) ); } /** - * Prepare ec parameters for a single event + * Mark break slots * @return array */ - public function prepare_event( $booking ) { - $service = new WpB_Service( $booking->get_service() ); - $id = $service->get_id(); - $status = $booking->get_status(); - $worker = new WpB_Worker( $booking->get_worker() ); - - if ( empty( $this->bg_colors[ $id ][ $status ] ) ) { - $this->bg_colors[ $id ][ $status ] = in_array( $status, self::faded_stats() ) - ? wpb_adjustBrightness( $service->bg_color(), 0.7 ) - : $service->bg_color(); - } - - if ( empty( $this->text_colors[ $id ][ $status ] ) ) { - $this->text_colors[ $id ][ $status ] = in_array( $status, self::faded_stats() ) - ? '#909090' - : $service->text_color(); - } - - if ( $booking->is_gcal_event() ) { - $this->bg_colors[ $id ][ $status ] = wpb_setting( 'gcal_bg_color' ) ?: wpb_random_color(); - $this->text_colors[ $id ][ $status ] = wpb_text_color( $this->bg_colors[ $id ][ $status ] ); - } else if ( $booking->is_event() && defined( 'WPB_EB_META' ) ) { - $post_id = absint( $booking->get_service() ); - $this->bg_colors[ $id ][ $status ] = get_post_meta( $post_id, WPB_EB_META .'_bg_color', true ) ?: wpb_random_color(); - $this->text_colors[ $id ][ $status ] = get_post_meta( $post_id, WPB_EB_META .'_text_color', true ) ?: wpb_text_color( $this->bg_colors[ $id ][ $status ] ); - } - - $all_day = BASE()->is_daily( $booking->get_service() ) || ( wpb_strtotime( $booking->get_end() ) - wpb_strtotime( $booking->get_start() ) > DAY_IN_SECONDS ); - - $desc = $template = self::template( wpb_is_admin_user() ? 'admin' : 'worker' ); - - if ( ! BASE()->get_nof_workers() || ! $booking->get_worker() ) { - $desc = str_replace( 'WORKER', '', $template ); - } - - $enlarged = false && $all_day && 'yes' != wpb_setting( 'end_date_for_venue' ); - - $parent_id = $booking->get_parent_id() ?: $booking->get_ID(); + public static function breaks() { + if ( wpb_is_client() ) { + return array(); + } - $this->parents = array_merge( $this->parents, array( $booking->get_ID() => $parent_id ) ); + $view = ! empty( $_POST['view'] ) ? strtolower( wpb_clean( $_POST['view'] ) ) : ''; - return array( - 'id' => $booking->get_ID(), - 'resourceId' => $booking->get_worker(), - 'start' => $booking->get_start(), - 'end' => $all_day && 'yes' != wpb_setting( 'end_date_for_venue' ) - ? date( 'Y-m-d H:i:s', wpb_strtotime( $booking->get_end() ) + DAY_IN_SECONDS ) - : $booking->get_end(), - 'allDay' => $all_day, - 'title' => ' ', - 'textColor' => $this->text_colors[ $id ][ $status ], - 'backgroundColor' => $this->bg_colors[ $id ][ $status ], - 'styles' => $enlarged ? 'max-width:50%' : '', - 'classNames' => ($all_day ? 'long ': '').$status.' location-'.$booking->get_location().' service-'.$booking->get_service().' worker-'.$booking->get_worker().' app-'.$booking->get_ID(), - 'extendedProps' => array( - 'avatar' => $worker->get_avatar( 48 ), - 'show_checkout' => 'yes' != wpb_setting( 'end_date_for_venue' ), # Not used - 'desc' => wpb_replace( $desc, $booking ), - 'header_text' => $all_day ? wpb_format_start_end( strtotime($booking->get_start()), strtotime($booking->get_end()), true ) : false, - ), - ); - } + if ( strpos( $view, 'month' ) !== false ) { + return array(); + } - /** - * Mark break slots - * @return array - */ - public static function breaks() { - $view = ! empty( $_POST['view'] ) ? wpb_clean( $_POST['view'] ) : ''; $start = ! empty( $_POST['start'] ) ? strtotime( wpb_clean( $_POST['start'] ) ) : strtotime( 'first day of this month' ); $end = ! empty( $_POST['end'] ) ? strtotime( wpb_clean( $_POST['end'] ) ) : strtotime( 'last day of this month' ) + 86400; $step = BASE()->get_min_time()*60; @@ -342,7 +353,7 @@ 'start' => date( 'Y-m-d H:i:s', $slot->get_start() ), 'end' => date( 'Y-m-d H:i:s', $slot->get_end() ), 'resourceId'=> $slot->get_worker(), - 'classNames' => 'blocked', + 'classNames'=> 'blocked', ); } @@ -359,8 +370,12 @@ * @return json */ public function upsert() { + + if ( wpb_is_client() ) { + return wpb_listing_inline_edit(); + } + $safe_format = BASE()->safe_date_format(); - $app_id = isset( $_REQUEST['app_id'] ) ? wpb_clean( $_REQUEST['app_id'] ) : 0; $booking = new WpB_Booking( $app_id ); $old_booking = clone $booking; @@ -379,7 +394,7 @@ wpb_set_lock( $bid ); $html = ''; - $html .= '<div class="inline-edit-row inline-edit-row-post '.($bid ? "" : "inline-edit-row-add-new").'">'; + $html .= '<div class="inline-edit-row inline-edit-row-post '.($bid ? '' : 'inline-edit-row-add-new').'">'; $html .= '<fieldset>'; $html .= '<div class="inline-edit-col">'; @@ -398,7 +413,7 @@ /* Services */ $html .= wpb_wrap_field( 'service', $booking->is_event() ? __('Event', 'wp-base') : __('Service', 'wp-base'), - $controller->select_service( ! $app_id ), + $controller->select_service( false, ! $app_id ), apply_filters( 'app_inline_edit_service_helptip', '', $booking, $controller, 'quick_edit' ) ); @@ -570,6 +585,10 @@ * @return json */ public function update() { + + if ( wpb_is_client() ) { + return wpb_listing_inline_edit_update(); + } self::check_auth(); @@ -603,7 +622,7 @@ $out = array( 'locations_sel' => $controller->select_location(), - 'services_sel' => $controller->select_service( ! $app_id ), + 'services_sel' => $controller->select_service( false, ! $app_id ), 'workers_sel' => wpb_is_admin_user() ? $controller->select_worker() : $controller->select_self_worker(), ); @@ -620,7 +639,7 @@ $out['notice'] = wpb_admin_notice( $booking, $old_booking ); - $out = apply_filters( 'app_inline_edit_update', $out, $booking, $old_booking, $controller, $this, 'quick_edit' ); + $out = apply_filters( 'app_inline_edit_update', $out, $booking, $old_booking, $controller, 'quick_edit' ); die( json_encode( $out ) ); } @@ -630,6 +649,10 @@ * @return json */ public function save() { + + if ( wpb_is_client() ) { + return wpb_listing_inline_edit_save(); + } self::check_auth(); @@ -714,7 +737,7 @@ } } - $booking = apply_filters( 'app_inline_edit_save_data', $booking, $old_booking ); + $booking = apply_filters( 'app_inline_edit_save_data', $booking, $old_booking, 'quick_edit' ); if ( strtotime( $booking->get_start() ) > strtotime( $booking->get_end() ) ) { die( json_encode( array( 'error' => __('Booking start time cannot be later than end time!', 'wp-base' ) ) ) ); @@ -725,10 +748,10 @@ $booking->check_update( $old_booking ); } - do_action( 'app_inline_edit_save_before_save', $booking, $old_booking, $this ); + do_action( 'app_inline_edit_save_before_save', $booking, $old_booking, 'quick_edit' ); $updated = $inserted = null; - $changed = false; + $changed = false; if ( $booking->get_ID() ) { $updated = wpb_admin_update_booking( $booking, $old_booking ); @@ -751,12 +774,12 @@ $changed = true; } - $changed = apply_filters( 'app_inline_edit_save', $changed, $booking, $old_booking, $this ); + $changed = apply_filters( 'app_inline_edit_save', $changed, $booking, $old_booking, 'quick_edit' ); if ( $updated ) { - do_action( 'app_inline_edit_updated', $booking, $old_booking, $this ); + do_action( 'app_inline_edit_updated', $booking, $old_booking, 'quick_edit' ); } else if ( $inserted ) { - do_action( 'app_inline_edit_new_booking', $booking, $old_booking, $this ); + do_action( 'app_inline_edit_new_booking', $booking, $old_booking, 'quick_edit' ); } $email_sent = $mode = false; @@ -777,7 +800,9 @@ } } - $event = $this->prepare_event( $booking ); + $builder = new WpB_Event_Builder(); + + $event = $builder->build( $booking ); if ( $updated === false || $inserted === false ) { $result = array( 'error' => __( 'Record could not be saved!', 'wp-base' ) ); @@ -874,17 +899,6 @@ } /** - * Ajax save panel - * @return json - */ - public function save_left(){ - - update_user_option( get_current_user_id(), 'app_quick_book_panel_at_left', ! empty( $_POST['left'] ) ); - - wp_send_json_success(); - } - - /** * Check authorization * @return json */ @@ -909,11 +923,214 @@ } /** + * Helper class to build a formatted event for Calendar + * @since 6.0.0 + */ +class WpB_Event_Builder { + + private $bg_colors = array(); + + private $text_colors = array(); + + private $parents = array(); + + /** + * WP BASE Core + Front [+Admin] instance + */ + protected $a = null; + + public function __construct() { + $this->a = BASE(); + } + + /** + * Stats that will be displayed as faded at EC + * @return array + */ + public static function faded_stats() { + return apply_filters( 'app_schedule_faded_stats', array( 'completed', 'removed' ) ); + } + + /** + * Get default template from file + * @param $context string 'admin', 'worker', 'client' + * @since 6.0 + * @return string + */ + public static function default_desc( $context ) { + include_once WPBASE_PLUGIN_DIR . '/includes/constant-data.php'; + + switch( $context ) { + case 'admin': return WpBConstant::$_schedule_desc_admin; + case 'worker': return WpBConstant::$_schedule_desc_worker; + case 'client': + default: return WpBConstant::$_schedule_desc_client; + } + } + + /** + * Template as booking description + * @param $role string 'admin', 'worker', 'client' or 'auto' which finds current user's role + * @return string + */ + public static function template( $role = 'auto' ) { + if ( 'auto' == $role ) { + $role = wpb_user_role(); + } + + $set = 'admin' == $role + ? wpb_setting( 'schedule_desc_admin', self::default_desc( 'admin' ) ) + : ( 'worker' == $role + ? wpb_setting( 'schedule_desc_worker', self::default_desc( 'worker' ) ) + : wpb_setting( 'schedule_desc_client', self::default_desc( 'client' ) ) ); + + return apply_filters( 'app_schedule_template', $set, $role ); + } + + /** + * Get IDs of parents of all bookings handled during this instance + * @return array + */ + public function get_parents() { + return $this->parents; + } + + /** + * Prepare ec parameters for a single event + * @return array + */ + public function build( $booking, $role = 'auto' ) { + $service = new WpB_Service( $booking->get_service() ); + $id = $service->get_id(); + $status = $booking->get_status(); + $worker = new WpB_Worker( $booking->get_worker() ); + + if ( empty( $this->bg_colors[ $id ][ $status ] ) ) { + $this->bg_colors[ $id ][ $status ] = in_array( $status, self::faded_stats() ) + ? wpb_adjustBrightness( $service->bg_color(), 0.7 ) + : $service->bg_color(); + } + + if ( empty( $this->text_colors[ $id ][ $status ] ) ) { + $this->text_colors[ $id ][ $status ] = in_array( $status, self::faded_stats() ) + ? '#909090' + : $service->text_color(); + } + + if ( $booking->is_gcal_event() ) { + $this->bg_colors[ $id ][ $status ] = wpb_setting( 'gcal_bg_color' ) ?: wpb_random_color(); + $this->text_colors[ $id ][ $status ] = wpb_text_color( $this->bg_colors[ $id ][ $status ] ); + } else if ( $booking->is_event() && defined( 'WPB_EB_META' ) ) { + $post_id = absint( $booking->get_service() ); + $this->bg_colors[ $id ][ $status ] = get_post_meta( $post_id, WPB_EB_META .'_bg_color', true ) ?: wpb_random_color(); + $this->text_colors[ $id ][ $status ] = get_post_meta( $post_id, WPB_EB_META .'_text_color', true ) ?: wpb_text_color( $this->bg_colors[ $id ][ $status ] ); + } + + $all_day = BASE()->is_daily( $booking->get_service() ) || ( wpb_strtotime( $booking->get_end() ) - wpb_strtotime( $booking->get_start() ) > DAY_IN_SECONDS ); + + $desc = $template = self::template( $role ); + + if ( ! BASE()->get_nof_workers() || ! $booking->get_worker() ) { + $desc = str_replace( 'WORKER', '', $template ); + } + + $enlarged = false && $all_day && 'yes' != wpb_setting( 'end_date_for_venue' ); + + $parent_id = $booking->get_parent_id() ?: $booking->get_ID(); + + $this->parents = array_merge( $this->parents, array( $booking->get_ID() => $parent_id ) ); + + return array( + 'id' => $booking->get_ID(), + 'resourceId' => $booking->get_worker(), + 'start' => $booking->get_start(), + 'end' => $all_day && 'yes' != wpb_setting( 'end_date_for_venue' ) + ? date( 'Y-m-d H:i:s', wpb_strtotime( $booking->get_end() ) + DAY_IN_SECONDS ) + : $booking->get_end(), + 'allDay' => $all_day, + 'title' => ' ', + 'textColor' => $this->text_colors[ $id ][ $status ], + 'backgroundColor' => $this->bg_colors[ $id ][ $status ], + 'styles' => $enlarged ? 'max-width:50%' : '', + 'classNames' => ($all_day ? 'long ': '').$status.' location-'.$booking->get_location().' service-'.$booking->get_service().' worker-'.$booking->get_worker().' app-'.$booking->get_ID(), + 'extendedProps' => array( + 'avatar' => $worker->get_avatar( 48 ), + 'show_checkout' => 'yes' != wpb_setting( 'end_date_for_venue' ), # Not used + 'desc' => wpb_replace( $desc, $booking ), + 'header_text' => $all_day ? wpb_format_start_end( strtotime($booking->get_start()), strtotime($booking->get_end()), true ) : false, + ), + ); + } +} + +/** + * Delete saved single event transients + * @param $context string Role. 'admin', 'worker' or 'client' + * @since 6.0 + * @return none + */ +function wpb_schedules_delete_transients( $context = 'admin' ) { + global $wpdb; + + $wpdb->query( + $wpdb->prepare( + "DELETE FROM {$wpdb->options} + WHERE option_name LIKE %s OR option_name LIKE %s", + $wpdb->esc_like( '_transient_wpbase_schedule_'. $context .'_' ) . '%', + $wpdb->esc_like( '_transient_timeout_wpbase_schedule_'. $context .'_' ) . '%' + ) + ); + + delete_transient( 'wpbase_schedule_data' ); +} + +/** + * Delete saved single event transients of bookings of a particular service + * @param $service_id integer Service ID + * @since 6.0 + * @return none + */ +function wpb_schedules_delete_transients_by_service( $service_id ) { + global $wpdb; + + $ids = $wpdb->get_col( + $wpdb->prepare( + "SELECT ID FROM {$wpdb->prefix}base_bookings + WHERE service = %d", + $service_id + ) + ); + + if ( ! $ids ) { + return; + } + + $in_arr = array(); + + foreach ( array( '_transient_wpbase_schedule_', '_transient_timeout_wpbase_schedule_' ) as $suffix ) { + foreach ( array( 'admin', 'worker', 'client' ) as $context ) { + foreach ( $ids as $id ) { + $in_arr[] = esc_sql( $suffix . $context .'_'. $id ); + } + } + } + + if ( ! $in_arr ) { + return; + } + + $in = "'". implode( "','", $in_arr ) ."'"; + + $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name IN ({$in})" ); +} + +/** * Stats that provider can select * @return array */ function wpb_schedules_allowed_stats() { - return apply_filters( 'app_schedule_allowed_stats', array_map( 'trim' , explode( ',', wpb_setting( 'schedule_allowed_stats', 'paid,confirmed,pending,running,completed,removed' ) ) ) ); + $setting_name = wpb_is_client() ? 'schedule_allowed_stats_client' : 'schedule_allowed_stats'; + return apply_filters( 'app_schedule_allowed_stats', array_map( 'trim' , explode( ',', wpb_setting( $setting_name, 'paid,confirmed,pending,running,completed,removed' ) ) ) ); } /** @@ -952,11 +1169,10 @@ $loc_ids = array(); $workers = array(); $worker_titles = array(); - $meta = get_user_option( 'app_quick_book_panel_at_left' ); - $at_left = null !== $meta ? (bool)$meta : true; $images = array(); $colors = array(); $order = apply_filters( 'app_schedules_sort_order', 'name' ); + $user_id = get_current_user_id(); if ( wpb_is_manage_store() ) { $loc_ids = wpb_managed_stores(); @@ -966,14 +1182,20 @@ $loc_ids = array_keys( (array)BASE()->get_locations( $order ) ); $services = BASE()->get_services( $order ); $workers = BASE()->get_workers( $order ); - } else { + } else if ( wpb_is_worker() ) { $loc_ids = array(); - $provided = BASE()->get_services_by_worker( get_current_user_ID(), $order ); - $owned = BASE()->get_services_owned_by( get_current_user_ID(), $order ); + $provided = BASE()->get_services_by_worker( $user_id, $order ); + $owned = BASE()->get_services_owned_by( $user_id, $order ); $services = (array)$provided + (array)$owned; $workers = array(); + } else { + $loc_ids = array(); + $services = wpb_client_services( $user_id, $order ); + $workers = wpb_client_workers( $user_id, $order ); } + $services = apply_filters( 'app_schedules_services', $services ); + foreach ( $services as $_service ) { if ( $maybe_color = wpb_get_service_meta( $_service->ID, 'bg_color' ) ) { $colors[ $_service->ID ] = $maybe_color; @@ -1003,18 +1225,8 @@ ?> <div class="app-page app-manage app-form app-schedules-group" data-only_own="<?php echo ( ! wpb_is_admin_user() ? 1 : 0 ) ?>"> - <div id="app-panel-wrap" class="app-panel-wrap<?php echo ( $at_left ? ' left' : '') ?>"> - <button class="button-secondary app-close-panel"> - <span class="dashicons dashicons-no" title="<?php echo __('Close','wp-base') ?>"></span> - </button> - <button class="button-secondary app-dock-left<?php echo ( $at_left ? ' left' : '') ?>"> - <span class="dashicons dashicons-align-pull-left" title="<?php echo __('Dock to left','wp-base') ?>"></span> - <span class="dashicons dashicons-align-pull-right" title="<?php echo __('Dock to right','wp-base') ?>"></span> - </button> - - <div id="app-panel" class="app-panel"></div> - </div> + <?php wpb_editing_panel_html(); ?> <div id="app-open-navbar-schedule"<?php echo (! $is_hidden ? ' style="display:none"' : '')?>> <button title="<?php echo esc_attr( __( 'Open toolbar', 'wp-base' ) ) ?>"></button> @@ -1082,7 +1294,7 @@ <?php if ( $workers ) { ?> <div class="app-filter-workers app-filter-ms"> - <select multiple size="12" name="app_workers" class="app_ms_tab app-no-save-alert app-schedule-select app-invisible" data-buttonwidth="auto" data-noneselectedtext="<?php _e( 'All Providers', 'wp-base' ) ?>" data-usefilter="<?php echo (BASE()->get_nof_workers() > 20 ? 'yes' : 'no') ?>"> + <select multiple size="12" name="app_workers" class="app_ms_tab app-no-save-alert app-schedule-select app-invisible" data-buttonwidth="auto" data-noneselectedtext="<?php _e( 'All Providers', 'wp-base' ) ?>" data-usefilter="<?php echo (count( $workers ) > 20 ? 'yes' : 'no') ?>"> <?php foreach ( $workers as $worker ) { $name = BASE()->get_worker_name( $worker->ID ); @@ -1149,30 +1361,6 @@ jQuery(document).ready(function($) { $(".app-schedule-select").removeClass("app-invisible"); - $(".app-close-panel").click(function(e) { - e.preventDefault(); - var $this = $(this); - var par = $this.parent(".app-panel-wrap"); - par.removeClass("open"); - }); - - function save_left( exp ) { - var data = { - wpb_ajax: true, - action: "app_panel_save_left", - left: exp ? 1 :0, - ajax_nonce: _app_.iedit_nonce - }; - $.post(_app_.ajax_url, data, function (r) { - if (r && r.error) { - window.alert(r.error); - } else if (r) { - } else { - window.alert(_app_.con_error); - } - }, "json"); - } - function saveNavbar(hidden) { var data = { wpb_ajax: true, @@ -1194,46 +1382,30 @@ var openNavbar = $(document).find("#app-open-navbar-schedule"); var container = $(".app-js-schedules"); - $("#app-open-navbar-schedule button").click(function(e){ + $("#app-open-navbar-schedule button").click( function (e) { e.preventDefault(); openNavbar.hide(); navbar.show( "fast" ); saveNavbar( false ); }); - $("#app-close-navbar-schedule button").click(function(e){ + $("#app-close-navbar-schedule button").click( function (e) { e.preventDefault(); navbar.hide( "fast" ); openNavbar.show(); saveNavbar( true ); }); - $(".app-dock-left").click(function(e) { - e.preventDefault(); - var $this = $(this); - var par = $this.parent(".app-panel-wrap"); - - if ( $this.hasClass("left") ) { - $this.removeClass("left"); - par.removeClass("left"); - save_left( false ); - } else { - $this.addClass("left"); - par.addClass("left"); - save_left( true ); - } - }); - - $(".app-filter-submit-btn").click(function(e){ + $(".app-filter-submit-btn").click( function (e) { e.preventDefault(); var $this = $(this); var par = $this.parents("#app-navbar"); var statii = par.find("select[name=app_stats]").val(); + var stats = statii ? statii.join() : ""; var weekdays_arr = par.find("select[name=app_weekdays]").val(); var locations = par.find("select[name=app_locations]").val(); var services = par.find("select[name=app_services]").val(); var workers = par.find("select[name=app_workers]").val(); - var stats = statii ? statii.join() : ""; var weekdays = weekdays_arr ? weekdays_arr.join() : ""; var location_ids = locations ? locations.join() : ""; var service_ids = services ? services.join() : ""; @@ -41,7 +41,7 @@ return; } - add_filter( 'app_confirmation_before_buttons', array( $this, 'terms' ), 10, 2 ); + // add_filter( 'app_confirmation_before_buttons', array( $this, 'terms' ), 10, 2 ); add_filter( 'app_checkout_before_buttons', array( $this, 'terms' ) ); add_filter( 'appointments_display_tabs', array( $this, 'add_tab' ), 13 ); add_action( 'app_display_terms_tab', array( $this, 'terms_settings' ), 13 ); @@ -238,8 +238,8 @@ * @return string */ public function get_client_name( $app_id, $r = null, $add_link = true, $limit = 22, $prime_cache = false ) { - $name = ''; - $limit = apply_filters( 'app_chr_limit', $limit ); + $name = $raw_name = ''; + $limit = apply_filters( 'app_chr_limit', $limit ); $app = (null !== $r) ? $r : wpb_get_app( $app_id, $prime_cache ); if ( $app ) { @@ -281,6 +281,8 @@ $name = mb_substr( $name, 0, $limit, 'UTF-8' ) . '...'; } + $raw_name = $name; + $tt = $full_name; if ( $email ) { @@ -304,10 +306,16 @@ # Fallback if ( ! $name ) { - $name = wp_unslash( wpb_get_text( ! empty( $r->status ) && 'reserved' == $r->status ? 'gcal' : 'client' ) ); + $raw_name = $name = wp_unslash( wpb_get_text( ! empty( $r->status ) && 'reserved' == $r->status ? 'gcal' : 'client' ) ); } - return apply_filters( 'app_get_client_name', $name, $app_id, $r ); + $out = apply_filters( 'app_get_client_name', $name, $app_id, $r ); + + if ( 'full' === $add_link ) { + return array( 'name' => $out, 'raw_name' => $raw_name, ); + } else { + return $out; + } } /** @@ -607,7 +615,7 @@ * @return array|none If used as an action hook, returns none. If used as a method call, returns array (sanitized user submit) */ public function sanitize_submitted_userdata( $validate = 'validate' ){ - + if ( empty( $_POST['app_user_data'] ) ) { return array(); } @@ -775,19 +783,13 @@ # Check if user is not logged in and submitted email is registered # Without this check, someone may login instead of another person using his email - if ( ! is_user_logged_in() && wpb_setting( 'ask_email' ) && $sub_udata['email'] ) { - $maybe_user = get_user_by( 'email', $sub_udata['email'] ); - if ( $maybe_user ) { - $msg = wpb_get_text('login_required'); - if ( false && class_exists( 'UsersWP' ) ) { - die( json_encode( array( 'userswp' => $msg ) ) ); - } else { - die( json_encode( array( - 'loginwp' => $msg, + if ( ! is_user_logged_in() && $sub_udata['email'] ) { + if ( get_user_by( 'email', $sub_udata['email'] ) ) { + die( json_encode( array( + 'loginwp' => wpb_get_text('login_required'), 'email' => $sub_udata['email'], 'recovered' => ! empty( $_POST['value'] ) ? wpb_clean( $_POST['value'] ) : false, - ) ) ); - } + ) ) ); } } else if ( is_user_logged_in() && $sub_udata['email'] && ! wpb_is_admin_user() ) { # Logged in client tries to use another registered user's email @@ -797,7 +799,7 @@ } } - if ( ! $user_id && $sub_udata['email'] && 'yes' == wpb_setting('auto_register_client') ) { + if ( ! $user_id && wpb_setting( 'ask_email' ) && $sub_udata['email'] && 'yes' == wpb_setting('auto_register_client') ) { if ( $maybe_user_id = $this->create_user( $sub_udata ) ) { $user_id = $maybe_user_id; /* Auto login @@ -1258,12 +1260,12 @@ unset( $tabs['settings'] ); $tabs['settings'] = wpb_get_text( 'bp_settings' ); } - + if ( isset( $tabs['store_settings'] ) ) { unset( $tabs['store_settings'] ); $tabs['store_settings'] = wpb_get_text( 'store_settings' ); - } - + } + return $tabs; } @@ -1315,15 +1317,15 @@ if ( !( BASE('Annual') && 'yes' == wpb_setting('allow_worker_annual') && wpb_admin_access_check( 'manage_own_work_hours', false ) ) ) { unset( $tabs['seasonal'] ); } - + if ( wpb_is_account_page() && wpb_is_store_worker( $uid ) ) { unset( $tabs['working_hours'] ); unset( $tabs['holidays'] ); unset( $tabs['seasonal'] ); unset( $tabs['payments'] ); } - - } else if ( wpb_is_manage_store() && wpb_is_manager( $uid ) ) { + + } else if ( wpb_is_manage_store() && wpb_is_manager( $uid ) ) { $tabs = array( 'schedules' => wpb_get_text('bp_schedules'), 'clients' => wpb_get_text('clients'), @@ -1334,21 +1336,26 @@ 'holidays' => wpb_get_text('bp_holidays'), 'seasonal' => wpb_get_text('bp_annual'), 'payments' => wpb_get_text('bp_payments'), - 'store_settings'=> wpb_get_text('store_settings'), + 'store_settings'=> wpb_get_text('store_settings'), ); - + if ( !( BASE('Annual') ) ) { unset( $tabs['seasonal'] ); } - + } else { $tabs = array( 'bookings' => wpb_get_text('bp_bookings'), + 'schedules' => wpb_get_text('bp_schedules'), 'payments' => wpb_get_text('bp_payments'), 'settings' => wpb_get_text('bp_settings'), ); + + if ( ! is_user_logged_in() || ! apply_filters( 'app_client_can_use_schedules', 'yes' == wpb_setting( 'schedule_client_can' ) ) ) { + unset( $tabs['schedules'] ); + } } - + if ( ! wpb_user_can_view_payments( $uid ) ) { unset( $tabs['payments'] ); } @@ -1399,56 +1406,62 @@ if ( wpb_is_manage_store() ) { break; } - + $this->show_profile_bookings( $uid, $is_readonly ); break; - + case 'stores': if ( ! wpb_is_manager( $uid ) || ! BASE('LocationsList') ) { break; } - + BASE('LocationsList')->listing( $uid ); - + break; - + case 'store_settings': if ( ! wpb_is_manager( $uid ) || ! BASE('StoreSettings') ) { break; } - + include_once( WPBASE_PLUGIN_DIR . '/includes/admin/base-admin.php' ); - + BASE('StoreSettings')->display(); - - break; - + + break; + case 'schedules': - if ( ! wpb_is_manager( $uid ) && ! wpb_is_worker( $uid ) && ! wpb_is_admin_user() ) { + if ( ! is_user_logged_in() ) { break; } - + + if ( ! apply_filters( 'app_client_can_use_schedules', 'yes' == wpb_setting( 'schedule_client_can' ) ) ) { + if ( ! wpb_is_manager( $uid ) && ! wpb_is_worker( $uid ) && ! wpb_is_admin_user() ) { + break; + } + } + ?><div id="wpbody-content" class="app-sc wp-admin wp-core-ui app-fem app-clearfix"><?php - + wpb_render_schedules(); - + ?></div><?php - + break; - + case 'clients': if ( ! wpb_is_manager( $uid ) ) { break; - } - + } + include_once( WPBASE_PLUGIN_DIR . '/includes/admin/clients.php' ); - + ?><div class="wp-core-ui app-page"><?php - + BASE('Clients')->client_list( $uid ); - + ?></div><?php - + break; case 'services': @@ -1465,29 +1478,29 @@ ?></div><?php break; - + case 'workers': if ( ! BASE('WorkersList') || ! wpb_is_manager( $uid ) ) { break; } - + ?><div class="wp-core-ui app-page"><?php - + BASE('WorkersList')->worker_list( $uid ); - + ?></div><?php - + break; case 'working_hours': if ( ! wpb_is_manager( $uid ) && (! wpb_is_worker( $uid ) || 'yes' != wpb_setting('allow_worker_wh')) ) { break; } - + if ( wpb_is_account_page() && wpb_is_store_worker( $uid ) ) { break; } - + BASE('WH')->render_tab( wpb_is_manage_store() ? false : $uid ); @@ -1497,10 +1510,10 @@ if ( ! wpb_is_manager( $uid ) && (! wpb_is_worker( $uid ) || 'yes' != wpb_setting('allow_worker_wh')) ) { break; } - + if ( wpb_is_account_page() && wpb_is_store_worker( $uid ) ) { break; - } + } BASE('Holidays')->render_tab( wpb_is_manage_store() ? false : $uid ); @@ -1513,24 +1526,24 @@ if ( ! wpb_is_manager( $uid ) && (! wpb_is_worker( $uid ) || 'yes' != wpb_setting('allow_worker_annual')) ) { break; } - + if ( wpb_is_account_page() && wpb_is_store_worker( $uid ) ) { break; - } + } BASE('Annual')->render_tab( wpb_is_manage_store() ? false : $uid ); break; case 'payments': - if ( wpb_is_multi_store() && ! wpb_is_vendor( $uid ) ) { + if ( wpb_is_manage_store() && ! wpb_is_manager( $uid ) ) { break; } - + if ( wpb_is_account_page() && wpb_is_store_worker( $uid ) ) { break; - } - + } + include_once( WPBASE_PLUGIN_DIR . '/includes/admin/transactions.php' ); ?><div id="wpbody-content" class="app-sc wp-admin wp-core-ui app-fem app-clearfix"><?php @@ -1545,7 +1558,7 @@ if ( wpb_is_manage_store() ) { break; } - + $this->show_profile_settings( $uid, $is_readonly ); break; @@ -1646,7 +1659,7 @@ </form> <?php } - + public static function get_user_meta( $user_id, $f ) { return (string)get_user_meta( $user_id, 'app_'.$f, true ); } @@ -611,8 +611,8 @@ "submitClicked": true }); }); - $("table.app-manage, div.app-manage.app-form, table.app-vendors, table.app-clients, table.app-services, table.app-workers, table.app-locations") - .on("click", ".save", function () { + $("table.app-manage, div.app-manage.app-form, table.app-vendors, table.app-clients, table.app-services, table.app-workers, table.app-locations, table.app-commissions") + .on("click", ".save, .cancel", function () { $(document).data({ "submitClicked": true }); @@ -1277,29 +1277,29 @@ var postData = { wpb_ajax: true, admin_edit: true, - user: par.find("select[name='user'] option:selected").val(), + user: par.find("select[name='user']").val(), create_user: par.find("input[name='create_user']").is(":checked") ? 1 : 0, create_user_check: par.find("input[name='create_user_check']").val(), name: par.find("input[name='cname']").val(), app_user_data: JSON.stringify(app_user_data), - location: par.find("select[name='location'] option:selected").val() || 0, - service: par.find("select[name='service'] option:selected").val(), + location: par.find(".app_select_locations").val() || 0, + service: par.find(".app_select_services").val(), worker: par.find(".app_select_workers").val() || 0, locked: par.find("input[name='locked']").is(":checked") ? 1 : 0, locked_check: par.find("input[name='locked_check']").val(), price: par.find("input[name='price']").val() || 0, deposit: par.find("input[name='deposit']").val() || 0, - created_by: par.find("select[name='created_by'] option:selected").val(), - event_start: par.find("select[name='event_start'] option:selected").val(), + created_by: par.find("select[name='created_by']").val(), + event_start: par.find("select[name='event_start']").val(), start_date: par.find("input[name='start_date']").val(), - start_time: par.find("select[name='start_time'] option:selected").val(), + start_time: par.find("select[name='start_time']").val(), end_date: par.find("input[name='end_date']").val(), - end_time: par.find("select[name='end_time'] option:selected").val(), + end_time: par.find("select[name='end_time']").val(), parent_id: par.find("input[name='parent_id']").val(), note: par.find("textarea[name='note']").val(), note_check: par.find("input[name='note_check']").val(), admin_note: par.find("textarea[name='admin_note']").val(), - status: par.find("select[name='status'] option:selected").val(), + status: par.find("select[name='status']").val(), resend: par.find("input[name='resend']").is(":checked") ? 1 : 0, send_pending: par.find("input[name='send_pending']").is(":checked") ? 1 : 0, send_cancel: par.find("input[name='send_cancel']").is(":checked") ? 1 : 0, @@ -1312,9 +1312,9 @@ app_seats: par.find(".app_seats").val(), app_extras: $.isArray(extras) ? extras.join(",") : extras, app_extras_check: par.find("input[name='app_extras_check']").val(), - app_multilang: par.find("select[name='app_multilang'] option:selected").val(), + app_multilang: par.find("select[name='app_multilang']").val(), app_multilang_check: par.find("input[name='app_multilang_check']").val(), - app_duration: par.find("select[name='app_duration'] option:selected").val(), + app_duration: par.find("select[name='app_duration']").val(), taken_over_at: par.find("input[name='taken_over_at']").val(), zoom_recover_id: par.find("input[name='zoom_recover_id']").val(), is_account_page: _app_.is.account_page ? 1 : 0, Only in /home/deploy/wp-safety.org/data/plugin-versions/wp-base-booking-of-appointments-services-and-events/6.0.0/js: app-datatables.js @@ -326,253 +326,6 @@ WPB_Common.init(); - /** - * Arrange List of Bookings and app-list table - */ - var WPB_List = { - init: function() { - var me = this; - var tbl = $("table.app-list"); - $(document).data("app_list_table_clone", tbl.clone()); - - $.extend( $.fn.dataTableExt.oJUIClasses, { - "sFilterInput": "ui-toolbar ui-state-default app-no-save-alert app-w-select", - "sLengthSelect": "ui-toolbar ui-state-default app-no-save-alert" - }); - $.fn.dataTable.moment( _app_.moment_format, _app_.locale ); - - var dt = tbl.DataTable(me.args(tbl)); - this.dt_api = dt; - me.qtip(tbl); - dt.on("page.dt, search.dt, draw.dt", function () { - me.qtip(tbl); - }); - - $(document).find(".fg-toolbar").removeClass("ui-widget-header"); - dt.on("draw.dt", function () { - $.styleButtons(); - }); - - $(".app_save_profile_submit").click(function (e) { - me.ratesSubmit(e); - }); - - $(document).on( "click", ".app-list button.app-list-cancel", function(e) { - var $this = $(this); - if ($this.hasClass("app-disabled-button")) { - return false; - } - e.preventDefault(); - $this.addClass("app-disabled-button"); - $this.closest("tr").css("opacity", "0.3"); - var r = window.confirm(_app_.cancel_app_confirm); - if ( !r ) { - $this.removeClass("app-disabled-button"); - $this.closest("tr").css("opacity", "1"); - } else { - me.cancel($this); - } - }); - - $(document).on( "click", ".app-list button.app-list-confirm", function(e) { - var $this = $(this); - if ($this.hasClass("app-disabled-button")) { - return false; - } - e.preventDefault(); - $this.addClass("app-disabled-button"); - $this.closest("tr").css("opacity", "0.3"); - var r = window.confirm(_app_.confirmConfirm); - if ( !r ) { - $this.removeClass("app-disabled-button"); - $this.closest("tr").css("opacity", "1"); - } else { - me.confirm($this); - } - }); - - $(document).on( "click", ".app-list button.app-list-pay", function(e) { - var $this = $(this); - if ($this.hasClass("app-disabled-button")) { - return false; - } - e.preventDefault(); - $this.addClass("app-disabled-button"); - $this.closest("tr").css("opacity", "0.3"); - window.location.href = $this.data("href"); - }); - }, - - /** - * Let hidden fields to be submitted - */ - ratesSubmit: function (e) { - e.preventDefault(); - var $this = $(e.target); - var par = $this.parents("form"); - // Submit hidden fields - // https://datatables.net/plug-ins/api/fnGetHiddenNodes - var nodes; - var display = par.find('tbody tr'); - nodes = this.dt_api.rows().nodes().toArray(); - /* Remove nodes which are being displayed */ - var i = 0; - var iIndex = 0; - for (i = 0; i < display.length; i = i + 1) { - iIndex = $.inArray(display[i], nodes); - - if (iIndex !== -1) { - nodes.splice(iIndex, 1); - } - } - par.find(".app_rates_hidden").append(nodes); - par.submit(); - }, - - /* DataTable arguments */ - args: function(tbl) { - return { - "bAutoWidth": true, - "initComplete": $.styleButtons(), - "fnInitComplete": function () { - tbl.css({opacity: 0.0, visibility: "visible"}).animate({opacity: 1.0}); - var s = $.readGet("app_s"); - var filter = $(".dataTables_filter input"); - filter.attr("placeholder", _app_.search).val(s); - if (s) { - filter.trigger("keyup"); - } - }, - "lengthMenu": [ [10, 25, 50, 100, -1], [10, 25, 50, 100, _app_.all] ], - "pageLength": tbl.data("page_length") || _app_.page_length || 10, - "responsive": true, - "aaSorting": [ ], - "bJQueryUI": true, - "aoColumnDefs" : [ { - "bSortable" : false, - "aTargets" : [ - "app-list-gcal-header", - "app-list-confirm-header", - "app-list-edit-header", - "app-list-cancel-header", - "app-list-pdf-header", - "app-list-zoom-header", - "app-list-jitsi-header", - "app-list-agora-header" - ] - } ], - "language": { - "info": _app_.info, - "emptyTable": _app_.no_appointments, - "paginate": { - "next": _app_.next, - "previous": _app_.previous - }, - "search": "", - "lengthMenu": _app_.length_menu - } - }; - }, - - /* Handle cancel */ - cancel: function ($this) { - var cancel_id = $this.data("app_id"); - if (!cancel_id) { - return false; - } - - $.infoPanel(); - - var cancel_data = { - action: "cancel_app", - app_id: cancel_id, - cancel_nonce: _app_.cancel_nonce, - args: $this.parents("table.app-list").data("args") - }; - $.post(_app_.ajax_url, cancel_data, function(r) { - $this.closest("tr").css("opacity", "1"); - if (!r) { - alert(_app_.con_error); - return false; - } - if (r.error ) { - alert(r.error); - } else if (r.success) { - alert(_app_.cancelled); - window.location.href = window.location.href; - } - }, "json"); - }, - - /* Handle confirm */ - confirm: function ($this) { - var confirm_id = $this.data("app_id"); - if (!confirm_id) { - return false; - } - - $.infoPanel(); - - var confirm_data = { - action: "confirm_app", - app_id: confirm_id, - confirm_nonce: _app_.confirm_nonce, - args: $this.parents("table.app-list").data("args") - }; - $.post(_app_.ajax_url, confirm_data, function(r) { - $this.closest("tr").css("opacity", "1"); - if (!r) { - alert(_app_.con_error); - return false; - } - if (r.error ) { - alert(r.error); - } else if (r.success) { - alert(_app_.confirmed_message); - window.location.href = window.location.href; - } - }, "json"); - }, - - /* Show children in qtip */ - qtip: function (tbl) { - tbl.find(".app-list-service-name").qtip({ - overwrite: true, - content: { - text: function(ignore, api) { - api.elements.content.html(_app_.please_wait); - return $.ajax({ - url: _app_.ajax_url, - type: "POST", - dataType: "json", - data: { - wpb_ajax: true, - app_id: $(this).data("app_id"), - args: JSON.stringify($(this).parents("table.app-list").data("args")), - action: "app_show_children_in_tooltip" - } - }) - .then(function(res) { - var content = res.result; - return content; - }, function(ignore, status, error) { - api.set("content.text", status + ": " + error); - }); - } - }, - hide: _app_.qtipHide, - position: _app_.qtipPos, - style: _app_.qtipSmall - }); - } - }; - - WPB_List.init(); - - $(document).on("app-client-record-opened", function(){ - WPB_List.init(); - }); - $(document).on("click", ".app-become-vendor", function(e){ e.preventDefault(); var $this = $(this); @@ -663,6 +416,579 @@ }); }); + + /** + * Add/edit/save bookings quickly using sidebar panel + */ + $.WPB_Quickbook = { + + init: function (task, arg, calendar) { + var me = this; + + me.wrap = $(document).find(".app-panel-wrap"); + me.panel = $(document).find(".app-panel"); + + var table = $("div.app-manage"); + + table.on("click", ".save", function (e) { + e.preventDefault(); + me.save(e); + }); + + table.on("change", "select.app_seats,select.app_extras,.app-admin-lsw,select[name='start_time'],select[name='status'],select.app_duration,.app-special-select", function (e) { + me.updateEdit($(e.target)); + }); + + var cursorTimer; + table.on("keyup", "input[name='app_seats'],.app-special-text", function (e) { + clearTimeout(cursorTimer); + cursorTimer = setTimeout(function () { + me.updateEdit($(e.target)); + }, 500); + }); + + table.on("focus", ".datepicker", function (e) { + if ( !$(this).prop( "readonly" ) ) { + me.datePicker(e); + } + }); + + /* Cancel */ + table.on("click", ".cancel, .app-close-panel", function (e) { + e.preventDefault(); + me.cancel(); + }); + + /* Redraw multiselect */ + $(window).resize(function () { + $.each($(".app_users,.app_extras"), function (ignore, val) { + $this = $(val); + if ($this.data().hasOwnProperty("echMultiselect")) { + $this.multiselect("refresh"); + } + }); + }); + + }, + + /** + * If cancel button clicked, close panel, enable Edit button + */ + cancel: function () { + var me = this; + me.wrap.removeClass("open"); + $(".app-panel-overlay").remove(); + + var btn = me.edit_btn; + + if (btn) { + btn.removeClass("app-disabled-button"); + btn.closest("tr").css("opacity", 1); + } + }, + + /** + * Read all field values of a row (par) + * @param par object Possibly a row in the table under which fields will be read + */ + readData: function (par) { + var table = par.parents("div.app-manage"); + + var app_user_data = {}; + $.each(_app_.user_fields, function (ignore, v) { + app_user_data[v] = par.find("input[name='" + v + "']").val(); + }); + + var postData = { + wpb_ajax: true, + admin_edit: true, + user: par.find("select[name='user']").val(), + create_user: par.find("input[name='create_user']").is(":checked") ? 1 : 0, + create_user_check: par.find("input[name='create_user_check']").val(), + name: par.find("input[name='cname']").val(), + app_user_data: JSON.stringify(app_user_data), + location: par.find(".app_select_locations").val() || 0, + service: par.find(".app_select_services").val(), + worker: par.find(".app_select_workers").val() || 0, + start_date: par.find("input[name='start_date']").val(), + start_time: par.find("[name='start_time']").val(), + end_date: par.find("input[name='end_date']").val(), + end_time: par.find("[name='end_time']").val(), + status: par.find("select[name='status']").val(), + app_id: par.find("input[name='app_id']").val(), + app_seats: par.find(".app_seats").val(), + app_duration: par.find("select[name='app_duration']").val(), + send_email: par.find("input[name='send_email']").is(":checked") ? 1 : 0, + only_own: table.data("only_own"), + ajax_nonce: _app_.iedit_nonce, + is_account_page: _app_.is.account_page ? 1 : 0, + is_store_page: _app_.is.store_page ? 1 : 0 + }; + + /* Add special values to post data */ + var postSpecialData = {}; + + par.find("input[class*=app-special-text], select[class*=app-special-select]").each( function(){ + var sp_name = $(this).attr("name"); + var sp_value = $(this).attr("type") === "checkbox" ? ((this).checked ? 1 : 0) : $(this).val(); + postSpecialData[sp_name] = sp_value; + }); + + $.extend(postData, postSpecialData); + + var udfs = {}; + $.each(_app_.udf_ids, function (ignore, v) { + var field = par.find(".app-udf-field-entry-" + v); + if (parseInt(field.length) > 0) { + if (field.hasClass("app-udf-checkbox")) { + udfs["udf_" + v] = field.is(":checked") ? 1 : 0; + } else { + udfs["udf_" + v] = field.val(); + } + } + }); + postData = $.extend(postData, { + udf_data: JSON.stringify(udfs) + }); + + return postData; + }, + + /** + * Edit or add a booking + */ + upsert: function (task, arg, calendar) { + var me = this; + me.calendar = calendar; + var resource_id = typeof arg.resource === "undefined" ? 0 : arg.resource.id; + var post_id, author_id, cap, lang, override; + + if ( typeof arg.fee === "object" ) { + me.fee = true; + me.edit_btn = $(arg.fee.edit_btn); + me.list_table = $(arg.fee.list_table); + post_id = arg.fee.post_id; + author_id = arg.fee.author_id; + cap = arg.fee.cap; + lang = arg.fee.lang; + override = arg.fee.override; + } else { + me.fee = false; + me.edit_btn = false; + me.list_table = false; + } + + var data = { + wpb_ajax: true, + action: me.fee ? "app_listing_edit" : "app_quick_book_upsert", + app_id: task == "edit" ? arg.event.id : 0, + worker: task == "add" ? resource_id : 0, + updated: task == "add" && resource_id ? "worker" : "", + app_timestamp: task == "add" ? arg.startStr : 0, + ajax_nonce: _app_.iedit_nonce, + is_account_page: _app_.is.account_page ? 1 : 0, + is_store_page: _app_.is.store_page ? 1 : 0, + post_id: post_id, + author_id: author_id, + cap: cap, + app_lang: lang, + override: override + }; + + me.panel.empty(); + + $.infoPanel( 'loading' ); + + $.post(_app_.ajax_url, data, function (r) { + if (r && r.error) { + window.alert(r.error); + } else if (r) { + me.wrap.addClass("open"); + if ( _app_.is.client ) { + $(document.body).prepend('<div class="app-panel-overlay"></div>'); + } + + var iedit_row = r.result; + var insertedRow = $(iedit_row).appendTo(me.panel); + insertedRow.find(".inline-edit-col .blocked-days") + .val(r.blocked_days).data("blocked", r.blocked_days); + var dpicker_id = insertedRow.find(".datepicker").attr("id"); + $("#" + dpicker_id).datepicker("refresh"); + if (parseInt(r.locked) > 0) { + insertedRow.data("locked", true); + } + me.configureMS(r.id); + me.configQtip(r.id); + } else { + window.alert(_app_.con_error); + } + }, "json"); + }, + + /** + * Updates fields during edit if lsw or date/time fields changed + */ + updateEdit: function (obj) { + var me = this; + var par = obj.parents(".inline-edit-row"); + var table = par.parents("div.app-manage"); + var only_own = table.data("only_own"); + me.fee = par.hasClass("app-fee"); + + if (obj.hasClass("app_seats") && !obj.val()) { + return false; + } + + $.infoPanel(); + + if ($.inArray(parseInt(obj.val()), _app_.daily_services) === -1) { + $(".app-is-daily").text(""); + par.find(".app-admin-time,input[name='end_date']") + .css("text-decoration", "none") + .attr("disabled", false); + } else { + // Daily + $(".app-is-daily").text(_app_.daily_text); + par.find(".app-admin-time,input[name='end_date']") + .css("text-decoration", "line-through") + .attr("disabled", true); + } + + par.find(".app-admin-lsw").attr("disabled", "disabled"); + var locSel = par.find(".app_select_locations"); + var serviceSel = par.find(".app_select_services"); + var workerSel = par.find(".app_select_workers"); + var startTimeSel = par.find("select[name='start_time']"); + var endTimeSel = par.find("select[name='end_time']"); + + var durationLabel = par.find(".app_iedit_duration"); + var durationSel = durationLabel.find(".input-text-wrap"); + var repeatUnitLabel = par.find(".app_iedit_repeat_unit"); + var repeatUnitSel = repeatUnitLabel.find(".input-text-wrap"); + var repeatNumberLabel = par.find(".app_iedit_repeat_count"); + var repeatNumberSel = repeatNumberLabel.find(".input-text-wrap"); + + var postData = me.readData(par); + postData.action = me.fee ? "app_listing_update" : "app_quick_book_update"; + if (parseInt(par.find(".is_event").val()) > 0 ) { + postData.is_event = true; + } + // if (obj.hasClass("app_select_workers") && obj.val()) { + // postData.updated = "worker"; + // } + + $.post(_app_.ajax_url, postData, function (r) { + + par.find(".app-admin-lsw").attr("disabled", false); + + if (r && r.error) { + window.alert(r.error); + } else if (r) { + var notice = r.notice || ""; + par.find(".app-admin-notice").empty().html(notice); + if (r.event_start) { + par.find("[name='event_start']").replaceWith(r.event_start); + } + if (r.event_end) { + par.find("[name='event_end']").replaceWith(r.event_end); + } + if (r.end_date) { + var end_date_fld = par.find("input[name='end_date']"); + end_date_fld.attr("readonly", false); + end_date_fld.val(r.end_date); + end_date_fld.attr("readonly", true); + } + if (r.start_time_sel) { + startTimeSel.replaceWith(r.start_time_sel); + } + if (r.end_time_sel) { + endTimeSel.replaceWith(r.end_time_sel); + } + if (r.locations_sel) { + locSel.replaceWith(r.locations_sel); + } + if (r.services_sel) { + serviceSel.replaceWith(r.services_sel); + } + if (r.durations_sel) { + durationSel.html(r.durations_sel); + durationLabel.show(); + } else { + durationLabel.hide(); + } + if (r.repeat_unit_sel) { + repeatUnitSel.html(r.repeat_unit_sel); + repeatUnitLabel.show(); + } else { + repeatUnitLabel.hide(); + } + if (r.repeat_count_sel) { + repeatNumberSel.html(r.repeat_count_sel); + repeatNumberLabel.show(); + } else { + repeatNumberLabel.hide(); + } + if (r.workers_sel) { + workerSel.siblings(".worker-name").remove(); + workerSel.replaceWith(r.workers_sel); + } + if (r.seats) { + par.find(".app_seats").replaceWith(r.seats); + } + + par.find(".blocked-days").val(r.blocked_days).data("blocked", r.blocked_days); + var dpicker_id = par.find(".datepicker").attr("id"); + $("#" + dpicker_id).datepicker("refresh"); + + } else { + window.alert(_app_.con_error); + } + }, "json"); + }, + + /** + * Save a booking + */ + save: function (e) { + var me = this; + var $this = $(e.target); + var sPar = $this.parents(".inline-edit-row"); + me.fee = sPar.hasClass("app-fee"); + $this.attr("disabled", true); + $.infoPanel("saving"); + sPar.find(".waiting").show(); + + var postData = me.readData(sPar); + postData.action = me.fee ? "app_listing_save" : "app_quick_book_save"; + if (parseInt(sPar.find(".is_event").val()) > 0 ) { + postData.is_event = true; + } + + $.post(_app_.ajax_url, postData, function (r) { + $this.attr("disabled", false); + sPar.find(".waiting").hide(); + + if (!r) { + window.alert(_app_.con_error); + return false; + } + var emailMsg = r.emailMsg ? " " + r.emailMsg : ""; + if (r.error) { + sPar.find(".error") + .html("<span class='app-error'>" + r.error + emailMsg + "</span>") + .show().delay(10000).fadeOut("slow"); + } else if (r.no_change) { + sPar.find(".error") + .html("<span class='app-b'>" + r.no_change + emailMsg + "</span>") + .show().delay(10000).fadeOut("slow"); + } else if (r.result) { + sPar.find(".error") + .html("<span class='app-success'>" + r.result + emailMsg + "</span>") + .show().delay(10000).fadeOut("slow"); + + r.target = $this; + $(document).trigger("app-admin-booking-saved", r); + + setTimeout(function () { + me.wrap.removeClass("open"); + $(".app-panel-overlay").remove(); + }, 3000); + + if ( r.event && typeof me.calendar === "object") { + if (r.inserted) { + me.calendar.addEvent( r.event ); + } else { + me.calendar.updateEvent( r.event ); + } + } else if ( me.fee ) { + var tbl = me.list_table; + var row = tbl.find("tr[data-app_id='"+ r.app_id +"']"); + var col; + + $.each(r, function (i, v) { + col = row.find("."+ i +"-app-mng"); + if (col.length) { + if (i === "price" || i === "deposit" || i === "total_paid" || i === "balance") { + col.text(function () { + p = v.indexOf("-") > -1 ? "-" : ""; + return p + col.text().replace("-", "").replace(/[0-9\.,]+/, v.replace("-", "")); + }); + } else { + col.html(v); + } + } + }); + + me.edit_btn.removeClass("app-disabled-button"); + me.edit_btn.closest("tr").css("opacity", 1); + } + } else if (emailMsg) { + sPar.find(".error") + .html("<span class='app-success'>" + emailMsg + "</span>") + .show().delay(10000).fadeOut("slow"); + } + }, "json"); + }, + + /** + * Populate userdata upon user selection + */ + populateUser: function (me) { + var sel_user = parseInt(me.val()); + var par = me.parents(".inline-edit-col"); + if (sel_user === 0) { + // Clear fields for unregistered user + $.each(_app_.user_fields, function (ignore, v) { + par.find(".app_iedit_" + v + " input").val(""); + }); + par.find(".app-quick-book-user-fields").show(); + par.find(".app_iedit_create_user").show(); + return false; + } + $.infoPanel("reading"); + par.find(".app-quick-book-user-fields").hide(); + par.find(".app_iedit_create_user").hide(); + var data = { + action: "app_populate_user", + user_id: sel_user, + ajax_nonce: _app_.iedit_nonce + }; + $.post(_app_.ajax_url, data, function (r) { + if (r && r.error) { + window.alert(r.error); + } else if (r) { + par.find(".app_iedit_create_user :input").prop("checked", false); + $.each(r, function (i, v) { + par.find(".app_iedit_" + i + " :input").val(v); + }); + } else { + window.alert(_app_.con_error); + } + }, "json"); + }, + + /** + * Initiates Multiselect for users and extras + */ + configureMS: function (id) { + var me = this; + var $this = $("#app_users_" + id); + + $("#app_extras_" + id).multiselect({ + selectedList: 3, + buttonWidth: "100%", + classes: "app_extras app-ms-small" + }).multiselectfilter(); + + if ( _app_.is.msUsers ) { + $this.multiselect({ + openEffect: null, + closeEffect: null, + menuHeight: 300, + selectedList: 1, + buttonWidth: "100%", + classes: "app_users app-ms-small app_users_admin app-users-quick-book", + close: function () { + me.populateUser($this); + } + }).multiselectfilter(); + } + + $(document).trigger("app-configure-ms", id); + }, + + /** + * Initiate datepicker upon focus + */ + datePicker: function (e) { + var me = this; + var $this = $(e.target); + if ($this.data("focused") !== "yes") { + $this.datepicker({ + dateFormat: _app_.js_date_format, + firstDay: _app_.start_of_week, + onSelect: function (dateText) { + if ($this.attr("name") === "start_date") { + $this.parents(".inline-edit-col") + .find("input[name='end_date']") + .datepicker("setDate", dateText); + me.updateEdit($this); + } + }, + beforeShowDay: function (date) { + var string = $.datepicker.formatDate("yy-mm-dd", date); + var datelist = $this.parents(".inline-edit-col").find(".blocked-days").data("blocked"); + if (datelist) { + return [$.inArray(string, datelist) === -1]; + } else { + return [true]; + } + } + }); + } + $this.data("focused", "yes"); + }, + + /** + * Initiates qtip + */ + configQtip: function (id) { + var edit_row = $(".inline-edit-row"); + edit_row.find("[title][title!='']").each(function (ignore, val) { + var $this = $(val); + var title = $this.attr("title"); + var ttip = title ? title.replace(/●/g, "<br />").replace("/|/", "<br/>") : ""; + + $this.qtip({ + content: { + text: ttip + }, + hide: _app_.qtipHide, + position: _app_.qtipPos, + style: _app_.qtipYellow + }); + }); + + var cacheCl = "app-payment-cache-" + id; + var cache = $("<div class='" + cacheCl + "' />"); + var abbrPayment = $("#app-payment-ttip-" + id); + + abbrPayment.qtip({ + overwrite: true, + content: { + text: function (ignore, api) { + if (parseInt($(document).find("." + cacheCl).length) > 0) { + return $(document).find("." + cacheCl).html(); + } + api.elements.content.html(_app_.loading); + return $.ajax({ + url: _app_.ajax_url, + type: "POST", + dataType: "json", + data: { + app_id: abbrPayment.parents(".inline-edit-row") + .find("input[name='app_id']").val(), + action: "app_show_payment_in_tooltip" + } + }) + .then(function (res) { + var content = res.result; + if (content) { + cache.html(content).appendTo($(document.body)).hide(); + } + return content; + }, function (ignore, status, error) { + api.set("content.text", status + ": " + error); + }); + } + }, + hide: _app_.qtipHide, + position: _app_.qtipPos, + style: _app_.qtipSmall + }); + } + }; + $.WPB_Quickbook.init(); }); Only in /home/deploy/wp-safety.org/data/plugin-versions/wp-base-booking-of-appointments-services-and-events/5.9.0/js/dev: moment.min.js @@ -1100,7 +1100,6 @@ } if (r.amount){ - $(".app-conf-amount").html(r.amount).show(); cw.find(".app-booking-info .amount").html(r.amount); } else { if (!_app_.is.open_method && !r.open_method) { @@ -2867,240 +2866,6 @@ }; WPB_Login.init(); - /** - * Front End Edit - */ - var WPB_FEE = { - - locked: false, - - /** - * Event listeners - */ - init: function () { - var me = this; - var appID = 0; - - var temp = $(document).find(".app-template-for-edit"); - if (temp && temp.length > 0) { - appID = temp.data("app_id"); - me.openDialog(appID, false); - } - - $(document).on("click", ".app-list-edit", function (e) { - e.preventDefault(); - var $this = $(this); - if ($this.hasClass("app-disabled-button")) { - return false; - } - - $this.addClass("app-disabled-button"); - $this.closest("tr").css("opacity",_app_.opacity); - appID = $this.data("app_id"); - me.openDialog(appID, $this); - }); - - $(document).on( "change", ".app-edit-wrapper .app_select_locations, .app-edit-wrapper .app_select_services," + - ".app-edit-wrapper .app_select_workers, .app-edit-wrapper .app-edit-time, .app-edit-wrapper .app_select_seats", function () { - me.update($(this)); - }); - - $(document).on("app-cancelled", function(){ - $(".app-list-edit").closest("tr").css("opacity","1"); - $(".app-list-edit").removeClass("app-disabled-button"); - }); - }, - - /** - * Open dialog with selected app_id - * @param appID integer Booking id - * @param btn object Clicked edit button - */ - openDialog: function (appID, btn) { - var me = this; - $.infoPanel("reading"); - var w = window.innerWidth; - var dwidth = 0; - if (w > 600) { - dwidth = 600; - } else { - dwidth= w - 30; - } - - me.locked = true; - $(".app-edit-wrapper").remove(); - var cap = btn ? btn.data("cap") : "read"; - var edit_data = { - action: "open_edit_dialog", - wpb_ajax: true, - app_id: appID, - post_id: _app_.post_id, - author_id: parseInt(_app_.author_id), - edit_nonce: _app_.edit_nonce, - cap: cap, - app_lang: _app_.lang, - override: btn ? btn.data("override") : "" - }; - var editWrap = $("<div class='app-fee-wrapper'></div>"); - - $.post(_app_.ajax_url, edit_data, function(r) { - $(document).trigger("app-edit-dialog-before-open"); - me.locked = false; - if (r.error) { - alert(r.error); - if (btn) { - btn.closest("tr").css("opacity","1"); - } - } else if (r.success) { - var $h = $(r.success); - $h.find("fieldset").css("margin","0").css("box-sizing","border-box").css("border","none"); - $h.find("legend").remove(); - $h.find(".ui-icon").remove(); - if (r.show_these) { - $.each(r.show_these, function(ignore, value) { - $h.find(value).show(); - }); - } - - me.adjust($h); - editWrap.html($h).dialog({ - closeOnEscape: false, - dialogClass: "app-fee", - width: dwidth, - title: r.title, - open: function(){ - $(".ui-dialog").find(".ui-dialog-titlebar-close").hide(); - }, - position: { - my: "center top+50", - at: "center top", - of: window - }, - draggable: true, - modal: _app_.is.modal, - hide: _app_.hideEffect, - show: _app_.showEffect - }); - editWrap.find(".blocked-days").data("blocked",r.dates); - me.dPicker(); - $.styleButtons(); - $(document).trigger("app-edit-dialog-opened", r); - } else { - alert(_app_.con_error); - } - }, "json"); - }, - - adjust: function($h) { - $h = $h || $(document).find("div.app-edit-wrapper"); - var w = window.innerWidth; - if ( w < 650 ) { - $h.addClass("above-input"); - } else { - $h.removeClass("above-input"); - } - }, - - dPicker: function () { - if (typeof $.fn.datepicker !== "function") { - return false; - } - var me = this; - $.each($(".app-date-field-entry:not([readonly]), .app-edit-date:not([readonly])"), function () { - var $this = $(this); - var datelist = []; - $this.datepicker({ - dateFormat: "yy-mm-dd", - maxDate: $this.data("maxdate") ? $this.data("maxdate") : null, - firstDay:_app_.start_of_week, - beforeShowDay: function(date){ - if ($this.attr("readonly")){ - return false; - } - if ($this.hasClass("app-date-field-entry")){ - return [true]; - } - datelist = $this.parents(".app-edit-wrapper").find(".blocked-days").data("blocked"); - var string = $.datepicker.formatDate("yy-mm-dd", date); - return [$.inArray(string, datelist)>-1]; - }, - onSelect:function(){ - me.update(); - } - }); - }); - }, - - /** - * Update dialog fields when a selection has been changed - */ - update: function (elm) { - var me = this; - var $this = elm || $(".datepicker"); - var par = $this.parents(".app-edit-wrapper"); - var locWrap = par.find(".app-conf-loc"); - var servicesWrap = par.find(".app-conf-service"); - var workerWrap = par.find(".app-conf-worker"); - var startWrap = par.find(".app-conf-start"); - var startDdown = startWrap.find(".app-edit-date"); - var timeDdown = startWrap.find(".app-edit-time"); - var priceWrap = par.find(".app-conf-price"); - var data = readForm(par); - var app_id = par.find(".app-edit-id").val(); - data.app_id = app_id; - data.edit_nonce = _app_.edit_nonce; - data.app_date = startDdown.val(); - data.app_start = timeDdown.val(); - data.action = "update_edit"; - $.infoPanel(); - - $.post(_app_.ajax_url, data, function (r) { - if (r.error) { - alert(r.error); - } else if (r) { - locWrap.html(r.locs); - servicesWrap.html(r.services); - workerWrap.html(r.workers); - timeDdown.html(r.times); - priceWrap.html(r.price); - par.find(".blocked-days").data("blocked",r.dates); - me.dPicker(); - var dpicker_id = par.find(".datepicker").attr("id"); - par.find("#" + dpicker_id).datepicker("refresh"); - - if (r.pax_options) { - var $el = par.find("select.app_select_seats"); - $el.empty(); - $.each(r.pax_options, function(key, selected) { - $el.append($("<option></option>").attr("value", key).text(key) - .attr("selected", !!parseInt(selected) > 0)); - }); - } - - if (r.pax_sel) { - var lopno = 0; - var fields = par.find(".app-lop-field"); - var min = r.pax_pot ? Math.min(r.pax_pot, r.pax_sel) : r.pax_sel; - $.each(fields, function(){ - lopno = $(this).data("lopno"); - if (lopno <= min) { - $(this).show(); - } else { - $(this).hide(); - } - }); - } - } else { - alert(_app_.con_error); - } - }, "json"); - } - }; - WPB_FEE.init(); - $(window).on("resize", function() { - WPB_FEE.adjust(); - }); - /** * Resize all dialogs on the page upon window size change */ @@ -3,174 +3,6 @@ !function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=F,this.elements={target:a},this._id=S+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:E,attr:e,onTooltip:E,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=E}function f(a){return a===F||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?E:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?(c=g(b)?E:b,b=a.content={text:c}):c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==E,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,F,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||E)&&(b.title=E))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===D?{ready:D}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(R,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)if(this.checks.hasOwnProperty(c))for(d in this.checks[c])this.checks[c].hasOwnProperty(d)&&(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){return V.concat("").join(a?"-"+a+" ":" ")}function l(a,b){return b>0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(aa)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(aa)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(aa)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(ca,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+va.join(f+" ")+f).split(" "),h=0;if(ua[b])return a.css(ua[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return ua[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.qtip=a,this.init(a)}function w(a,b){this.options=b,this._ns="-modal",this.qtip=a,this.init(a)}function x(a){this._ns="ie6",this.qtip=a,this.init(a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",aa=S+"-disabled",ba="_replacedByqTip",ca="oldtitle",da={ie:function(){var a,c;for(a=4,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:NaN}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b=this,c=this.options,e=this.cache,f=this.elements,g=c.content.text,h=c.content.title,i=c.content.button,j=c.position,k=[];return d.attr(this.target[0],"aria-describedby",this._id),e.posClass=this._createPosClass((this.position={my:j.my,at:j.at}).my),this.tooltip=f.tooltip=d("<div/>",{id:this._id,"class":[S,Z,c.style.classes,e.posClass].join(" "),width:c.style.width||"",height:c.style.height||"",tracking:"mouse"===j.target&&j.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(aa,this.disabled).attr(U,this.id).data(S,this).appendTo(j.container).append(f.content=d("<div />",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,h&&(this._createTitle(),d.isFunction(h)||k.push(this._updateTitle(h,E))),i&&this._createButton(),d.isFunction(g)||k.push(this._updateContent(g,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var c;"render"===this.initialize&&(c=this(b))&&(b.plugins[a]=c)}),this._unassignEvents(),this._assignEvents(),this._when(k).then(function(){b._trigger("render"),b.positioning=E,b.hiddenDuringWait||!c.show.ready&&!a||b.toggle(D,e.event,E),b.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var a,b=this.target,c=b.attr(ca);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)this.timers.hasOwnProperty(a)&&clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(ca),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var ea=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fa=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;var c,e=this.rendered,f=E,g=this.options;return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fa.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=ea.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():(new d.Deferred).resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTitle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=da.iOS?a.innerWidth:m.width(),w=da.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(da.iOS>3.1&&da.iOS<4.1||da.iOS>=4.3&&da.iOS<4.33||!da.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&(j.posClass=i,k.removeClass(j.posClass).addClass(i)),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),da.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!da.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var ga=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;ga.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},ga.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},ga.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},ga.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=this.options.position,n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",new d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(da.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(aa):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(aa,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),e.jquery?b.button=e:b.button=d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend(d("<span />",{"class":"ui-icon ui-icon-close",html:"×"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(aa)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(aa);c.removeClass(aa),aa=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(aa,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},z._trigger=function(a,b,c){var e=new d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=d(a),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(aa)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(aa)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c.hasClass(aa)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&f.options&&"object"==typeof f&&"object"==typeof f.options&&f.options.suppress)return arguments.length<2?d.attr(c,ca):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(ca,b))}return d.fn["attr"+ba].apply(this,arguments)},clone:function(a){var b=d.fn["clone"+ba].apply(this,arguments);return a||b.filter("["+ca+"]").attr("title",function(){return d.attr(this,ca)}).removeAttr(ca),b}},function(a,b){if(!b||d.fn[a+ba])return D;var c=d.fn[a+ba]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+ba]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+ba].apply(this,arguments)}),y.version="3.0.3",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at:"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var ha,ia,ja,ka,la,ma="margin",na="border",oa="color",pa="background-color",qa="transparent",ra=" !important",sa=!!b.createElement("canvas").getContext,ta=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,ua={},va=["Webkit","O","Moz","ms"];sa?(ka=a.devicePixelRatio||1,la=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ja=ka/la):ia=function(a,b,c){return"<qtipvml:"+a+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(b||"")+' style="behavior: url(#default#VML); '+(c||"")+'" />'},d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("<div />",{"class":S+"-tip"}).prependTo(a.tooltip),sa?(b=d("<canvas />").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=ia("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offset<b.outerHeight(D))},_parseCorner:function(a){var b=this.qtip.options.position.my;return a===E||b===E?a=E:a===D?a=new A(b.string()):a.string||(a=new A(a),a.fixed=D),a},_parseWidth:function(a,b,c){var d=this.qtip.elements,e=na+s(b)+"Width";return(c?u(c,e):u(d.content,e)||u(this._useTitle(a)&&d.titlebar||d.content,e)||u(d.tooltip,e))||0},_parseRadius:function(a){var b=this.qtip.elements,c=na+s(a.y)+s(a.x)+"Radius";return da.ie<9?0:u(this._useTitle(a)&&b.titlebar||b.content,c)||u(b.tooltip,c)||0},_invalidColour:function(a,b,c){var d=a.css(b);return!d||c&&d===a.css(c)||ta.test(d)?E:d},_parseColours:function(a){var b=this.qtip.elements,c=this.element.css("cssText",""),e=na+s(a[a.precedance])+s(oa),f=this._useTitle(a)&&b.titlebar||b.content,g=this._invalidColour,h=[];return h[0]=g(c,pa)||g(f,pa)||g(b.content,pa)||g(b.tooltip,pa)||c.css(pa),h[1]=g(c,e,oa)||g(f,e,oa)||g(b.content,e,oa)||g(b.tooltip,e,oa)||b.tooltip.css(e),d("*",c).add(c).css("cssText",pa+":"+qa+ra+";"+na+":0"+ra+";"),h},_calculateSize:function(a){var b,c,d,e=a.precedance===H,f=this.options.width,g=this.options.height,h="c"===a.abbrev(),i=(e?f:g)*(h?.5:1),j=Math.pow,k=Math.round,l=Math.sqrt(j(i,2)+j(g,2)),m=[this.border/i*l,this.border/g*l];return m[2]=Math.sqrt(j(m[0],2)-j(this.border,2)),m[3]=Math.sqrt(j(m[1],2)-j(this.border,2)),b=l+m[2]+m[3]+(h?0:m[0]),c=b/l,d=[k(c*f),k(c*g)],e?d:d.reverse()},_calculateTip:function(a,b,c){c=c||1,b=b||this.size;var d=b[0]*c,e=b[1]*c,f=Math.ceil(d/2),g=Math.ceil(e/2),h={br:[0,0,d,e,d,0],bl:[0,0,d,0,0,e],tr:[0,e,d,0,d,e],tl:[0,0,0,e,d,e],tc:[0,e,f,0,d,e],bc:[0,0,d,0,f,e],rc:[0,0,d,g,0,e],lc:[d,0,d,e,0,g]};return h.lt=h.br,h.rt=h.bl,h.lb=h.tr,h.rb=h.tl,h[a.abbrev()]},_drawCoords:function(a,b){a.beginPath(),a.moveTo(b[0],b[1]),a.lineTo(b[2],b[3]),a.lineTo(b[4],b[5]),a.closePath()},create:function(){var a=this.corner=(sa||da.ie)&&this._parseCorner(this.options.corner);return this.enabled=!!this.corner&&"c"!==this.corner.abbrev(),this.enabled&&(this.qtip.cache.corner=a.clone(),this.update()),this.element.toggle(this.enabled),this.corner},update:function(b,c){if(!this.enabled)return this;var e,f,g,h,i,j,k,l,m=this.qtip.elements,n=this.element,o=n.children(),p=this.options,q=this.size,r=p.mimic,s=Math.round;b||(b=this.qtip.cache.corner||this.corner),r===E?r=b:(r=new A(r),r.precedance=b.precedance,"inherit"===r.x?r.x=b.x:"inherit"===r.y?r.y=b.y:r.x===r.y&&(r[b.precedance]=b[b.precedance])),f=r.precedance,b.precedance===G?this._swapDimensions():this._resetDimensions(),e=this.color=this._parseColours(b),e[1]!==qa?(l=this.border=this._parseWidth(b,b[b.precedance]),p.border&&1>l&&!ta.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==D?p.border:l):this.border=l=0,k=this.size=this._calculateSize(b),n.css({width:k[0],height:k[1],lineHeight:k[1]+"px"}),j=b.precedance===H?[s(r.x===L?l:r.x===N?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===K?k[1]-q[1]:0)]:[s(r.x===L?k[0]-q[0]:0),s(r.y===K?l:r.y===M?k[1]-q[1]-l:(k[1]-q[1])/2)],sa?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,ja),i=this._calculateTip(r,this.size,ja),o.attr(I,k[0]*ja).attr(J,k[1]*ja),o.css(I,k[0]).css(J,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*ja,j[1]*ja),this._drawCoords(g,h),g.fillStyle=e[0],g.fill()):(h=this._calculateTip(r),h="m"+h[0]+","+h[1]+" l"+h[2]+","+h[3]+" "+h[4]+","+h[5]+" xe",j[2]=l&&/^(r|b)/i.test(b.string())?8===da.ie?2:1:0,o.css({coordsize:k[0]+l+" "+k[1]+l,antialias:""+(r.string().indexOf(O)>-1),left:j[0]-j[2]*Number(f===G),top:j[1]-j[2]*Number(f===H),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k[0]+l+" "+k[1]+l,path:h,fillcolor:e[0],filled:!!a,stroked:!a}).toggle(!(!l&&!a)),!a&&b.html(ia("stroke",'weight="'+2*l+'px" color="'+e[1]+'" miterlimit="1000" joinstyle="miter"'))})),a.opera&&setTimeout(function(){m.tip.css({display:"inline-block",visibility:"visible"})},1),c!==E&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return E;var c,e,f=this,g=this.qtip.elements,h=this.element,i=this.options.offset,j={}; return a=a||this.corner,c=a.precedance,b=b||this._calculateSize(a),e=[a.x,a.y],c===G&&e.reverse(),d.each(e,function(d,e){var h,k,l;e===O?(h=c===H?L:K,j[h]="50%",j[ma+"-"+h]=-Math.round(b[c===H?0:1]/2)+i):(h=f._parseWidth(a,e,g.tooltip),k=f._parseWidth(a,e,g.content),l=f._parseRadius(a),j[e]=Math.max(-f.border,d?k:i+(l>h?l:-h)))}),j[a[c]]-=b[c===G?0:1],h.css({margin:"",top:"",bottom:"",left:"",right:""}).css(j),j},reposition:function(a,b,d){function e(a,b,c,d,e){a===Q&&j.precedance===b&&k[d]&&j[c]!==O?j.precedance=j.precedance===G?H:G:a!==Q&&k[d]&&(j[b]=j[b]===O?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===O?p[ma+"-"+b]=o[a]=g[ma+"-"+b]-k[b]:(h=g[e]!==c?[k[b],-g[b]]:[-k[b],g[b]],(o[a]=Math.max(h[0],h[1]))>h[0]&&(d[b]-=k[b],o[b]=E),p[g[e]!==c?e:b]=o[a])}if(this.enabled){var g,h,i=b.cache,j=this.corner.clone(),k=d.adjusted,l=b.options.position.adjust.method.split(" "),m=l[0],n=l[1]||l[0],o={left:E,top:E,x:0,y:0},p={};this.corner.fixed!==D&&(e(m,G,H,L,N),e(n,H,G,K,M),j.string()===i.corner.string()&&i.cornerTop===k.top&&i.cornerLeft===k.left||this.update(j,E)),g=this.calculate(j),g.right!==c&&(g.left=-g.right),g.bottom!==c&&(g.top=-g.bottom),g.user=this.offset,o.left=m===Q&&!!k.left,o.left&&f(G,L,N),o.top=n===Q&&!!k.top,o.top&&f(H,K,M),this.element.css(p).toggle(!(o.x&&o.y||j.x===O&&o.y||j.y===O&&o.x)),d.left-=g.left.charAt?g.user:m!==Q||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==Q||o.left||!o.left&&!o.top?g.top+this.border:0,i.cornerLeft=k.left,i.cornerTop=k.top,i.corner=j.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),ha=R.tip=function(a){return new v(a,a.options.style.tip)},ha.initialize="render",ha.sanitize=function(a){if(a.style&&"tip"in a.style){var b=a.style.tip;"object"!=typeof b&&(b=a.style.tip={corner:b}),/string|boolean/i.test(typeof b.corner)||(b.corner=D)}},B.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(a){this.size=[a.width,a.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},d.extend(D,y.defaults,{style:{tip:{corner:D,mimic:E,width:6,height:6,border:D,offset:0}}});var wa,xa,ya="qtip-modal",za="."+ya;xa=function(){function a(a){if(d.expr[":"].focusable)return d.expr[":"].focusable;var b,c,e,f=!isNaN(d.attr(a,"tabindex")),g=a.nodeName&&a.nodeName.toLowerCase();return"area"===g?(b=a.parentNode,c=b.name,a.href&&c&&"map"===b.nodeName.toLowerCase()?(e=d("img[usemap=#"+c+"]")[0],!!e&&e.is(":visible")):!1):/input|select|textarea|button|object/.test(g)?!a.disabled:"a"===g?a.href||f:f}function c(a){j.length<1&&a.length?a.not("body").blur():j.first().focus()}function e(a){if(h.is(":visible")){var b,e=d(a.target),g=f.tooltip,i=e.closest(W);b=i.length<1?E:parseInt(i[0].style.zIndex,10)>parseInt(g[0].style.zIndex,10),b||e.closest(W)[0]===g[0]||c(e)}}var f,g,h,i=this,j={};d.extend(i,{init:function(){return h=i.elem=d("<div />",{id:"qtip-overlay",html:"<div></div>",mousedown:function(){return E}}).hide(),d(b.body).bind("focusin"+za,e),d(b).bind("keydown"+za,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),h.bind("click"+za,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),i},update:function(b){f=b,j=b.options.show.modal.stealfocus!==E?b.tooltip.find("*").filter(function(){return a(this)}):[]},toggle:function(a,e,j){var k=a.tooltip,l=a.options.show.modal,m=l.effect,n=e?"show":"hide",o=h.is(":visible"),p=d(za).filter(":visible:not(:animated)").not(k);return i.update(a),e&&l.stealfocus!==E&&c(d(":focus")),h.toggleClass("blurs",l.blur),e&&h.appendTo(b.body),h.is(":animated")&&o===e&&g!==E||!e&&p.length?i:(h.stop(D,E),d.isFunction(m)?m.call(h,e):m===E?h[n]():h.fadeTo(parseInt(j,10)||90,e?1:0,function(){e||h.hide()}),e||h.queue(function(a){h.css({left:"",top:""}),d(za).length||h.detach(),a()}),g=e,f.destroyed&&(f=F),i)}}),i.init()},xa=new xa,d.extend(w.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=xa.elem,b.addClass(ya).css("z-index",y.modal_zindex+d(za).length),a._bind(b,["tooltipshow","tooltiphide"],function(a,c,e){var f=a.originalEvent;if(a.target===b[0])if(f&&"tooltiphide"===a.type&&/mouse(leave|enter)/.test(f.type)&&d(f.relatedTarget).closest(xa.elem[0]).length)try{a.preventDefault()}catch(g){}else(!f||f&&"tooltipsolo"!==f.type)&&this.toggle(a,"tooltipshow"===a.type,e)},this._ns,this),a._bind(b,"tooltipfocus",function(a,c){if(!a.isDefaultPrevented()&&a.target===b[0]){var e=d(za),f=y.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);xa.elem[0].style.zIndex=f-1,e.each(function(){this.style.zIndex>g&&(this.style.zIndex-=1)}),e.filter("."+$).qtip("blur",a.originalEvent),b.addClass($)[0].style.zIndex=f,xa.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(za).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void xa.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(ya),this.qtip._unbind(this.qtip.tooltip,this._ns),xa.toggle(this.qtip,E),delete this.qtip.elements.overlay}}),wa=R.modal=function(a){return new w(a,a.options.show.modal)},wa.sanitize=function(a){a.show&&("object"!=typeof a.show.modal?a.show.modal={on:!!a.show.modal}:"undefined"==typeof a.show.modal.on&&(a.show.modal.on=D))},y.modal_zindex=y.zindex-200,wa.initialize="render",B.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(D,y.defaults,{show:{modal:{on:E,effect:D,blur:D,stealfocus:D,escape:D}}}),R.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===Q,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===I?o:p)-z,C=x-(u.precedance===a||s===u[b]?y:0)-(t===O?i/2:0);return w?(C=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-C,Math.min(Math.max(-m[f]+r[f]+(h===I?o:p),k+C),d[f],"center"===s?k-x:1e9))):(e*=c===P?2:0,A>0&&(s!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===O?-C:C)+e,l.invert(a,g)),d[f]<q[f]&&-d[f]>B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),y=x[0],z=x[1]||x[0],A=e.viewport,B=e.container,C={left:0,top:0};return A.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=B.offset()||C,n="static"===B.css("position"),k="fixed"===t.css("position"),o=A[0]===a?A.width():A.outerWidth(E),p=A[0]===a?A.height():A.outerHeight(E),q={left:k?0:A.scrollLeft(),top:k?0:A.scrollTop()},r = A[0] !== window && A.offset()||C,"shift"===y&&"shift"===z||(l=u.clone()),C={left:"none"!==y?j(G,H,y,w.x,L,N,I,f,h):0,top:"none"!==z?j(H,G,z,w.y,K,M,J,g,i):0,my:l}):C},R.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:E},g=0,h=[],i=1,j=1,k=0,l=0;for(g=a.length;g--;)c=[parseInt(a[--g],10),parseInt(a[g+1],10)],c[0]>f.position.right&&(f.position.right=c[0]),c[0]<f.position.left&&(f.position.left=c[0]),c[1]>f.position.bottom&&(f.position.bottom=c[1]),c[1]<f.position.top&&(f.position.top=c[1]),h.push(c);if(d=f.width=Math.abs(f.position.right-f.position.left),e=f.height=Math.abs(f.position.bottom-f.position.top),"c"===b.abbrev())f.position={left:f.position.left+f.width/2,top:f.position.top+f.height/2};else{for(;d>0&&e>0&&i>0&&j>0;)for(d=Math.floor(d/2),e=Math.floor(e/2),b.x===L?i=d:b.x===N?i=f.width-d:i+=Math.floor(d/2),b.y===K?j=e:b.y===M?j=f.height-e:j+=Math.floor(e/2),g=h.length;g--&&!(h.length<2);)k=h[g][0]-f.position.left,l=h[g][1]-f.position.top,(b.x===L&&k>=i||b.x===N&&i>=k||b.x===O&&(i>k||k>f.width-i)||b.y===K&&l>=j||b.y===M&&j>=l||b.y===O&&(j>l||l>f.height-j))&&h.splice(g,1);f.position={left:h[0][0],top:h[0][1]}}return f},rect:function(a,b,c,d){return{width:Math.abs(c-a),height:Math.abs(d-b),position:{left:Math.min(a,c),top:Math.min(b,d)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(a,b,c,d,e){var f=R.polys._angles[e.abbrev()],g=0===f?0:c*Math.cos(f*Math.PI),h=d*Math.sin(f*Math.PI);return{width:2*c-Math.abs(g),height:2*d-Math.abs(h),position:{left:a+g,top:b+h},adjustable:E}},circle:function(a,b,c,d){return R.polys.ellipse(a,b,c,c,d)}},R.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o=c[0],p=d(o.ownerSVGElement),q=o.ownerDocument,r=(parseInt(c.css("stroke-width"),10)||0)/2;!o.getBBox;)o=o.parentNode;if(!o.getBBox||!o.parentNode)return E;switch(o.nodeName){case"ellipse":case"circle":m=R.polys.ellipse(o.cx.baseVal.value,o.cy.baseVal.value,(o.rx||o.r).baseVal.value+r,(o.ry||o.r).baseVal.value+r,e);break;case"line":case"polygon":case"polyline":for(l=o.points||[{x:o.x1.baseVal.value,y:o.y1.baseVal.value},{x:o.x2.baseVal.value,y:o.y2.baseVal.value}],m=[],k=-1,i=l.numberOfItems||l.length;++k<i;)j=l.getItem?l.getItem(k):l[k],m.push.apply(m,[j.x,j.y]);m=R.polys.polygon(m,e);break;default:m=o.getBBox(),m={width:m.width,height:m.height,position:{left:m.x,top:m.y}}}return n=m.position,p=p[0],p.createSVGPoint&&(g=o.getScreenCTM(),l=p.createSVGPoint(),l.x=n.left,l.y=n.top,h=l.matrixTransform(g),n.left=h.x,n.top=h.y),q!==b&&"mouse"!==a.position.target&&(f=d((q.defaultView||q.parentWindow).frameElement).offset(),f&&(n.left+=f.left,n.top+=f.top)),q=d(q),n.left+=q.scrollLeft(),n.top+=q.scrollTop(),m},R.imagemap=function(a,b,c){b.jquery||(b=d(b));var e,f,g,h,i,j=(b.attr("shape")||"rect").toLowerCase().replace("poly","polygon"),k=d('img[usemap="#'+b.parent("map").attr("name")+'"]'),l=d.trim(b.attr("coords")),m=l.replace(/,$/,"").split(",");if(!k.length)return E;if("polygon"===j)h=R.polys.polygon(m,c);else{if(!R.polys[j])return E;for(g=-1,i=m.length,f=[];++g<i;)f.push(parseInt(m[g],10));h=R.polys[j].apply(this,f.concat(c))}return e=k.offset(),e.left+=Math.ceil((k.outerWidth(E)-k.width())/2),e.top+=Math.ceil((k.outerHeight(E)-k.height())/2),h.position.left+=e.left,h.position.top+=e.top,h};var Aa,Ba='<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';d.extend(x.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Ba).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("<div/>",{id:S+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(E),width:c.outerWidth(E)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[I,L]:[J,K],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(J,f.height),f.width?e.css(I,f.width):(e.css(I,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1*parseInt(c,10))||b,d=(d.indexOf("%")>-1?a:1*parseInt(d,10))||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(I,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Aa=R.ie6=function(a){return 6===da.ie?new x(a):E},Aa.initialize="render",B.ie6={"^content|style$":function(){this.redraw()}}})}(window,document); -/*! - DataTables 1.10.13 - ©2008-2016 SpryMedia Ltd - datatables.net/license -*/ -(function(h){"function"===typeof define&&define.amd?define(["jquery"],function(E){return h(E,window,document)}):"object"===typeof exports?module.exports=function(E,H){E||(E=window);H||(H="undefined"!==typeof window?require("jquery"):require("jquery")(E));return h(H,E,E.document)}:h(jQuery,window,document)})(function(h,E,H,k){function Y(a){var b,c,d={};h.each(a,function(e){if((b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" "))c=e.replace(b[0],b[2].toLowerCase()), -d[c]=e,"o"===b[1]&&Y(a[e])});a._hungarianMap=d}function J(a,b,c){a._hungarianMap||Y(a);var d;h.each(b,function(e){d=a._hungarianMap[e];if(d!==k&&(c||b[d]===k))"o"===d.charAt(0)?(b[d]||(b[d]={}),h.extend(!0,b[d],b[e]),J(a[d],b[d],c)):b[d]=b[e]})}function Fa(a){var b=m.defaults.oLanguage,c=a.sZeroRecords;!a.sEmptyTable&&(c&&"No data available in table"===b.sEmptyTable)&&F(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&(c&&"Loading..."===b.sLoadingRecords)&&F(a,a,"sZeroRecords","sLoadingRecords"); -a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&fb(a)}function gb(a){A(a,"ordering","bSort");A(a,"orderMulti","bSortMulti");A(a,"orderClasses","bSortClasses");A(a,"orderCellsTop","bSortCellsTop");A(a,"order","aaSorting");A(a,"orderFixed","aaSortingFixed");A(a,"paging","bPaginate");A(a,"pagingType","sPaginationType");A(a,"pageLength","iDisplayLength");A(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":"");"boolean"===typeof a.scrollX&&(a.scrollX= -a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&J(m.models.oSearch,a[b])}function hb(a){A(a,"orderable","bSortable");A(a,"orderData","aDataSort");A(a,"orderSequence","asSorting");A(a,"orderDataType","sortDataType");var b=a.aDataSort;b&&!h.isArray(b)&&(a.aDataSort=[b])}function ib(a){if(!m.__browser){var b={};m.__browser=b;var c=h("<div/>").css({position:"fixed",top:0,left:-1*h(E).scrollLeft(),height:1,width:1,overflow:"hidden"}).append(h("<div/>").css({position:"absolute", -top:1,left:1,width:100,overflow:"scroll"}).append(h("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}h.extend(a.oBrowser,m.__browser);a.oScroll.iBarWidth=m.__browser.barWidth}function jb(a,b,c,d,e,f){var g,j=!1;c!==k&&(g=c,j=!0);for(;d!== -e;)a.hasOwnProperty(d)&&(g=j?b(g,a[d],d,a):a[d],j=!0,d+=f);return g}function Ga(a,b){var c=m.defaults.column,d=a.aoColumns.length,c=h.extend({},m.models.oColumn,c,{nTh:b?b:H.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=h.extend({},m.models.oSearch,c[d]);la(a,d,h(b).data())}function la(a,b,c){var b=a.aoColumns[b],d=a.oClasses,e=h(b.nTh);if(!b.sWidthOrig){b.sWidthOrig= -e.attr("width")||null;var f=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==k&&null!==c&&(hb(c),J(m.defaults.column,c),c.mDataProp!==k&&!c.mData&&(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),h.extend(b,c),F(b,c,"sWidth","sWidthOrig"),c.iDataSort!==k&&(b.aDataSort=[c.iDataSort]),F(b,c,"aDataSort"));var g=b.mData,j=R(g),i=b.mRender?R(b.mRender):null,c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")}; -b._bAttrSrc=h.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=j(a,b,k,c);return i&&b?i(d,b,a,c):d};b.fnSetData=function(a,b,c){return S(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==h.inArray("asc",b.asSorting);c=-1!==h.inArray("desc",b.asSorting);!b.bSortable||!a&&!c?(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI=""):a&&!c?(b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI= -d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI)}function Z(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ha(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;(""!==b.sY||""!==b.sX)&&ma(a);s(a,null,"column-sizing",[a])}function $(a,b){var c=na(a,"bVisible");return"number"===typeof c[b]?c[b]:null}function aa(a,b){var c=na(a,"bVisible"),c=h.inArray(b, -c);return-1!==c?c:null}function ba(a){var b=0;h.each(a.aoColumns,function(a,d){d.bVisible&&"none"!==h(d.nTh).css("display")&&b++});return b}function na(a,b){var c=[];h.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ia(a){var b=a.aoColumns,c=a.aoData,d=m.ext.type.detect,e,f,g,j,i,h,l,q,r;e=0;for(f=b.length;e<f;e++)if(l=b[e],r=[],!l.sType&&l._sManualType)l.sType=l._sManualType;else if(!l.sType){g=0;for(j=d.length;g<j;g++){i=0;for(h=c.length;i<h;i++){r[i]===k&&(r[i]=B(a,i,e,"type")); -q=d[g](r[i],a);if(!q&&g!==d.length-1)break;if("html"===q)break}if(q){l.sType=q;break}}l.sType||(l.sType="string")}}function kb(a,b,c,d){var e,f,g,j,i,n,l=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){n=b[e];var q=n.targets!==k?n.targets:n.aTargets;h.isArray(q)||(q=[q]);f=0;for(g=q.length;f<g;f++)if("number"===typeof q[f]&&0<=q[f]){for(;l.length<=q[f];)Ga(a);d(q[f],n)}else if("number"===typeof q[f]&&0>q[f])d(l.length+q[f],n);else if("string"===typeof q[f]){j=0;for(i=l.length;j<i;j++)("_all"==q[f]||h(l[j].nTh).hasClass(q[f]))&& -d(j,n)}}if(c){e=0;for(a=c.length;e<a;e++)d(e,c[e])}}function N(a,b,c,d){var e=a.aoData.length,f=h.extend(!0,{},m.models.oRow,{src:c?"dom":"data",idx:e});f._aData=b;a.aoData.push(f);for(var g=a.aoColumns,j=0,i=g.length;j<i;j++)g[j].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==k&&(a.aIds[b]=f);(c||!a.oFeatures.bDeferRender)&&Ja(a,e,c,d);return e}function oa(a,b){var c;b instanceof h||(b=h(b));return b.map(function(b,e){c=Ka(a,e);return N(a,c.data,e,c.cells)})}function B(a,b,c,d){var e=a.iDraw, -f=a.aoColumns[c],g=a.aoData[b]._aData,j=f.sDefaultContent,i=f.fnGetData(g,d,{settings:a,row:b,col:c});if(i===k)return a.iDrawError!=e&&null===j&&(K(a,0,"Requested unknown parameter "+("function"==typeof f.mData?"{function}":"'"+f.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),j;if((i===g||null===i)&&null!==j&&d!==k)i=j;else if("function"===typeof i)return i.call(g);return null===i&&"display"==d?"":i}function lb(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})} -function La(a){return h.map(a.match(/(\\.|[^\.])+/g)||[""],function(a){return a.replace(/\\\./g,".")})}function R(a){if(h.isPlainObject(a)){var b={};h.each(a,function(a,c){c&&(b[a]=R(c))});return function(a,c,f,g){var j=b[c]||b._;return j!==k?j(a,c,f,g):a}}if(null===a)return function(a){return a};if("function"===typeof a)return function(b,c,f,g){return a(b,c,f,g)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var c=function(a,b,f){var g,j;if(""!==f){j=La(f); -for(var i=0,n=j.length;i<n;i++){f=j[i].match(ca);g=j[i].match(V);if(f){j[i]=j[i].replace(ca,"");""!==j[i]&&(a=a[j[i]]);g=[];j.splice(0,i+1);j=j.join(".");if(h.isArray(a)){i=0;for(n=a.length;i<n;i++)g.push(c(a[i],b,j))}a=f[0].substring(1,f[0].length-1);a=""===a?g:g.join(a);break}else if(g){j[i]=j[i].replace(V,"");a=a[j[i]]();continue}if(null===a||a[j[i]]===k)return k;a=a[j[i]]}}return a};return function(b,e){return c(b,e,a)}}return function(b){return b[a]}}function S(a){if(h.isPlainObject(a))return S(a._); -if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var b=function(a,d,e){var e=La(e),f;f=e[e.length-1];for(var g,j,i=0,n=e.length-1;i<n;i++){g=e[i].match(ca);j=e[i].match(V);if(g){e[i]=e[i].replace(ca,"");a[e[i]]=[];f=e.slice();f.splice(0,i+1);g=f.join(".");if(h.isArray(d)){j=0;for(n=d.length;j<n;j++)f={},b(f,d[j],g),a[e[i]].push(f)}else a[e[i]]=d;return}j&&(e[i]=e[i].replace(V, -""),a=a[e[i]](d));if(null===a[e[i]]||a[e[i]]===k)a[e[i]]={};a=a[e[i]]}if(f.match(V))a[f.replace(V,"")](d);else a[f.replace(ca,"")]=d};return function(c,d){return b(c,d,a)}}return function(b,d){b[a]=d}}function Ma(a){return D(a.aoData,"_aData")}function pa(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay.length=0;a.aIds={}}function qa(a,b,c){for(var d=-1,e=0,f=a.length;e<f;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===k&&a.splice(d,1)}function da(a,b,c,d){var e=a.aoData[b],f,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild); -c.innerHTML=B(a,b,d,"display")};if("dom"===c||(!c||"auto"===c)&&"dom"===e.src)e._aData=Ka(a,e,d,d===k?k:e._aData).data;else{var j=e.anCells;if(j)if(d!==k)g(j[d],d);else{c=0;for(f=j.length;c<f;c++)g(j[c],c)}}e._aSortData=null;e._aFilterData=null;g=a.aoColumns;if(d!==k)g[d].sType=null;else{c=0;for(f=g.length;c<f;c++)g[c].sType=null;Na(a,e)}}function Ka(a,b,c,d){var e=[],f=b.firstChild,g,j,i=0,n,l=a.aoColumns,q=a._rowReadObject,d=d!==k?d:q?{}:[],r=function(a,b){if("string"===typeof a){var c=a.indexOf("@"); --1!==c&&(c=a.substring(c+1),S(a)(d,b.getAttribute(c)))}},m=function(a){if(c===k||c===i)j=l[i],n=h.trim(a.innerHTML),j&&j._bAttrSrc?(S(j.mData._)(d,n),r(j.mData.sort,a),r(j.mData.type,a),r(j.mData.filter,a)):q?(j._setter||(j._setter=S(j.mData)),j._setter(d,n)):d[i]=n;i++};if(f)for(;f;){g=f.nodeName.toUpperCase();if("TD"==g||"TH"==g)m(f),e.push(f);f=f.nextSibling}else{e=b.anCells;f=0;for(g=e.length;f<g;f++)m(e[f])}if(b=b.firstChild?b:b.nTr)(b=b.getAttribute("id"))&&S(a.rowId)(d,b);return{data:d,cells:e}} -function Ja(a,b,c,d){var e=a.aoData[b],f=e._aData,g=[],j,i,n,l,q;if(null===e.nTr){j=c||H.createElement("tr");e.nTr=j;e.anCells=g;j._DT_RowIndex=b;Na(a,e);l=0;for(q=a.aoColumns.length;l<q;l++){n=a.aoColumns[l];i=c?d[l]:H.createElement(n.sCellType);i._DT_CellIndex={row:b,column:l};g.push(i);if((!c||n.mRender||n.mData!==l)&&(!h.isPlainObject(n.mData)||n.mData._!==l+".display"))i.innerHTML=B(a,b,l,"display");n.sClass&&(i.className+=" "+n.sClass);n.bVisible&&!c?j.appendChild(i):!n.bVisible&&c&&i.parentNode.removeChild(i); -n.fnCreatedCell&&n.fnCreatedCell.call(a.oInstance,i,B(a,b,l),f,b,l)}s(a,"aoRowCreatedCallback",null,[j,f,b])}e.nTr.setAttribute("role","row")}function Na(a,b){var c=b.nTr,d=b._aData;if(c){var e=a.rowIdFn(d);e&&(c.id=e);d.DT_RowClass&&(e=d.DT_RowClass.split(" "),b.__rowc=b.__rowc?sa(b.__rowc.concat(e)):e,h(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&h(c).attr(d.DT_RowAttr);d.DT_RowData&&h(c).data(d.DT_RowData)}}function mb(a){var b,c,d,e,f,g=a.nTHead,j=a.nTFoot,i=0=== -h("th, td",g).length,n=a.oClasses,l=a.aoColumns;i&&(e=h("<tr/>").appendTo(g));b=0;for(c=l.length;b<c;b++)f=l[b],d=h(f.nTh).addClass(f.sClass),i&&d.appendTo(e),a.oFeatures.bSort&&(d.addClass(f.sSortingClass),!1!==f.bSortable&&(d.attr("tabindex",a.iTabIndex).attr("aria-controls",a.sTableId),Oa(a,f.nTh,b))),f.sTitle!=d[0].innerHTML&&d.html(f.sTitle),Pa(a,"header")(a,d,f,n);i&&ea(a.aoHeader,g);h(g).find(">tr").attr("role","row");h(g).find(">tr>th, >tr>td").addClass(n.sHeaderTH);h(j).find(">tr>th, >tr>td").addClass(n.sFooterTH); -if(null!==j){a=a.aoFooter[0];b=0;for(c=a.length;b<c;b++)f=l[b],f.nTf=a[b].cell,f.sClass&&h(f.nTf).addClass(f.sClass)}}function fa(a,b,c){var d,e,f,g=[],j=[],i=a.aoColumns.length,n;if(b){c===k&&(c=!1);d=0;for(e=b.length;d<e;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(f=i-1;0<=f;f--)!a.aoColumns[f].bVisible&&!c&&g[d].splice(f,1);j.push([])}d=0;for(e=g.length;d<e;d++){if(a=g[d].nTr)for(;f=a.firstChild;)a.removeChild(f);f=0;for(b=g[d].length;f<b;f++)if(n=i=1,j[d][f]===k){a.appendChild(g[d][f].cell); -for(j[d][f]=1;g[d+i]!==k&&g[d][f].cell==g[d+i][f].cell;)j[d+i][f]=1,i++;for(;g[d][f+n]!==k&&g[d][f].cell==g[d][f+n].cell;){for(c=0;c<i;c++)j[d+c][f+n]=1;n++}h(g[d][f].cell).attr("rowspan",i).attr("colspan",n)}}}}function O(a){var b=s(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==h.inArray(!1,b))C(a,!1);else{var b=[],c=0,d=a.asStripeClasses,e=d.length,f=a.oLanguage,g=a.iInitDisplayStart,j="ssp"==y(a),i=a.aiDisplay;a.bDrawing=!0;g!==k&&-1!==g&&(a._iDisplayStart=j?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart= --1);var g=a._iDisplayStart,n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,C(a,!1);else if(j){if(!a.bDestroying&&!nb(a))return}else a.iDraw++;if(0!==i.length){f=j?a.aoData.length:n;for(j=j?0:g;j<f;j++){var l=i[j],q=a.aoData[l];null===q.nTr&&Ja(a,l);l=q.nTr;if(0!==e){var r=d[c%e];q._sRowStripe!=r&&(h(l).removeClass(q._sRowStripe).addClass(r),q._sRowStripe=r)}s(a,"aoRowCallback",null,[l,q._aData,c,j]);b.push(l);c++}}else c=f.sZeroRecords,1==a.iDraw&&"ajax"==y(a)?c=f.sLoadingRecords: -f.sEmptyTable&&0===a.fnRecordsTotal()&&(c=f.sEmptyTable),b[0]=h("<tr/>",{"class":e?d[0]:""}).append(h("<td />",{valign:"top",colSpan:ba(a),"class":a.oClasses.sRowEmpty}).html(c))[0];s(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Ma(a),g,n,i]);s(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0],Ma(a),g,n,i]);d=h(a.nTBody);d.children().detach();d.append(h(b));s(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function T(a,b){var c=a.oFeatures,d=c.bFilter; -c.bSort&&ob(a);d?ga(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;O(a);a._drawHold=!1}function pb(a){var b=a.oClasses,c=h(a.nTable),c=h("<div/>").insertBefore(c),d=a.oFeatures,e=h("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var f=a.sDom.split(""),g,j,i,n,l,q,k=0;k<f.length;k++){g=null;j=f[k];if("<"==j){i=h("<div/>")[0]; -n=f[k+1];if("'"==n||'"'==n){l="";for(q=2;f[k+q]!=n;)l+=f[k+q],q++;"H"==l?l=b.sJUIHeader:"F"==l&&(l=b.sJUIFooter);-1!=l.indexOf(".")?(n=l.split("."),i.id=n[0].substr(1,n[0].length-1),i.className=n[1]):"#"==l.charAt(0)?i.id=l.substr(1,l.length-1):i.className=l;k+=q}e.append(i);e=h(i)}else if(">"==j)e=e.parent();else if("l"==j&&d.bPaginate&&d.bLengthChange)g=qb(a);else if("f"==j&&d.bFilter)g=rb(a);else if("r"==j&&d.bProcessing)g=sb(a);else if("t"==j)g=tb(a);else if("i"==j&&d.bInfo)g=ub(a);else if("p"== -j&&d.bPaginate)g=vb(a);else if(0!==m.ext.feature.length){i=m.ext.feature;q=0;for(n=i.length;q<n;q++)if(j==i[q].cFeature){g=i[q].fnInit(a);break}}g&&(i=a.aanFeatures,i[j]||(i[j]=[]),i[j].push(g),e.append(g))}c.replaceWith(e);a.nHolding=null}function ea(a,b){var c=h(b).children("tr"),d,e,f,g,j,i,n,l,q,k;a.splice(0,a.length);f=0;for(i=c.length;f<i;f++)a.push([]);f=0;for(i=c.length;f<i;f++){d=c[f];for(e=d.firstChild;e;){if("TD"==e.nodeName.toUpperCase()||"TH"==e.nodeName.toUpperCase()){l=1*e.getAttribute("colspan"); -q=1*e.getAttribute("rowspan");l=!l||0===l||1===l?1:l;q=!q||0===q||1===q?1:q;g=0;for(j=a[f];j[g];)g++;n=g;k=1===l?!0:!1;for(j=0;j<l;j++)for(g=0;g<q;g++)a[f+g][n+j]={cell:e,unique:k},a[f+g].nTr=d}e=e.nextSibling}}}function ta(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],ea(c,b)));for(var b=0,e=c.length;b<e;b++)for(var f=0,g=c[b].length;f<g;f++)if(c[b][f].unique&&(!d[f]||!a.bSortCellsTop))d[f]=c[b][f].cell;return d}function ua(a,b,c){s(a,"aoServerParams","serverParams",[b]);if(b&&h.isArray(b)){var d={}, -e=/(.*?)\[\]$/;h.each(b,function(a,b){var c=b.name.match(e);c?(c=c[0],d[c]||(d[c]=[]),d[c].push(b.value)):d[b.name]=b.value});b=d}var f,g=a.ajax,j=a.oInstance,i=function(b){s(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(h.isPlainObject(g)&&g.data){f=g.data;var n=h.isFunction(f)?f(b,a):f,b=h.isFunction(f)&&n?n:h.extend(!0,b,n);delete g.data}n={data:b,success:function(b){var c=b.error||b.sError;c&&K(a,0,c);a.json=b;i(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c){var d=s(a,null,"xhr", -[a,null,a.jqXHR]);-1===h.inArray(!0,d)&&("parsererror"==c?K(a,0,"Invalid JSON response",1):4===b.readyState&&K(a,0,"Ajax error",7));C(a,!1)}};a.oAjaxData=b;s(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(j,a.sAjaxSource,h.map(b,function(a,b){return{name:b,value:a}}),i,a):a.sAjaxSource||"string"===typeof g?a.jqXHR=h.ajax(h.extend(n,{url:g||a.sAjaxSource})):h.isFunction(g)?a.jqXHR=g.call(j,b,i,a):(a.jqXHR=h.ajax(h.extend(n,g)),g.data=f)}function nb(a){return a.bAjaxDataGet?(a.iDraw++,C(a, -!0),ua(a,wb(a),function(b){xb(a,b)}),!1):!0}function wb(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,f=a.aoPreSearchCols,g,j=[],i,n,l,k=W(a);g=a._iDisplayStart;i=!1!==d.bPaginate?a._iDisplayLength:-1;var r=function(a,b){j.push({name:a,value:b})};r("sEcho",a.iDraw);r("iColumns",c);r("sColumns",D(b,"sName").join(","));r("iDisplayStart",g);r("iDisplayLength",i);var ra={draw:a.iDraw,columns:[],order:[],start:g,length:i,search:{value:e.sSearch,regex:e.bRegex}};for(g=0;g<c;g++)n=b[g], -l=f[g],i="function"==typeof n.mData?"function":n.mData,ra.columns.push({data:i,name:n.sName,searchable:n.bSearchable,orderable:n.bSortable,search:{value:l.sSearch,regex:l.bRegex}}),r("mDataProp_"+g,i),d.bFilter&&(r("sSearch_"+g,l.sSearch),r("bRegex_"+g,l.bRegex),r("bSearchable_"+g,n.bSearchable)),d.bSort&&r("bSortable_"+g,n.bSortable);d.bFilter&&(r("sSearch",e.sSearch),r("bRegex",e.bRegex));d.bSort&&(h.each(k,function(a,b){ra.order.push({column:b.col,dir:b.dir});r("iSortCol_"+a,b.col);r("sSortDir_"+ -a,b.dir)}),r("iSortingCols",k.length));b=m.ext.legacy.ajax;return null===b?a.sAjaxSource?j:ra:b?j:ra}function xb(a,b){var c=va(a,b),d=b.sEcho!==k?b.sEcho:b.draw,e=b.iTotalRecords!==k?b.iTotalRecords:b.recordsTotal,f=b.iTotalDisplayRecords!==k?b.iTotalDisplayRecords:b.recordsFiltered;if(d){if(1*d<a.iDraw)return;a.iDraw=1*d}pa(a);a._iRecordsTotal=parseInt(e,10);a._iRecordsDisplay=parseInt(f,10);d=0;for(e=c.length;d<e;d++)N(a,c[d]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;O(a);a._bInitComplete|| -wa(a,b);a.bAjaxDataGet=!0;C(a,!1)}function va(a,b){var c=h.isPlainObject(a.ajax)&&a.ajax.dataSrc!==k?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===c?b.aaData||b[c]:""!==c?R(c)(b):b}function rb(a){var b=a.oClasses,c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,f=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',j=d.sSearch,j=j.match(/_INPUT_/)?j.replace("_INPUT_",g):j+g,b=h("<div/>",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("<label/>").append(j)),f=function(){var b=!this.value? -"":this.value;b!=e.sSearch&&(ga(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,O(a))},g=null!==a.searchDelay?a.searchDelay:"ssp"===y(a)?400:0,i=h("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",g?Qa(f,g):f).on("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",c);h(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{i[0]!==H.activeElement&&i.val(e.sSearch)}catch(d){}}); -return b[0]}function ga(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,f=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};Ia(a);if("ssp"!=y(a)){yb(a,b.sSearch,c,b.bEscapeRegex!==k?!b.bEscapeRegex:b.bRegex,b.bSmart,b.bCaseInsensitive);f(b);for(b=0;b<e.length;b++)zb(a,e[b].sSearch,b,e[b].bEscapeRegex!==k?!e[b].bEscapeRegex:e[b].bRegex,e[b].bSmart,e[b].bCaseInsensitive);Ab(a)}else f(b);a.bFiltered=!0;s(a,null,"search",[a])}function Ab(a){for(var b= -m.ext.search,c=a.aiDisplay,d,e,f=0,g=b.length;f<g;f++){for(var j=[],i=0,n=c.length;i<n;i++)e=c[i],d=a.aoData[e],b[f](a,d._aFilterData,e,d._aData,i)&&j.push(e);c.length=0;h.merge(c,j)}}function zb(a,b,c,d,e,f){if(""!==b){for(var g=[],j=a.aiDisplay,d=Ra(b,d,e,f),e=0;e<j.length;e++)b=a.aoData[j[e]]._aFilterData[c],d.test(b)&&g.push(j[e]);a.aiDisplay=g}}function yb(a,b,c,d,e,f){var d=Ra(b,d,e,f),f=a.oPreviousSearch.sSearch,g=a.aiDisplayMaster,j,e=[];0!==m.ext.search.length&&(c=!0);j=Bb(a);if(0>=b.length)a.aiDisplay= -g.slice();else{if(j||c||f.length>b.length||0!==b.indexOf(f)||a.bSorted)a.aiDisplay=g.slice();b=a.aiDisplay;for(c=0;c<b.length;c++)d.test(a.aoData[b[c]]._sFilterRow)&&e.push(b[c]);a.aiDisplay=e}}function Ra(a,b,c,d){a=b?a:Sa(a);c&&(a="^(?=.*?"+h.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(a){if('"'===a.charAt(0))var b=a.match(/^"(.*)"$/),a=b?b[1]:a;return a.replace('"',"")}).join(")(?=.*?")+").*$");return RegExp(a,d?"i":"")}function Bb(a){var b=a.aoColumns,c,d,e,f,g,j,i,h,l=m.ext.type.search;c=!1; -d=0;for(f=a.aoData.length;d<f;d++)if(h=a.aoData[d],!h._aFilterData){j=[];e=0;for(g=b.length;e<g;e++)c=b[e],c.bSearchable?(i=B(a,d,e,"filter"),l[c.sType]&&(i=l[c.sType](i)),null===i&&(i=""),"string"!==typeof i&&i.toString&&(i=i.toString())):i="",i.indexOf&&-1!==i.indexOf("&")&&(xa.innerHTML=i,i=$b?xa.textContent:xa.innerText),i.replace&&(i=i.replace(/[\r\n]/g,"")),j.push(i);h._aFilterData=j;h._sFilterRow=j.join(" ");c=!0}return c}function Cb(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex, -caseInsensitive:a.bCaseInsensitive}}function Db(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function ub(a){var b=a.sTableId,c=a.aanFeatures.i,d=h("<div/>",{"class":a.oClasses.sInfo,id:!c?b+"_info":null});c||(a.aoDrawCallback.push({fn:Eb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),h(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Eb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+ -1,e=a.fnDisplayEnd(),f=a.fnRecordsTotal(),g=a.fnRecordsDisplay(),j=g?c.sInfo:c.sInfoEmpty;g!==f&&(j+=" "+c.sInfoFiltered);j+=c.sInfoPostFix;j=Fb(a,j);c=c.fnInfoCallback;null!==c&&(j=c.call(a.oInstance,a,d,e,f,g,j));h(b).html(j)}}function Fb(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,f=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a, -f)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(f/e)))}function ha(a){var b,c,d=a.iInitDisplayStart,e=a.aoColumns,f;c=a.oFeatures;var g=a.bDeferLoading;if(a.bInitialised){pb(a);mb(a);fa(a,a.aoHeader);fa(a,a.aoFooter);C(a,!0);c.bAutoWidth&&Ha(a);b=0;for(c=e.length;b<c;b++)f=e[b],f.sWidth&&(f.nTh.style.width=v(f.sWidth));s(a,null,"preInit",[a]);T(a);e=y(a);if("ssp"!=e||g)"ajax"==e?ua(a,[],function(c){var f=va(a,c);for(b=0;b<f.length;b++)N(a,f[b]);a.iInitDisplayStart= -d;T(a);C(a,!1);wa(a,c)},a):(C(a,!1),wa(a))}else setTimeout(function(){ha(a)},200)}function wa(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&Z(a);s(a,null,"plugin-init",[a,b]);s(a,"aoInitComplete","init",[a,b])}function Ta(a,b){var c=parseInt(b,10);a._iDisplayLength=c;Ua(a);s(a,null,"length",[a,c])}function qb(a){for(var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=h.isArray(d[0]),f=e?d[0]:d,d=e?d[1]:d,e=h("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect}),g=0,j=f.length;g<j;g++)e[0][g]= -new Option(d[g],f[g]);var i=h("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(i[0].id=c+"_length");i.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));h("select",i).val(a._iDisplayLength).on("change.DT",function(){Ta(a,h(this).val());O(a)});h(a.nTable).on("length.dt.DT",function(b,c,d){a===c&&h("select",i).val(d)});return i[0]}function vb(a){var b=a.sPaginationType,c=m.ext.pager[b],d="function"===typeof c,e=function(a){O(a)},b=h("<div/>").addClass(a.oClasses.sPaging+ -b)[0],f=a.aanFeatures;d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,i=a._iDisplayLength,h=a.fnRecordsDisplay(),l=-1===i,b=l?0:Math.ceil(b/i),i=l?1:Math.ceil(h/i),h=c(b,i),k,l=0;for(k=f.p.length;l<k;l++)Pa(a,"pageButton")(a,f.p[l],l,h,b,i)}else c.fnUpdate(a,e)},sName:"pagination"}));return b}function Va(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,f=a.fnRecordsDisplay();0===f||-1===e?d=0:"number"===typeof b?(d=b*e,d>f&& -(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<f&&(d+=e):"last"==b?d=Math.floor((f-1)/e)*e:K(a,0,"Unknown paging action: "+b,5);b=a._iDisplayStart!==d;a._iDisplayStart=d;b&&(s(a,null,"page",[a]),c&&O(a));return b}function sb(a){return h("<div/>",{id:!a.aanFeatures.r?a.sTableId+"_processing":null,"class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function C(a,b){a.oFeatures.bProcessing&&h(a.aanFeatures.r).css("display",b?"block":"none"); -s(a,null,"processing",[a,b])}function tb(a){var b=h(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,f=a.oClasses,g=b.children("caption"),j=g.length?g[0]._captionSide:null,i=h(b[0].cloneNode(!1)),n=h(b[0].cloneNode(!1)),l=b.children("tfoot");l.length||(l=null);i=h("<div/>",{"class":f.sScrollWrapper}).append(h("<div/>",{"class":f.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?!d?null:v(d):"100%"}).append(h("<div/>", -{"class":f.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(i.removeAttr("id").css("margin-left",0).append("top"===j?g:null).append(b.children("thead"))))).append(h("<div/>",{"class":f.sScrollBody}).css({position:"relative",overflow:"auto",width:!d?null:v(d)}).append(b));l&&i.append(h("<div/>",{"class":f.sScrollFoot}).css({overflow:"hidden",border:0,width:d?!d?null:v(d):"100%"}).append(h("<div/>",{"class":f.sScrollFootInner}).append(n.removeAttr("id").css("margin-left", -0).append("bottom"===j?g:null).append(b.children("tfoot")))));var b=i.children(),k=b[0],f=b[1],r=l?b[2]:null;if(d)h(f).on("scroll.DT",function(){var a=this.scrollLeft;k.scrollLeft=a;l&&(r.scrollLeft=a)});h(f).css(e&&c.bCollapse?"max-height":"height",e);a.nScrollHead=k;a.nScrollBody=f;a.nScrollFoot=r;a.aoDrawCallback.push({fn:ma,sName:"scrolling"});return i[0]}function ma(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY,b=b.iBarWidth,f=h(a.nScrollHead),g=f[0].style,j=f.children("div"),i=j[0].style,n=j.children("table"), -j=a.nScrollBody,l=h(j),q=j.style,r=h(a.nScrollFoot).children("div"),m=r.children("table"),p=h(a.nTHead),o=h(a.nTable),u=o[0],s=u.style,t=a.nTFoot?h(a.nTFoot):null,x=a.oBrowser,U=x.bScrollOversize,ac=D(a.aoColumns,"nTh"),P,L,Q,w,Wa=[],y=[],z=[],A=[],B,C=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};L=j.scrollHeight>j.clientHeight;if(a.scrollBarVis!==L&&a.scrollBarVis!==k)a.scrollBarVis=L,Z(a);else{a.scrollBarVis=L;o.children("thead, tfoot").remove(); -t&&(Q=t.clone().prependTo(o),P=t.find("tr"),Q=Q.find("tr"));w=p.clone().prependTo(o);p=p.find("tr");L=w.find("tr");w.find("th, td").removeAttr("tabindex");c||(q.width="100%",f[0].style.width="100%");h.each(ta(a,w),function(b,c){B=$(a,b);c.style.width=a.aoColumns[B].sWidth});t&&I(function(a){a.style.width=""},Q);f=o.outerWidth();if(""===c){s.width="100%";if(U&&(o.find("tbody").height()>j.offsetHeight||"scroll"==l.css("overflow-y")))s.width=v(o.outerWidth()-b);f=o.outerWidth()}else""!==d&&(s.width= -v(d),f=o.outerWidth());I(C,L);I(function(a){z.push(a.innerHTML);Wa.push(v(h(a).css("width")))},L);I(function(a,b){if(h.inArray(a,ac)!==-1)a.style.width=Wa[b]},p);h(L).height(0);t&&(I(C,Q),I(function(a){A.push(a.innerHTML);y.push(v(h(a).css("width")))},Q),I(function(a,b){a.style.width=y[b]},P),h(Q).height(0));I(function(a,b){a.innerHTML='<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+z[b]+"</div>";a.style.width=Wa[b]},L);t&&I(function(a,b){a.innerHTML='<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+ -A[b]+"</div>";a.style.width=y[b]},Q);if(o.outerWidth()<f){P=j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")?f+b:f;if(U&&(j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")))s.width=v(P-b);(""===c||""!==d)&&K(a,1,"Possible column misalignment",6)}else P="100%";q.width=v(P);g.width=v(P);t&&(a.nScrollFoot.style.width=v(P));!e&&U&&(q.height=v(u.offsetHeight+b));c=o.outerWidth();n[0].style.width=v(c);i.width=v(c);d=o.height()>j.clientHeight||"scroll"==l.css("overflow-y");e="padding"+ -(x.bScrollbarLeft?"Left":"Right");i[e]=d?b+"px":"0px";t&&(m[0].style.width=v(c),r[0].style.width=v(c),r[0].style[e]=d?b+"px":"0px");o.children("colgroup").insertBefore(o.children("thead"));l.scroll();if((a.bSorted||a.bFiltered)&&!a._drawHold)j.scrollTop=0}}function I(a,b,c){for(var d=0,e=0,f=b.length,g,j;e<f;){g=b[e].firstChild;for(j=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,j,d):a(g,d),d++),g=g.nextSibling,j=c?j.nextSibling:null;e++}}function Ha(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll, -e=d.sY,f=d.sX,g=d.sXInner,j=c.length,i=na(a,"bVisible"),n=h("th",a.nTHead),l=b.getAttribute("width"),k=b.parentNode,r=!1,m,p,o=a.oBrowser,d=o.bScrollOversize;(m=b.style.width)&&-1!==m.indexOf("%")&&(l=m);for(m=0;m<i.length;m++)p=c[i[m]],null!==p.sWidth&&(p.sWidth=Gb(p.sWidthOrig,k),r=!0);if(d||!r&&!f&&!e&&j==ba(a)&&j==n.length)for(m=0;m<j;m++)i=$(a,m),null!==i&&(c[i].sWidth=v(n.eq(m).width()));else{j=h(b).clone().css("visibility","hidden").removeAttr("id");j.find("tbody tr").remove();var u=h("<tr/>").appendTo(j.find("tbody")); -j.find("thead, tfoot").remove();j.append(h(a.nTHead).clone()).append(h(a.nTFoot).clone());j.find("tfoot th, tfoot td").css("width","");n=ta(a,j.find("thead")[0]);for(m=0;m<i.length;m++)p=c[i[m]],n[m].style.width=null!==p.sWidthOrig&&""!==p.sWidthOrig?v(p.sWidthOrig):"",p.sWidthOrig&&f&&h(n[m]).append(h("<div/>").css({width:p.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(m=0;m<i.length;m++)r=i[m],p=c[r],h(Hb(a,r)).clone(!1).append(p.sContentPadding).appendTo(u);h("[name]", -j).removeAttr("name");p=h("<div/>").css(f||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(j).appendTo(k);f&&g?j.width(g):f?(j.css("width","auto"),j.removeAttr("width"),j.width()<k.clientWidth&&l&&j.width(k.clientWidth)):e?j.width(k.clientWidth):l&&j.width(l);for(m=e=0;m<i.length;m++)k=h(n[m]),g=k.outerWidth()-k.width(),k=o.bBounding?Math.ceil(n[m].getBoundingClientRect().width):k.outerWidth(),e+=k,c[i[m]].sWidth=v(k-g);b.style.width=v(e);p.remove()}l&&(b.style.width= -v(l));if((l||f)&&!a._reszEvt)b=function(){h(E).on("resize.DT-"+a.sInstance,Qa(function(){Z(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0}function Gb(a,b){if(!a)return 0;var c=h("<div/>").css("width",v(a)).appendTo(b||H.body),d=c[0].offsetWidth;c.remove();return d}function Hb(a,b){var c=Ib(a,b);if(0>c)return null;var d=a.aoData[c];return!d.nTr?h("<td/>").html(B(a,c,b,"display"))[0]:d.anCells[b]}function Ib(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;f<g;f++)c=B(a,f,b,"display")+"",c=c.replace(bc, -""),c=c.replace(/ /g," "),c.length>d&&(d=c.length,e=f);return e}function v(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function W(a){var b,c,d=[],e=a.aoColumns,f,g,j,i;b=a.aaSortingFixed;c=h.isPlainObject(b);var n=[];f=function(a){a.length&&!h.isArray(a[0])?n.push(a):h.merge(n,a)};h.isArray(b)&&f(b);c&&b.pre&&f(b.pre);f(a.aaSorting);c&&b.post&&f(b.post);for(a=0;a<n.length;a++){i=n[a][0];f=e[i].aDataSort;b=0;for(c=f.length;b<c;b++)g=f[b],j=e[g].sType|| -"string",n[a]._idx===k&&(n[a]._idx=h.inArray(n[a][1],e[g].asSorting)),d.push({src:i,col:g,dir:n[a][1],index:n[a]._idx,type:j,formatter:m.ext.type.order[j+"-pre"]})}return d}function ob(a){var b,c,d=[],e=m.ext.type.order,f=a.aoData,g=0,j,i=a.aiDisplayMaster,h;Ia(a);h=W(a);b=0;for(c=h.length;b<c;b++)j=h[b],j.formatter&&g++,Jb(a,j.col);if("ssp"!=y(a)&&0!==h.length){b=0;for(c=i.length;b<c;b++)d[i[b]]=b;g===h.length?i.sort(function(a,b){var c,e,g,j,i=h.length,k=f[a]._aSortData,m=f[b]._aSortData;for(g= -0;g<i;g++)if(j=h[g],c=k[j.col],e=m[j.col],c=c<e?-1:c>e?1:0,0!==c)return"asc"===j.dir?c:-c;c=d[a];e=d[b];return c<e?-1:c>e?1:0}):i.sort(function(a,b){var c,g,j,i,k=h.length,m=f[a]._aSortData,p=f[b]._aSortData;for(j=0;j<k;j++)if(i=h[j],c=m[i.col],g=p[i.col],i=e[i.type+"-"+i.dir]||e["string-"+i.dir],c=i(c,g),0!==c)return c;c=d[a];g=d[b];return c<g?-1:c>g?1:0})}a.bSorted=!0}function Kb(a){for(var b,c,d=a.aoColumns,e=W(a),a=a.oLanguage.oAria,f=0,g=d.length;f<g;f++){c=d[f];var j=c.asSorting;b=c.sTitle.replace(/<.*?>/g, -"");var i=c.nTh;i.removeAttribute("aria-sort");c.bSortable&&(0<e.length&&e[0].col==f?(i.setAttribute("aria-sort","asc"==e[0].dir?"ascending":"descending"),c=j[e[0].index+1]||j[0]):c=j[0],b+="asc"===c?a.sSortAscending:a.sSortDescending);i.setAttribute("aria-label",b)}}function Xa(a,b,c,d){var e=a.aaSorting,f=a.aoColumns[b].asSorting,g=function(a,b){var c=a._idx;c===k&&(c=h.inArray(a[1],f));return c+1<f.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=h.inArray(b, -D(e,"0")),-1!==c?(b=g(e[c],!0),null===b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=f[b],e[c]._idx=b)):(e.push([b,f[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=f[b],e[0]._idx=b):(e.length=0,e.push([b,f[0]]),e[0]._idx=0);T(a);"function"==typeof d&&d(a)}function Oa(a,b,c,d){var e=a.aoColumns[c];Ya(b,{},function(b){!1!==e.bSortable&&(a.oFeatures.bProcessing?(C(a,!0),setTimeout(function(){Xa(a,c,b.shiftKey,d);"ssp"!==y(a)&&C(a,!1)},0)):Xa(a,c,b.shiftKey,d))})} -function ya(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=W(a),e=a.oFeatures,f,g;if(e.bSort&&e.bSortClasses){e=0;for(f=b.length;e<f;e++)g=b[e].src,h(D(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3));e=0;for(f=d.length;e<f;e++)g=d[e].src,h(D(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function Jb(a,b){var c=a.aoColumns[b],d=m.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,aa(a,b)));for(var f,g=m.ext.type.order[c.sType+"-pre"],j=0,i=a.aoData.length;j<i;j++)if(c=a.aoData[j], -c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)f=d?e[j]:B(a,j,b,"sort"),c._aSortData[b]=g?g(f):f}function za(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:h.extend(!0,[],a.aaSorting),search:Cb(a.oPreviousSearch),columns:h.map(a.aoColumns,function(b,d){return{visible:b.bVisible,search:Cb(a.aoPreSearchCols[d])}})};s(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a, -b)}}function Lb(a,b,c){var d,e,f=a.aoColumns,b=function(b){if(b&&b.time){var i=s(a,"aoStateLoadParams","stateLoadParams",[a,g]);if(-1===h.inArray(!1,i)&&(i=a.iStateDuration,!(0<i&&b.time<+new Date-1E3*i)&&!(b.columns&&f.length!==b.columns.length))){a.oLoadedState=h.extend(!0,{},g);b.start!==k&&(a._iDisplayStart=b.start,a.iInitDisplayStart=b.start);b.length!==k&&(a._iDisplayLength=b.length);b.order!==k&&(a.aaSorting=[],h.each(b.order,function(b,c){a.aaSorting.push(c[0]>=f.length?[0,c[1]]:c)}));b.search!== -k&&h.extend(a.oPreviousSearch,Db(b.search));if(b.columns){d=0;for(e=b.columns.length;d<e;d++)i=b.columns[d],i.visible!==k&&(f[d].bVisible=i.visible),i.search!==k&&h.extend(a.aoPreSearchCols[d],Db(i.search))}s(a,"aoStateLoaded","stateLoaded",[a,g])}}c()};if(a.oFeatures.bStateSave){var g=a.fnStateLoadCallback.call(a.oInstance,a,b);g!==k&&b(g)}else c()}function Aa(a){var b=m.settings,a=h.inArray(a,D(b,"nTable"));return-1!==a?b[a]:null}function K(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+ -" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+d);if(b)E.console&&console.log&&console.log(c);else if(b=m.ext,b=b.sErrMode||b.errMode,a&&s(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function F(a,b,c,d){h.isArray(c)?h.each(c,function(c,d){h.isArray(d)?F(a,b,d[0],d[1]):F(a,b,d)}):(d===k&&(d=c),b[c]!==k&&(a[d]=b[c]))}function Mb(a,b,c){var d,e;for(e in b)b.hasOwnProperty(e)&&(d=b[e], -h.isPlainObject(d)?(h.isPlainObject(a[e])||(a[e]={}),h.extend(!0,a[e],d)):a[e]=c&&"data"!==e&&"aaData"!==e&&h.isArray(d)?d.slice():d);return a}function Ya(a,b,c){h(a).on("click.DT",b,function(b){a.blur();c(b)}).on("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).on("selectstart.DT",function(){return!1})}function z(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function s(a,b,c,d){var e=[];b&&(e=h.map(a[b].slice().reverse(),function(b){return b.fn.apply(a.oInstance,d)}));null!==c&&(b=h.Event(c+ -".dt"),h(a.nTable).trigger(b,d),e.push(b.result));return e}function Ua(a){var b=a._iDisplayStart,c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Pa(a,b){var c=a.renderer,d=m.ext.renderer[b];return h.isPlainObject(c)&&c[b]?d[c[b]]||d._:"string"===typeof c?d[c]||d._:d._}function y(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ia(a,b){var c=[],c=Nb.numbers_length,d=Math.floor(c/2);b<=c?c=X(0,b):a<=d?(c=X(0, -c-2),c.push("ellipsis"),c.push(b-1)):(a>=b-1-d?c=X(b-(c-2),b):(c=X(a-d+2,a+d-1),c.push("ellipsis"),c.push(b-1)),c.splice(0,0,"ellipsis"),c.splice(0,0,0));c.DT_el="span";return c}function fb(a){h.each({num:function(b){return Ba(b,a)},"num-fmt":function(b){return Ba(b,a,Za)},"html-num":function(b){return Ba(b,a,Ca)},"html-num-fmt":function(b){return Ba(b,a,Ca,Za)}},function(b,c){x.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(x.type.search[b+a]=x.type.search.html)})}function Ob(a){return function(){var b= -[Aa(this[m.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return m.ext.internal[a].apply(this,b)}}var m=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new u(Aa(this[x.iApiIndex])):new u(this)};this.fnAddData=function(a,b){var c=this.api(!0),d=h.isArray(a)&&(h.isArray(a[0])||h.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===k||b)&&c.draw();return d.flatten().toArray()};this.fnAdjustColumnSizing= -function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===k||a?b.draw(!1):(""!==d.sX||""!==d.sY)&&ma(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===k||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0),a=d.rows(a),e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===k||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)}; -this.fnFilter=function(a,b,c,d,e,h){e=this.api(!0);null===b||b===k?e.search(a,c,d,h):e.column(b).search(a,c,d,h);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==k){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==k||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==k?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase(); -return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){var c=this.api(!0).page(a);(b===k||b)&&c.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===k||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return Aa(this[x.iApiIndex])}; -this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===k||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===k||e)&&h.columns.adjust();(d===k||d)&&h.draw();return 0};this.fnVersionCheck=x.fnVersionCheck;var b=this,c=a===k,d=this.length;c&&(a={});this.oApi=this.internal=x.internal;for(var e in m.ext.internal)e&&(this[e]=Ob(e));this.each(function(){var e={},g=1<d?Mb(e,a,!0): -a,j=0,i,e=this.getAttribute("id"),n=!1,l=m.defaults,q=h(this);if("table"!=this.nodeName.toLowerCase())K(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{gb(l);hb(l.column);J(l,l,!0);J(l.column,l.column,!0);J(l,h.extend(g,q.data()));var r=m.settings,j=0;for(i=r.length;j<i;j++){var p=r[j];if(p.nTable==this||p.nTHead.parentNode==this||p.nTFoot&&p.nTFoot.parentNode==this){var u=g.bRetrieve!==k?g.bRetrieve:l.bRetrieve;if(c||u)return p.oInstance;if(g.bDestroy!==k?g.bDestroy:l.bDestroy){p.oInstance.fnDestroy(); -break}else{K(p,0,"Cannot reinitialise DataTable",3);return}}if(p.sTableId==this.id){r.splice(j,1);break}}if(null===e||""===e)this.id=e="DataTables_Table_"+m.ext._unique++;var o=h.extend(!0,{},m.models.oSettings,{sDestroyWidth:q[0].style.width,sInstance:e,sTableId:e});o.nTable=this;o.oApi=b.internal;o.oInit=g;r.push(o);o.oInstance=1===b.length?b:q.dataTable();gb(g);g.oLanguage&&Fa(g.oLanguage);g.aLengthMenu&&!g.iDisplayLength&&(g.iDisplayLength=h.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]); -g=Mb(h.extend(!0,{},l),g);F(o.oFeatures,g,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));F(o,g,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"], -["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"],["bJQueryUI","bJUI"]]);F(o.oScroll,g,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);F(o.oLanguage,g,"fnInfoCallback");z(o,"aoDrawCallback",g.fnDrawCallback,"user");z(o,"aoServerParams",g.fnServerParams,"user");z(o,"aoStateSaveParams",g.fnStateSaveParams,"user");z(o,"aoStateLoadParams",g.fnStateLoadParams,"user");z(o,"aoStateLoaded",g.fnStateLoaded, -"user");z(o,"aoRowCallback",g.fnRowCallback,"user");z(o,"aoRowCreatedCallback",g.fnCreatedRow,"user");z(o,"aoHeaderCallback",g.fnHeaderCallback,"user");z(o,"aoFooterCallback",g.fnFooterCallback,"user");z(o,"aoInitComplete",g.fnInitComplete,"user");z(o,"aoPreDrawCallback",g.fnPreDrawCallback,"user");o.rowIdFn=R(g.rowId);ib(o);var t=o.oClasses;g.bJQueryUI?(h.extend(t,m.ext.oJUIClasses,g.oClasses),g.sDom===l.sDom&&"lfrtip"===l.sDom&&(o.sDom='<"H"lfr>t<"F"ip>'),o.renderer)?h.isPlainObject(o.renderer)&& -!o.renderer.header&&(o.renderer.header="jqueryui"):o.renderer="jqueryui":h.extend(t,m.ext.classes,g.oClasses);q.addClass(t.sTable);o.iInitDisplayStart===k&&(o.iInitDisplayStart=g.iDisplayStart,o._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(o.bDeferLoading=!0,e=h.isArray(g.iDeferLoading),o._iRecordsDisplay=e?g.iDeferLoading[0]:g.iDeferLoading,o._iRecordsTotal=e?g.iDeferLoading[1]:g.iDeferLoading);var v=o.oLanguage;h.extend(!0,v,g.oLanguage);v.sUrl&&(h.ajax({dataType:"json",url:v.sUrl,success:function(a){Fa(a); -J(l.oLanguage,a);h.extend(true,v,a);ha(o)},error:function(){ha(o)}}),n=!0);null===g.asStripeClasses&&(o.asStripeClasses=[t.sStripeOdd,t.sStripeEven]);var e=o.asStripeClasses,x=q.children("tbody").find("tr").eq(0);-1!==h.inArray(!0,h.map(e,function(a){return x.hasClass(a)}))&&(h("tbody tr",this).removeClass(e.join(" ")),o.asDestroyStripes=e.slice());e=[];r=this.getElementsByTagName("thead");0!==r.length&&(ea(o.aoHeader,r[0]),e=ta(o));if(null===g.aoColumns){r=[];j=0;for(i=e.length;j<i;j++)r.push(null)}else r= -g.aoColumns;j=0;for(i=r.length;j<i;j++)Ga(o,e?e[j]:null);kb(o,g.aoColumnDefs,r,function(a,b){la(o,a,b)});if(x.length){var w=function(a,b){return a.getAttribute("data-"+b)!==null?b:null};h(x[0]).children("th, td").each(function(a,b){var c=o.aoColumns[a];if(c.mData===a){var d=w(b,"sort")||w(b,"order"),e=w(b,"filter")||w(b,"search");if(d!==null||e!==null){c.mData={_:a+".display",sort:d!==null?a+".@data-"+d:k,type:d!==null?a+".@data-"+d:k,filter:e!==null?a+".@data-"+e:k};la(o,a)}}})}var U=o.oFeatures, -e=function(){if(g.aaSorting===k){var a=o.aaSorting;j=0;for(i=a.length;j<i;j++)a[j][1]=o.aoColumns[j].asSorting[0]}ya(o);U.bSort&&z(o,"aoDrawCallback",function(){if(o.bSorted){var a=W(o),b={};h.each(a,function(a,c){b[c.src]=c.dir});s(o,null,"order",[o,a,b]);Kb(o)}});z(o,"aoDrawCallback",function(){(o.bSorted||y(o)==="ssp"||U.bDeferRender)&&ya(o)},"sc");var a=q.children("caption").each(function(){this._captionSide=h(this).css("caption-side")}),b=q.children("thead");b.length===0&&(b=h("<thead/>").appendTo(q)); -o.nTHead=b[0];b=q.children("tbody");b.length===0&&(b=h("<tbody/>").appendTo(q));o.nTBody=b[0];b=q.children("tfoot");if(b.length===0&&a.length>0&&(o.oScroll.sX!==""||o.oScroll.sY!==""))b=h("<tfoot/>").appendTo(q);if(b.length===0||b.children().length===0)q.addClass(t.sNoFooter);else if(b.length>0){o.nTFoot=b[0];ea(o.aoFooter,o.nTFoot)}if(g.aaData)for(j=0;j<g.aaData.length;j++)N(o,g.aaData[j]);else(o.bDeferLoading||y(o)=="dom")&&oa(o,h(o.nTBody).children("tr"));o.aiDisplay=o.aiDisplayMaster.slice(); -o.bInitialised=true;n===false&&ha(o)};g.bStateSave?(U.bStateSave=!0,z(o,"aoDrawCallback",za,"state_save"),Lb(o,g,e)):e()}});b=null;return this},x,u,p,t,$a={},Pb=/[\r\n]/g,Ca=/<.*?>/g,cc=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,dc=RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"),Za=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi,M=function(a){return!a||!0===a||"-"===a?!0:!1},Qb=function(a){var b=parseInt(a,10);return!isNaN(b)&& -isFinite(a)?b:null},Rb=function(a,b){$a[b]||($a[b]=RegExp(Sa(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace($a[b],"."):a},ab=function(a,b,c){var d="string"===typeof a;if(M(a))return!0;b&&d&&(a=Rb(a,b));c&&d&&(a=a.replace(Za,""));return!isNaN(parseFloat(a))&&isFinite(a)},Sb=function(a,b,c){return M(a)?!0:!(M(a)||"string"===typeof a)?null:ab(a.replace(Ca,""),b,c)?!0:null},D=function(a,b,c){var d=[],e=0,f=a.length;if(c!==k)for(;e<f;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e< -f;e++)a[e]&&d.push(a[e][b]);return d},ja=function(a,b,c,d){var e=[],f=0,g=b.length;if(d!==k)for(;f<g;f++)a[b[f]][c]&&e.push(a[b[f]][c][d]);else for(;f<g;f++)e.push(a[b[f]][c]);return e},X=function(a,b){var c=[],d;b===k?(b=0,d=a):(d=b,b=a);for(var e=b;e<d;e++)c.push(e);return c},Tb=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},sa=function(a){var b=[],c,d,e=a.length,f,g=0;d=0;a:for(;d<e;d++){c=a[d];for(f=0;f<g;f++)if(b[f]===c)continue a;b.push(c);g++}return b};m.util= -{throttle:function(a,b){var c=b!==k?b:200,d,e;return function(){var b=this,g=+new Date,h=arguments;d&&g<d+c?(clearTimeout(e),e=setTimeout(function(){d=k;a.apply(b,h)},c)):(d=g,a.apply(b,h))}},escapeRegex:function(a){return a.replace(dc,"\\$1")}};var A=function(a,b,c){a[b]!==k&&(a[c]=a[b])},ca=/\[.*?\]$/,V=/\(\)$/,Sa=m.util.escapeRegex,xa=h("<div>")[0],$b=xa.textContent!==k,bc=/<.*?>/g,Qa=m.util.throttle,Ub=[],w=Array.prototype,ec=function(a){var b,c,d=m.settings,e=h.map(d,function(a){return a.nTable}); -if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase())return b=h.inArray(a,e),-1!==b?[d[b]]:null;if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?c=h(a):a instanceof h&&(c=a)}else return[];if(c)return c.map(function(){b=h.inArray(this,e);return-1!==b?d[b]:null}).toArray()};u=function(a,b){if(!(this instanceof u))return new u(a,b);var c=[],d=function(a){(a=ec(a))&&(c=c.concat(a))};if(h.isArray(a))for(var e=0,f=a.length;e<f;e++)d(a[e]); -else d(a);this.context=sa(c);b&&h.merge(this,b);this.selector={rows:null,cols:null,opts:null};u.extend(this,this,Ub)};m.Api=u;h.extend(u.prototype,{any:function(){return 0!==this.count()},concat:w.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new u(b[a],this[a]):null},filter:function(a){var b=[];if(w.filter)b=w.filter.call(this,a,this); -else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new u(this.context,b)},flatten:function(){var a=[];return new u(this.context,a.concat.apply(a,this.toArray()))},join:w.join,indexOf:w.indexOf||function(a,b){for(var c=b||0,d=this.length;c<d;c++)if(this[c]===a)return c;return-1},iterator:function(a,b,c,d){var e=[],f,g,h,i,n,l=this.context,m,p,t=this.selector;"string"===typeof a&&(d=c,c=b,b=a,a=!1);g=0;for(h=l.length;g<h;g++){var s=new u(l[g]);if("table"===b)f= -c.call(s,l[g],g),f!==k&&e.push(f);else if("columns"===b||"rows"===b)f=c.call(s,l[g],this[g],g),f!==k&&e.push(f);else if("column"===b||"column-rows"===b||"row"===b||"cell"===b){p=this[g];"column-rows"===b&&(m=Da(l[g],t.opts));i=0;for(n=p.length;i<n;i++)f=p[i],f="cell"===b?c.call(s,l[g],f.row,f.column,g,i):c.call(s,l[g],f,g,i,m),f!==k&&e.push(f)}}return e.length||d?(a=new u(l,a?e.concat.apply([],e):e),b=a.selector,b.rows=t.rows,b.cols=t.cols,b.opts=t.opts,a):this},lastIndexOf:w.lastIndexOf||function(a, -b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(w.map)b=w.map.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new u(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},pop:w.pop,push:w.push,reduce:w.reduce||function(a,b){return jb(this,a,b,0,this.length,1)},reduceRight:w.reduceRight||function(a,b){return jb(this,a,b,this.length-1,-1,-1)},reverse:w.reverse,selector:null,shift:w.shift, -sort:w.sort,splice:w.splice,toArray:function(){return w.slice.call(this)},to$:function(){return h(this)},toJQuery:function(){return h(this)},unique:function(){return new u(this.context,sa(this))},unshift:w.unshift});u.extend=function(a,b,c){if(c.length&&b&&(b instanceof u||b.__dt_wrapper)){var d,e,f,g=function(a,b,c){return function(){var d=b.apply(a,arguments);u.extend(d,d,c.methodExt);return d}};d=0;for(e=c.length;d<e;d++)f=c[d],b[f.name]="function"===typeof f.val?g(a,f.val,f):h.isPlainObject(f.val)? -{}:f.val,b[f.name].__dt_wrapper=!0,u.extend(a,b[f.name],f.propExt)}};u.register=p=function(a,b){if(h.isArray(a))for(var c=0,d=a.length;c<d;c++)u.register(a[c],b);else for(var e=a.split("."),f=Ub,g,j,c=0,d=e.length;c<d;c++){g=(j=-1!==e[c].indexOf("()"))?e[c].replace("()",""):e[c];var i;a:{i=0;for(var n=f.length;i<n;i++)if(f[i].name===g){i=f[i];break a}i=null}i||(i={name:g,val:{},methodExt:[],propExt:[]},f.push(i));c===d-1?i.val=b:f=j?i.methodExt:i.propExt}};u.registerPlural=t=function(a,b,c){u.register(a, -c);u.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof u?a.length?h.isArray(a[0])?new u(a.context,a[0]):a[0]:k:a})};p("tables()",function(a){var b;if(a){b=u;var c=this.context;if("number"===typeof a)a=[c[a]];else var d=h.map(c,function(a){return a.nTable}),a=h(d).filter(a).map(function(){var a=h.inArray(this,d);return c[a]}).toArray();b=new b(a)}else b=this;return b});p("table()",function(a){var a=this.tables(a),b=a.context;return b.length?new u(b[0]):a});t("tables().nodes()", -"table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});t("tables().body()","table().body()",function(){return this.iterator("table",function(a){return a.nTBody},1)});t("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});t("tables().footer()","table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot},1)});t("tables().containers()","table().container()",function(){return this.iterator("table", -function(a){return a.nTableWrapper},1)});p("draw()",function(a){return this.iterator("table",function(b){"page"===a?O(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),T(b,!1===a))})});p("page()",function(a){return a===k?this.page.info().page:this.iterator("table",function(b){Va(b,a)})});p("page.info()",function(){if(0===this.context.length)return k;var a=this.context[0],b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c), -pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,serverSide:"ssp"===y(a)}});p("page.len()",function(a){return a===k?0!==this.context.length?this.context[0]._iDisplayLength:k:this.iterator("table",function(b){Ta(b,a)})});var Vb=function(a,b,c){if(c){var d=new u(a);d.one("draw",function(){c(d.ajax.json())})}if("ssp"==y(a))T(a,b);else{C(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();ua(a,[],function(c){pa(a);for(var c=va(a,c),d=0,e=c.length;d< -e;d++)N(a,c[d]);T(a,b);C(a,!1)})}};p("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});p("ajax.params()",function(){var a=this.context;if(0<a.length)return a[0].oAjaxData});p("ajax.reload()",function(a,b){return this.iterator("table",function(c){Vb(c,!1===b,a)})});p("ajax.url()",function(a){var b=this.context;if(a===k){if(0===b.length)return k;b=b[0];return b.ajax?h.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){h.isPlainObject(b.ajax)? -b.ajax.url=a:b.ajax=a})});p("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Vb(c,!1===b,a)})});var bb=function(a,b,c,d,e){var f=[],g,j,i,n,l,m;i=typeof b;if(!b||"string"===i||"function"===i||b.length===k)b=[b];i=0;for(n=b.length;i<n;i++){j=b[i]&&b[i].split&&!b[i].match(/[\[\(:]/)?b[i].split(","):[b[i]];l=0;for(m=j.length;l<m;l++)(g=c("string"===typeof j[l]?h.trim(j[l]):j[l]))&&g.length&&(f=f.concat(g))}a=x.selector[a];if(a.length){i=0;for(n=a.length;i<n;i++)f=a[i](d,e,f)}return sa(f)}, -cb=function(a){a||(a={});a.filter&&a.search===k&&(a.search=a.filter);return h.extend({search:"none",order:"current",page:"all"},a)},db=function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Da=function(a,b){var c,d,e,f=[],g=a.aiDisplay;c=a.aiDisplayMaster;var j=b.search;d=b.order;e=b.page;if("ssp"==y(a))return"removed"===j?[]:X(0,c.length);if("current"==e){c=a._iDisplayStart;for(d=a.fnDisplayEnd();c<d;c++)f.push(g[c])}else if("current"== -d||"applied"==d)f="none"==j?c.slice():"applied"==j?g.slice():h.map(c,function(a){return-1===h.inArray(a,g)?a:null});else if("index"==d||"original"==d){c=0;for(d=a.aoData.length;c<d;c++)"none"==j?f.push(c):(e=h.inArray(c,g),(-1===e&&"removed"==j||0<=e&&"applied"==j)&&f.push(c))}return f};p("rows()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=cb(b),c=this.iterator("table",function(c){var e=b,f;return bb("row",a,function(a){var b=Qb(a);if(b!==null&&!e)return[b];f||(f=Da(c,e));if(b!== -null&&h.inArray(b,f)!==-1)return[b];if(a===null||a===k||a==="")return f;if(typeof a==="function")return h.map(f,function(b){var e=c.aoData[b];return a(b,e._aData,e.nTr)?b:null});b=Tb(ja(c.aoData,f,"nTr"));if(a.nodeName){if(a._DT_RowIndex!==k)return[a._DT_RowIndex];if(a._DT_CellIndex)return[a._DT_CellIndex.row];b=h(a).closest("*[data-dt-row]");return b.length?[b.data("dt-row")]:[]}if(typeof a==="string"&&a.charAt(0)==="#"){var i=c.aIds[a.replace(/^#/,"")];if(i!==k)return[i.idx]}return h(b).filter(a).map(function(){return this._DT_RowIndex}).toArray()}, -c,e)},1);c.selector.rows=a;c.selector.opts=b;return c});p("rows().nodes()",function(){return this.iterator("row",function(a,b){return a.aoData[b].nTr||k},1)});p("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return ja(a.aoData,b,"_aData")},1)});t("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){var d=b.aoData[c];return"search"===a?d._aFilterData:d._aSortData},1)});t("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row", -function(b,c){da(b,c,a)})});t("rows().indexes()","row().index()",function(){return this.iterator("row",function(a,b){return b},1)});t("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var f=0,g=this[d].length;f<g;f++){var h=c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);b.push((!0===a?"#":"")+h)}return new u(c,b)});t("rows().remove()","row().remove()",function(){var a=this;this.iterator("row",function(b,c,d){var e=b.aoData,f=e[c],g,h,i,n,l;e.splice(c,1); -g=0;for(h=e.length;g<h;g++)if(i=e[g],l=i.anCells,null!==i.nTr&&(i.nTr._DT_RowIndex=g),null!==l){i=0;for(n=l.length;i<n;i++)l[i]._DT_CellIndex.row=g}qa(b.aiDisplayMaster,c);qa(b.aiDisplay,c);qa(a[d],c,!1);Ua(b);c=b.rowIdFn(f._aData);c!==k&&delete b.aIds[c]});this.iterator("table",function(a){for(var c=0,d=a.aoData.length;c<d;c++)a.aoData[c].idx=c});return this});p("rows.add()",function(a){var b=this.iterator("table",function(b){var c,f,g,h=[];f=0;for(g=a.length;f<g;f++)c=a[f],c.nodeName&&"TR"===c.nodeName.toUpperCase()? -h.push(oa(b,c)[0]):h.push(N(b,c));return h},1),c=this.rows(-1);c.pop();h.merge(c,b);return c});p("row()",function(a,b){return db(this.rows(a,b))});p("row().data()",function(a){var b=this.context;if(a===k)return b.length&&this.length?b[0].aoData[this[0]]._aData:k;b[0].aoData[this[0]]._aData=a;da(b[0],this[0],"data");return this});p("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});p("row.add()",function(a){a instanceof h&&a.length&&(a=a[0]); -var b=this.iterator("table",function(b){return a.nodeName&&"TR"===a.nodeName.toUpperCase()?oa(b,a)[0]:N(b,a)});return this.row(b[0])});var eb=function(a,b){var c=a.context;if(c.length&&(c=c[0].aoData[b!==k?b:a[0]])&&c._details)c._details.remove(),c._detailsShow=k,c._details=k},Wb=function(a,b){var c=a.context;if(c.length&&a.length){var d=c[0].aoData[a[0]];if(d._details){(d._detailsShow=b)?d._details.insertAfter(d.nTr):d._details.detach();var e=c[0],f=new u(e),g=e.aoData;f.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details"); -0<D(g,"_details").length&&(f.on("draw.dt.DT_details",function(a,b){e===b&&f.rows({page:"current"}).eq(0).each(function(a){a=g[a];a._detailsShow&&a._details.insertAfter(a.nTr)})}),f.on("column-visibility.dt.DT_details",function(a,b){if(e===b)for(var c,d=ba(b),f=0,h=g.length;f<h;f++)c=g[f],c._details&&c._details.children("td[colspan]").attr("colspan",d)}),f.on("destroy.dt.DT_details",function(a,b){if(e===b)for(var c=0,d=g.length;c<d;c++)g[c]._details&&eb(f,c)}))}}};p("row().child()",function(a,b){var c= -this.context;if(a===k)return c.length&&this.length?c[0].aoData[this[0]]._details:k;if(!0===a)this.child.show();else if(!1===a)eb(this);else if(c.length&&this.length){var d=c[0],c=c[0].aoData[this[0]],e=[],f=function(a,b){if(h.isArray(a)||a instanceof h)for(var c=0,k=a.length;c<k;c++)f(a[c],b);else a.nodeName&&"tr"===a.nodeName.toLowerCase()?e.push(a):(c=h("<tr><td/></tr>").addClass(b),h("td",c).addClass(b).html(a)[0].colSpan=ba(d),e.push(c[0]))};f(a,b);c._details&&c._details.detach();c._details=h(e); -c._detailsShow&&c._details.insertAfter(c.nTr)}return this});p(["row().child.show()","row().child().show()"],function(){Wb(this,!0);return this});p(["row().child.hide()","row().child().hide()"],function(){Wb(this,!1);return this});p(["row().child.remove()","row().child().remove()"],function(){eb(this);return this});p("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var fc=/^([^:]+):(name|visIdx|visible)$/,Xb=function(a,b, -c,d,e){for(var c=[],d=0,f=e.length;d<f;d++)c.push(B(a,e[d],b));return c};p("columns()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=cb(b),c=this.iterator("table",function(c){var e=a,f=b,g=c.aoColumns,j=D(g,"sName"),i=D(g,"nTh");return bb("column",e,function(a){var b=Qb(a);if(a==="")return X(g.length);if(b!==null)return[b>=0?b:g.length+b];if(typeof a==="function"){var e=Da(c,f);return h.map(g,function(b,f){return a(f,Xb(c,f,0,0,e),i[f])?f:null})}var k=typeof a==="string"?a.match(fc): -"";if(k)switch(k[2]){case "visIdx":case "visible":b=parseInt(k[1],10);if(b<0){var m=h.map(g,function(a,b){return a.bVisible?b:null});return[m[m.length+b]]}return[$(c,b)];case "name":return h.map(j,function(a,b){return a===k[1]?b:null});default:return[]}if(a.nodeName&&a._DT_CellIndex)return[a._DT_CellIndex.column];b=h(i).filter(a).map(function(){return h.inArray(this,i)}).toArray();if(b.length||!a.nodeName)return b;b=h(a).closest("*[data-dt-column]");return b.length?[b.data("dt-column")]:[]},c,f)}, -1);c.selector.cols=a;c.selector.opts=b;return c});t("columns().header()","column().header()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});t("columns().footer()","column().footer()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});t("columns().data()","column().data()",function(){return this.iterator("column-rows",Xb,1)});t("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData}, -1)});t("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return ja(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});t("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return ja(a.aoData,e,"anCells",b)},1)});t("columns().visible()","column().visible()",function(a,b){var c=this.iterator("column",function(b,c){if(a===k)return b.aoColumns[c].bVisible;var f=b.aoColumns,g=f[c],j=b.aoData, -i,n,l;if(a!==k&&g.bVisible!==a){if(a){var m=h.inArray(!0,D(f,"bVisible"),c+1);i=0;for(n=j.length;i<n;i++)l=j[i].nTr,f=j[i].anCells,l&&l.insertBefore(f[c],f[m]||null)}else h(D(b.aoData,"anCells",c)).detach();g.bVisible=a;fa(b,b.aoHeader);fa(b,b.aoFooter);za(b)}});a!==k&&(this.iterator("column",function(c,e){s(c,null,"column-visibility",[c,e,a,b])}),(b===k||b)&&this.columns.adjust());return c});t("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"=== -a?aa(b,c):c},1)});p("columns.adjust()",function(){return this.iterator("table",function(a){Z(a)},1)});p("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return $(c,b);if("fromData"===a||"toVisible"===a)return aa(c,b)}});p("column()",function(a,b){return db(this.columns(a,b))});p("cells()",function(a,b,c){h.isPlainObject(a)&&(a.row===k?(c=a,a=null):(c=b,b=null));h.isPlainObject(b)&&(c=b,b=null);if(null===b||b===k)return this.iterator("table", -function(b){var d=a,e=cb(c),f=b.aoData,g=Da(b,e),i=Tb(ja(f,g,"anCells")),j=h([].concat.apply([],i)),l,n=b.aoColumns.length,m,p,t,u,s,v;return bb("cell",d,function(a){var c=typeof a==="function";if(a===null||a===k||c){m=[];p=0;for(t=g.length;p<t;p++){l=g[p];for(u=0;u<n;u++){s={row:l,column:u};if(c){v=f[l];a(s,B(b,l,u),v.anCells?v.anCells[u]:null)&&m.push(s)}else m.push(s)}}return m}if(h.isPlainObject(a))return[a];c=j.filter(a).map(function(a,b){return{row:b._DT_CellIndex.row,column:b._DT_CellIndex.column}}).toArray(); -if(c.length||!a.nodeName)return c;v=h(a).closest("*[data-dt-row]");return v.length?[{row:v.data("dt-row"),column:v.data("dt-column")}]:[]},b,e)});var d=this.columns(b,c),e=this.rows(a,c),f,g,j,i,n,l=this.iterator("table",function(a,b){f=[];g=0;for(j=e[b].length;g<j;g++){i=0;for(n=d[b].length;i<n;i++)f.push({row:e[b][g],column:d[b][i]})}return f},1);h.extend(l.selector,{cols:b,rows:a,opts:c});return l});t("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a= -a.aoData[b])&&a.anCells?a.anCells[c]:k},1)});p("cells().data()",function(){return this.iterator("cell",function(a,b,c){return B(a,b,c)},1)});t("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});t("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return B(b,c,d,a)},1)});t("cells().indexes()","cell().index()",function(){return this.iterator("cell", -function(a,b,c){return{row:b,column:c,columnVisible:aa(a,c)}},1)});t("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(b,c,d){da(b,c,a,d)})});p("cell()",function(a,b,c){return db(this.cells(a,b,c))});p("cell().data()",function(a){var b=this.context,c=this[0];if(a===k)return b.length&&c.length?B(b[0],c[0].row,c[0].column):k;lb(b[0],c[0].row,c[0].column,a);da(b[0],c[0].row,"data",c[0].column);return this});p("order()",function(a,b){var c=this.context;if(a=== -k)return 0!==c.length?c[0].aaSorting:k;"number"===typeof a?a=[[a,b]]:a.length&&!h.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(b){b.aaSorting=a.slice()})});p("order.listener()",function(a,b,c){return this.iterator("table",function(d){Oa(d,a,b,c)})});p("order.fixed()",function(a){if(!a){var b=this.context,b=b.length?b[0].aaSortingFixed:k;return h.isArray(b)?{pre:b}:b}return this.iterator("table",function(b){b.aaSortingFixed=h.extend(!0,{},a)})});p(["columns().order()", -"column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];h.each(b[d],function(b,c){e.push([c,a])});c.aaSorting=e})});p("search()",function(a,b,c,d){var e=this.context;return a===k?0!==e.length?e[0].oPreviousSearch.sSearch:k:this.iterator("table",function(e){e.oFeatures.bFilter&&ga(e,h.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});t("columns().search()","column().search()",function(a, -b,c,d){return this.iterator("column",function(e,f){var g=e.aoPreSearchCols;if(a===k)return g[f].sSearch;e.oFeatures.bFilter&&(h.extend(g[f],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),ga(e,e.oPreviousSearch,1))})});p("state()",function(){return this.context.length?this.context[0].oSavedState:null});p("state.clear()",function(){return this.iterator("table",function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});p("state.loaded()",function(){return this.context.length? -this.context[0].oLoadedState:null});p("state.save()",function(){return this.iterator("table",function(a){za(a)})});m.versionCheck=m.fnVersionCheck=function(a){for(var b=m.version.split("."),a=a.split("."),c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};m.isDataTable=m.fnIsDataTable=function(a){var b=h(a).get(0),c=!1;if(a instanceof m.Api)return!0;h.each(m.settings,function(a,e){var f=e.nScrollHead?h("table",e.nScrollHead)[0]:null,g=e.nScrollFoot? -h("table",e.nScrollFoot)[0]:null;if(e.nTable===b||f===b||g===b)c=!0});return c};m.tables=m.fnTables=function(a){var b=!1;h.isPlainObject(a)&&(b=a.api,a=a.visible);var c=h.map(m.settings,function(b){if(!a||a&&h(b.nTable).is(":visible"))return b.nTable});return b?new u(c):c};m.camelToHungarian=J;p("$()",function(a,b){var c=this.rows(b).nodes(),c=h(c);return h([].concat(c.filter(a).toArray(),c.find(a).toArray()))});h.each(["on","one","off"],function(a,b){p(b+"()",function(){var a=Array.prototype.slice.call(arguments); -a[0]=h.map(a[0].split(/\s/),function(a){return!a.match(/\.dt\b/)?a+".dt":a}).join(" ");var d=h(this.tables().nodes());d[b].apply(d,a);return this})});p("clear()",function(){return this.iterator("table",function(a){pa(a)})});p("settings()",function(){return new u(this.context,this.context)});p("init()",function(){var a=this.context;return a.length?a[0].oInit:null});p("data()",function(){return this.iterator("table",function(a){return D(a.aoData,"_aData")}).flatten()});p("destroy()",function(a){a=a|| -!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,f=b.nTBody,g=b.nTHead,j=b.nTFoot,i=h(e),f=h(f),k=h(b.nTableWrapper),l=h.map(b.aoData,function(a){return a.nTr}),p;b.bDestroying=!0;s(b,"aoDestroyCallback","destroy",[b]);a||(new u(b)).columns().visible(!0);k.off(".DT").find(":not(tbody *)").off(".DT");h(E).off(".DT-"+b.sInstance);e!=g.parentNode&&(i.children("thead").detach(),i.append(g));j&&e!=j.parentNode&&(i.children("tfoot").detach(),i.append(j)); -b.aaSorting=[];b.aaSortingFixed=[];ya(b);h(l).removeClass(b.asStripeClasses.join(" "));h("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);b.bJUI&&(h("th span."+d.sSortIcon+", td span."+d.sSortIcon,g).detach(),h("th, td",g).each(function(){var a=h("div."+d.sSortJUIWrapper,this);h(this).append(a.contents());a.detach()}));f.children().detach();f.append(l);g=a?"remove":"detach";i[g]();k[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),i.css("width", -b.sDestroyWidth).removeClass(d.sTable),(p=b.asDestroyStripes.length)&&f.children().each(function(a){h(this).addClass(b.asDestroyStripes[a%p])}));c=h.inArray(b,m.settings);-1!==c&&m.settings.splice(c,1)})});h.each(["column","row","cell"],function(a,b){p(b+"s().every()",function(a){var d=this.selector.opts,e=this;return this.iterator(b,function(f,g,h,i,m){a.call(e[b](g,"cell"===b?h:d,"cell"===b?d:k),g,h,i,m)})})});p("i18n()",function(a,b,c){var d=this.context[0],a=R(a)(d.oLanguage);a===k&&(a=b);c!== -k&&h.isPlainObject(a)&&(a=a[c]!==k?a[c]:a._);return a.replace("%d",c)});m.version="1.10.13";m.settings=[];m.models={};m.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};m.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};m.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null, -mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};m.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bJQueryUI:!1,bLengthChange:!0,bPaginate:!0,bProcessing:!1, -bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration? -sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending", -sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"}, -oSearch:h.extend({},m.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};Y(m.defaults);m.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null, -sType:null,sWidth:null};Y(m.defaults.column);m.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[], -aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null, -searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:k,oAjaxData:k,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[], -fnRecordsTotal:function(){return"ssp"==y(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==y(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null, -aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};m.ext=x={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:m.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:m.version};h.extend(x,{afnFiltering:x.search,aTypes:x.type.detect,ofnSearch:x.type.search,oSort:x.type.order,afnSortData:x.order,aoFeatures:x.feature, -oApi:x.internal,oStdClasses:x.classes,oPagination:x.pager});h.extend(m.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc", -sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"", -sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var Ea="",Ea="",G=Ea+"ui-state-default",ka=Ea+"css_right ui-icon ui-icon-",Yb=Ea+"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix";h.extend(m.ext.oJUIClasses,m.ext.classes,{sPageButton:"fg-button ui-button "+G,sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:G+" sorting_asc", -sSortDesc:G+" sorting_desc",sSortable:G+" sorting",sSortableAsc:G+" sorting_asc_disabled",sSortableDesc:G+" sorting_desc_disabled",sSortableNone:G+" sorting_disabled",sSortJUIAsc:ka+"triangle-1-n",sSortJUIDesc:ka+"triangle-1-s",sSortJUI:ka+"carat-2-n-s",sSortJUIAscAllowed:ka+"carat-1-n",sSortJUIDescAllowed:ka+"carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead "+G,sScrollFoot:"dataTables_scrollFoot "+G,sHeaderTH:G,sFooterTH:G,sJUIHeader:Yb+ -" ui-corner-tl ui-corner-tr",sJUIFooter:Yb+" ui-corner-bl ui-corner-br"});var Nb=m.ext.pager;h.extend(Nb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(a,b){return[ia(a,b)]},simple_numbers:function(a,b){return["previous",ia(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ia(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ia(a,b),"last"]},_numbers:ia,numbers_length:7});h.extend(!0,m.ext.renderer, -{pageButton:{_:function(a,b,c,d,e,f){var g=a.oClasses,j=a.oLanguage.oPaginate,i=a.oLanguage.oAria.paginate||{},m,l,p=0,r=function(b,d){var k,t,u,s,v=function(b){Va(a,b.data.action,true)};k=0;for(t=d.length;k<t;k++){s=d[k];if(h.isArray(s)){u=h("<"+(s.DT_el||"div")+"/>").appendTo(b);r(u,s)}else{m=null;l="";switch(s){case "ellipsis":b.append('<span class="ellipsis">…</span>');break;case "first":m=j.sFirst;l=s+(e>0?"":" "+g.sPageButtonDisabled);break;case "previous":m=j.sPrevious;l=s+(e>0?"":" "+ -g.sPageButtonDisabled);break;case "next":m=j.sNext;l=s+(e<f-1?"":" "+g.sPageButtonDisabled);break;case "last":m=j.sLast;l=s+(e<f-1?"":" "+g.sPageButtonDisabled);break;default:m=s+1;l=e===s?g.sPageButtonActive:""}if(m!==null){u=h("<a>",{"class":g.sPageButton+" "+l,"aria-controls":a.sTableId,"aria-label":i[s],"data-dt-idx":p,tabindex:a.iTabIndex,id:c===0&&typeof s==="string"?a.sTableId+"_"+s:null}).html(m).appendTo(b);Ya(u,{action:s},v);p++}}}},t;try{t=h(b).find(H.activeElement).data("dt-idx")}catch(u){}r(h(b).empty(), -d);t!==k&&h(b).find("[data-dt-idx="+t+"]").focus()}}});h.extend(m.ext.type.detect,[function(a,b){var c=b.oLanguage.sDecimal;return ab(a,c)?"num"+c:null},function(a){if(a&&!(a instanceof Date)&&!cc.test(a))return null;var b=Date.parse(a);return null!==b&&!isNaN(b)||M(a)?"date":null},function(a,b){var c=b.oLanguage.sDecimal;return ab(a,c,!0)?"num-fmt"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Sb(a,c)?"html-num"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Sb(a,c,!0)?"html-num-fmt"+ -c:null},function(a){return M(a)||"string"===typeof a&&-1!==a.indexOf("<")?"html":null}]);h.extend(m.ext.type.search,{html:function(a){return M(a)?a:"string"===typeof a?a.replace(Pb," ").replace(Ca,""):""},string:function(a){return M(a)?a:"string"===typeof a?a.replace(Pb," "):a}});var Ba=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Rb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};h.extend(x.type.order,{"date-pre":function(a){return Date.parse(a)||-Infinity}, -"html-pre":function(a){return M(a)?"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return M(a)?"":"string"===typeof a?a.toLowerCase():!a.toString?"":a.toString()},"string-asc":function(a,b){return a<b?-1:a>b?1:0},"string-desc":function(a,b){return a<b?1:a>b?-1:0}});fb("");h.extend(!0,m.ext.renderer,{header:{_:function(a,b,c,d){h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass(h[e]== -"asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass)}})},jqueryui:function(a,b,c,d){h("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass);b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+ -d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass(h[e]=="asc"?d.sSortJUIAsc:h[e]=="desc"?d.sSortJUIDesc:c.sSortingClassJUI)}})}}});var Zb=function(a){return"string"===typeof a?a.replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""):a};m.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return Zb(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2): -"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+f+(e||"")}}},text:function(){return{display:Zb}}};h.extend(m.ext.internal,{_fnExternApiFunc:Ob,_fnBuildAjax:ua,_fnAjaxUpdate:nb,_fnAjaxParameters:wb,_fnAjaxUpdateDraw:xb,_fnAjaxDataSrc:va,_fnAddColumn:Ga,_fnColumnOptions:la,_fnAdjustColumnSizing:Z,_fnVisibleToColumnIndex:$,_fnColumnIndexToVisible:aa,_fnVisbleColumns:ba,_fnGetColumns:na,_fnColumnTypes:Ia,_fnApplyColumnDefs:kb,_fnHungarianMap:Y,_fnCamelToHungarian:J,_fnLanguageCompat:Fa, -_fnBrowserDetect:ib,_fnAddData:N,_fnAddTr:oa,_fnNodeToDataIndex:function(a,b){return b._DT_RowIndex!==k?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return h.inArray(c,a.aoData[b].anCells)},_fnGetCellData:B,_fnSetCellData:lb,_fnSplitObjNotation:La,_fnGetObjectDataFn:R,_fnSetObjectDataFn:S,_fnGetDataMaster:Ma,_fnClearTable:pa,_fnDeleteIndex:qa,_fnInvalidate:da,_fnGetRowElements:Ka,_fnCreateTr:Ja,_fnBuildHead:mb,_fnDrawHead:fa,_fnDraw:O,_fnReDraw:T,_fnAddOptionsHtml:pb,_fnDetectHeader:ea, -_fnGetUniqueThs:ta,_fnFeatureHtmlFilter:rb,_fnFilterComplete:ga,_fnFilterCustom:Ab,_fnFilterColumn:zb,_fnFilter:yb,_fnFilterCreateSearch:Ra,_fnEscapeRegex:Sa,_fnFilterData:Bb,_fnFeatureHtmlInfo:ub,_fnUpdateInfo:Eb,_fnInfoMacros:Fb,_fnInitialise:ha,_fnInitComplete:wa,_fnLengthChange:Ta,_fnFeatureHtmlLength:qb,_fnFeatureHtmlPaginate:vb,_fnPageChange:Va,_fnFeatureHtmlProcessing:sb,_fnProcessingDisplay:C,_fnFeatureHtmlTable:tb,_fnScrollDraw:ma,_fnApplyToChildren:I,_fnCalculateColumnWidths:Ha,_fnThrottle:Qa, -_fnConvertToWidth:Gb,_fnGetWidestNode:Hb,_fnGetMaxLenString:Ib,_fnStringToCss:v,_fnSortFlatten:W,_fnSort:ob,_fnSortAria:Kb,_fnSortListener:Xa,_fnSortAttachListener:Oa,_fnSortingClasses:ya,_fnSortData:Jb,_fnSaveState:za,_fnLoadState:Lb,_fnSettingsFromNode:Aa,_fnLog:K,_fnMap:F,_fnBindAction:Ya,_fnCallbackReg:z,_fnCallbackFire:s,_fnLengthOverflow:Ua,_fnRenderer:Pa,_fnDataSource:y,_fnRowAttributes:Na,_fnCalculateEnd:function(){}});h.fn.dataTable=m;m.$=h;h.fn.dataTableSettings=m.settings;h.fn.dataTableExt= -m.ext;h.fn.DataTable=function(a){return h(this).dataTable(a).api()};h.each(m,function(a,b){h.fn.DataTable[a]=b});return h.fn.dataTable}); - /*! Quickfit */ !function(a){var b,c,d,e;e="quickfit",d={min:8,max:12,tolerance:.02,truncate:!1,width:null,sampleNumberOfLetters:10,sampleFontSize:12},c=function(){function c(b){this.options=b,this.item=a('<span id="meassure"></span>'),this.item.css({position:"absolute",left:"-1000px",top:"-1000px","font-size":this.options.sampleFontSize+"px"}),a("body").append(this.item),this.meassures={}}var b=null;return c.instance=function(a){return b||(b=new c(a)),b},c.prototype.getMeassure=function(a){var b;return b=this.meassures[a],b||(b=this.setMeassure(a)),b},c.prototype.setMeassure=function(a){var b,c,d,e,f;for(e="",d=" "===a?" ":a,c=0,f=this.options.sampleNumberOfLetters-1;0<=f?c<=f:c>=f;0<=f?c++:c--)e+=d;return this.item.html(e),b=this.item.width()/this.options.sampleNumberOfLetters/this.options.sampleFontSize,this.meassures[a]=b,b},c}(),b=function(){function b(b,f){this.$element=b,this.options=a.extend({},d,f),this.$element=a(this.$element),this._defaults=d,this._name=e,this.quickfitHelper=c.instance(this.options)}return b.prototype.fit=function(){var a;return this.options.width||(a=this.$element.width(),this.options.width=a-this.options.tolerance*a),(this.text=this.$element.attr("data-quickfit"))?this.previouslyTruncated=!0:this.text=this.$element.text(),this.calculateFontSize(),this.options.truncate&&this.truncate(),{$element:this.$element,size:this.fontSize}},b.prototype.calculateFontSize=function(){var a,b,c;for(b=0,c=0;c<this.text.length;++c)a=this.text.charAt(c),b+=this.quickfitHelper.getMeassure(a);return this.targetFontSize=parseInt(this.options.width/b),this.fontSize=Math.max(this.options.min,Math.min(this.options.max,this.targetFontSize))},b.prototype.truncate=function(){var a,b,c,d,e;if(this.fontSize>this.targetFontSize){for(d="",e=3*this.quickfitHelper.getMeassure(".")*this.fontSize,a=0;e<this.options.width&&a<this.text.length;)c=this.text[a++],b&&(d+=b),e+=this.fontSize*this.quickfitHelper.getMeassure(c),b=c;return d.length+1===this.text.length?d=this.text:d+="...",this.textWasTruncated=!0,this.$element.attr("data-quickfit",this.text).html(d)}if(this.previouslyTruncated)return this.$element.html(this.text)},b}(),a.fn.quickfit=function(a){for(var c=[],d=this.each(function(){var d=new b(this,a).fit();return c.push(d),d.$element}),e=0;e<c.length;e++){var f=c[e];f.$element.css({fontSize:f.size+"px"})}return d}}(jQuery,window); @@ -207,101 +39,8 @@ return position;};ModuloColumns.prototype._getContainerSize=function(){return{height:Math.max.apply(Math,this.columnHeights)}};} if('function'===typeof define&&define.amd){define(['isotope/js/layout-mode'],moduloColumnsLayoutModeDefinition)}else{moduloColumnsLayoutModeDefinition((window.Isotope.LayoutMode));}})(window); -//! moment.js -//! version : 2.8.4 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com -(function(a){function b(a,b,c){switch(arguments.length){case 2:return null!=a?a:b;case 3:return null!=a?a:null!=b?b:c;default:throw new Error("Implement me")}}function c(a,b){return zb.call(a,b)}function d(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function e(a){tb.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+a)}function f(a,b){var c=!0;return m(function(){return c&&(e(a),c=!1),b.apply(this,arguments)},b)}function g(a,b){qc[a]||(e(b),qc[a]=!0)}function h(a,b){return function(c){return p(a.call(this,c),b)}}function i(a,b){return function(c){return this.localeData().ordinal(a.call(this,c),b)}}function j(){}function k(a,b){b!==!1&&F(a),n(this,a),this._d=new Date(+a._d)}function l(a){var b=y(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._milliseconds=+k+1e3*j+6e4*i+36e5*h,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=tb.localeData(),this._bubble()}function m(a,b){for(var d in b)c(b,d)&&(a[d]=b[d]);return c(b,"toString")&&(a.toString=b.toString),c(b,"valueOf")&&(a.valueOf=b.valueOf),a}function n(a,b){var c,d,e;if("undefined"!=typeof b._isAMomentObject&&(a._isAMomentObject=b._isAMomentObject),"undefined"!=typeof b._i&&(a._i=b._i),"undefined"!=typeof b._f&&(a._f=b._f),"undefined"!=typeof b._l&&(a._l=b._l),"undefined"!=typeof b._strict&&(a._strict=b._strict),"undefined"!=typeof b._tzm&&(a._tzm=b._tzm),"undefined"!=typeof b._isUTC&&(a._isUTC=b._isUTC),"undefined"!=typeof b._offset&&(a._offset=b._offset),"undefined"!=typeof b._pf&&(a._pf=b._pf),"undefined"!=typeof b._locale&&(a._locale=b._locale),Ib.length>0)for(c in Ib)d=Ib[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function o(a){return 0>a?Math.ceil(a):Math.floor(a)}function p(a,b,c){for(var d=""+Math.abs(a),e=a>=0;d.length<b;)d="0"+d;return(e?c?"+":"":"-")+d}function q(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function r(a,b){var c;return b=K(b,a),a.isBefore(b)?c=q(a,b):(c=q(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c}function s(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(g(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period)."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=tb.duration(c,d),t(this,e,a),this}}function t(a,b,c,d){var e=b._milliseconds,f=b._days,g=b._months;d=null==d?!0:d,e&&a._d.setTime(+a._d+e*c),f&&nb(a,"Date",mb(a,"Date")+f*c),g&&lb(a,mb(a,"Month")+g*c),d&&tb.updateOffset(a,f||g)}function u(a){return"[object Array]"===Object.prototype.toString.call(a)}function v(a){return"[object Date]"===Object.prototype.toString.call(a)||a instanceof Date}function w(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&A(a[d])!==A(b[d]))&&g++;return g+f}function x(a){if(a){var b=a.toLowerCase().replace(/(.)s$/,"$1");a=jc[a]||kc[b]||b}return a}function y(a){var b,d,e={};for(d in a)c(a,d)&&(b=x(d),b&&(e[b]=a[d]));return e}function z(b){var c,d;if(0===b.indexOf("week"))c=7,d="day";else{if(0!==b.indexOf("month"))return;c=12,d="month"}tb[b]=function(e,f){var g,h,i=tb._locale[b],j=[];if("number"==typeof e&&(f=e,e=a),h=function(a){var b=tb().utc().set(d,a);return i.call(tb._locale,b,e||"")},null!=f)return h(f);for(g=0;c>g;g++)j.push(h(g));return j}}function A(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function B(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function C(a,b,c){return hb(tb([a,11,31+b-c]),b,c).week}function D(a){return E(a)?366:365}function E(a){return a%4===0&&a%100!==0||a%400===0}function F(a){var b;a._a&&-2===a._pf.overflow&&(b=a._a[Bb]<0||a._a[Bb]>11?Bb:a._a[Cb]<1||a._a[Cb]>B(a._a[Ab],a._a[Bb])?Cb:a._a[Db]<0||a._a[Db]>24||24===a._a[Db]&&(0!==a._a[Eb]||0!==a._a[Fb]||0!==a._a[Gb])?Db:a._a[Eb]<0||a._a[Eb]>59?Eb:a._a[Fb]<0||a._a[Fb]>59?Fb:a._a[Gb]<0||a._a[Gb]>999?Gb:-1,a._pf._overflowDayOfYear&&(Ab>b||b>Cb)&&(b=Cb),a._pf.overflow=b)}function G(b){return null==b._isValid&&(b._isValid=!isNaN(b._d.getTime())&&b._pf.overflow<0&&!b._pf.empty&&!b._pf.invalidMonth&&!b._pf.nullInput&&!b._pf.invalidFormat&&!b._pf.userInvalidated,b._strict&&(b._isValid=b._isValid&&0===b._pf.charsLeftOver&&0===b._pf.unusedTokens.length&&b._pf.bigHour===a)),b._isValid}function H(a){return a?a.toLowerCase().replace("_","-"):a}function I(a){for(var b,c,d,e,f=0;f<a.length;){for(e=H(a[f]).split("-"),b=e.length,c=H(a[f+1]),c=c?c.split("-"):null;b>0;){if(d=J(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&w(e,c,!0)>=b-1)break;b--}f++}return null}function J(a){var b=null;if(!Hb[a]&&Jb)try{b=tb.locale(),require("./locale/"+a),tb.locale(b)}catch(c){}return Hb[a]}function K(a,b){var c,d;return b._isUTC?(c=b.clone(),d=(tb.isMoment(a)||v(a)?+a:+tb(a))-+c,c._d.setTime(+c._d+d),tb.updateOffset(c,!1),c):tb(a).local()}function L(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function M(a){var b,c,d=a.match(Nb);for(b=0,c=d.length;c>b;b++)d[b]=pc[d[b]]?pc[d[b]]:L(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function N(a,b){return a.isValid()?(b=O(b,a.localeData()),lc[b]||(lc[b]=M(b)),lc[b](a)):a.localeData().invalidDate()}function O(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Ob.lastIndex=0;d>=0&&Ob.test(a);)a=a.replace(Ob,c),Ob.lastIndex=0,d-=1;return a}function P(a,b){var c,d=b._strict;switch(a){case"Q":return Zb;case"DDDD":return _b;case"YYYY":case"GGGG":case"gggg":return d?ac:Rb;case"Y":case"G":case"g":return cc;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return d?bc:Sb;case"S":if(d)return Zb;case"SS":if(d)return $b;case"SSS":if(d)return _b;case"DDD":return Qb;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Ub;case"a":case"A":return b._locale._meridiemParse;case"x":return Xb;case"X":return Yb;case"Z":case"ZZ":return Vb;case"T":return Wb;case"SSSS":return Tb;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return d?$b:Pb;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Pb;case"Do":return d?b._locale._ordinalParse:b._locale._ordinalParseLenient;default:return c=new RegExp(Y(X(a.replace("\\","")),"i"))}}function Q(a){a=a||"";var b=a.match(Vb)||[],c=b[b.length-1]||[],d=(c+"").match(hc)||["-",0,0],e=+(60*d[1])+A(d[2]);return"+"===d[0]?-e:e}function R(a,b,c){var d,e=c._a;switch(a){case"Q":null!=b&&(e[Bb]=3*(A(b)-1));break;case"M":case"MM":null!=b&&(e[Bb]=A(b)-1);break;case"MMM":case"MMMM":d=c._locale.monthsParse(b,a,c._strict),null!=d?e[Bb]=d:c._pf.invalidMonth=b;break;case"D":case"DD":null!=b&&(e[Cb]=A(b));break;case"Do":null!=b&&(e[Cb]=A(parseInt(b.match(/\d{1,2}/)[0],10)));break;case"DDD":case"DDDD":null!=b&&(c._dayOfYear=A(b));break;case"YY":e[Ab]=tb.parseTwoDigitYear(b);break;case"YYYY":case"YYYYY":case"YYYYYY":e[Ab]=A(b);break;case"a":case"A":c._isPm=c._locale.isPM(b);break;case"h":case"hh":c._pf.bigHour=!0;case"H":case"HH":e[Db]=A(b);break;case"m":case"mm":e[Eb]=A(b);break;case"s":case"ss":e[Fb]=A(b);break;case"S":case"SS":case"SSS":case"SSSS":e[Gb]=A(1e3*("0."+b));break;case"x":c._d=new Date(A(b));break;case"X":c._d=new Date(1e3*parseFloat(b));break;case"Z":case"ZZ":c._useUTC=!0,c._tzm=Q(b);break;case"dd":case"ddd":case"dddd":d=c._locale.weekdaysParse(b),null!=d?(c._w=c._w||{},c._w.d=d):c._pf.invalidWeekday=b;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":a=a.substr(0,1);case"gggg":case"GGGG":case"GGGGG":a=a.substr(0,2),b&&(c._w=c._w||{},c._w[a]=A(b));break;case"gg":case"GG":c._w=c._w||{},c._w[a]=tb.parseTwoDigitYear(b)}}function S(a){var c,d,e,f,g,h,i;c=a._w,null!=c.GG||null!=c.W||null!=c.E?(g=1,h=4,d=b(c.GG,a._a[Ab],hb(tb(),1,4).year),e=b(c.W,1),f=b(c.E,1)):(g=a._locale._week.dow,h=a._locale._week.doy,d=b(c.gg,a._a[Ab],hb(tb(),g,h).year),e=b(c.w,1),null!=c.d?(f=c.d,g>f&&++e):f=null!=c.e?c.e+g:g),i=ib(d,e,f,h,g),a._a[Ab]=i.year,a._dayOfYear=i.dayOfYear}function T(a){var c,d,e,f,g=[];if(!a._d){for(e=V(a),a._w&&null==a._a[Cb]&&null==a._a[Bb]&&S(a),a._dayOfYear&&(f=b(a._a[Ab],e[Ab]),a._dayOfYear>D(f)&&(a._pf._overflowDayOfYear=!0),d=db(f,0,a._dayOfYear),a._a[Bb]=d.getUTCMonth(),a._a[Cb]=d.getUTCDate()),c=0;3>c&&null==a._a[c];++c)a._a[c]=g[c]=e[c];for(;7>c;c++)a._a[c]=g[c]=null==a._a[c]?2===c?1:0:a._a[c];24===a._a[Db]&&0===a._a[Eb]&&0===a._a[Fb]&&0===a._a[Gb]&&(a._nextDay=!0,a._a[Db]=0),a._d=(a._useUTC?db:cb).apply(null,g),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()+a._tzm),a._nextDay&&(a._a[Db]=24)}}function U(a){var b;a._d||(b=y(a._i),a._a=[b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],T(a))}function V(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function W(b){if(b._f===tb.ISO_8601)return void $(b);b._a=[],b._pf.empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=O(b._f,b._locale).match(Nb)||[],c=0;c<e.length;c++)f=e[c],d=(h.match(P(f,b))||[])[0],d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&b._pf.unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),pc[f]?(d?b._pf.empty=!1:b._pf.unusedTokens.push(f),R(f,d,b)):b._strict&&!d&&b._pf.unusedTokens.push(f);b._pf.charsLeftOver=i-j,h.length>0&&b._pf.unusedInput.push(h),b._pf.bigHour===!0&&b._a[Db]<=12&&(b._pf.bigHour=a),b._isPm&&b._a[Db]<12&&(b._a[Db]+=12),b._isPm===!1&&12===b._a[Db]&&(b._a[Db]=0),T(b),F(b)}function X(a){return a.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e})}function Y(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Z(a){var b,c,e,f,g;if(0===a._f.length)return a._pf.invalidFormat=!0,void(a._d=new Date(0/0));for(f=0;f<a._f.length;f++)g=0,b=n({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._pf=d(),b._f=a._f[f],W(b),G(b)&&(g+=b._pf.charsLeftOver,g+=10*b._pf.unusedTokens.length,b._pf.score=g,(null==e||e>g)&&(e=g,c=b));m(a,c||b)}function $(a){var b,c,d=a._i,e=dc.exec(d);if(e){for(a._pf.iso=!0,b=0,c=fc.length;c>b;b++)if(fc[b][1].exec(d)){a._f=fc[b][0]+(e[6]||" ");break}for(b=0,c=gc.length;c>b;b++)if(gc[b][1].exec(d)){a._f+=gc[b][0];break}d.match(Vb)&&(a._f+="Z"),W(a)}else a._isValid=!1}function _(a){$(a),a._isValid===!1&&(delete a._isValid,tb.createFromInputFallback(a))}function ab(a,b){var c,d=[];for(c=0;c<a.length;++c)d.push(b(a[c],c));return d}function bb(b){var c,d=b._i;d===a?b._d=new Date:v(d)?b._d=new Date(+d):null!==(c=Kb.exec(d))?b._d=new Date(+c[1]):"string"==typeof d?_(b):u(d)?(b._a=ab(d.slice(0),function(a){return parseInt(a,10)}),T(b)):"object"==typeof d?U(b):"number"==typeof d?b._d=new Date(d):tb.createFromInputFallback(b)}function cb(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function db(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function eb(a,b){if("string"==typeof a)if(isNaN(a)){if(a=b.weekdaysParse(a),"number"!=typeof a)return null}else a=parseInt(a,10);return a}function fb(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function gb(a,b,c){var d=tb.duration(a).abs(),e=yb(d.as("s")),f=yb(d.as("m")),g=yb(d.as("h")),h=yb(d.as("d")),i=yb(d.as("M")),j=yb(d.as("y")),k=e<mc.s&&["s",e]||1===f&&["m"]||f<mc.m&&["mm",f]||1===g&&["h"]||g<mc.h&&["hh",g]||1===h&&["d"]||h<mc.d&&["dd",h]||1===i&&["M"]||i<mc.M&&["MM",i]||1===j&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,fb.apply({},k)}function hb(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=tb(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function ib(a,b,c,d,e){var f,g,h=db(a,0,1).getUTCDay();return h=0===h?7:h,c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:D(a-1)+g}}function jb(b){var c,d=b._i,e=b._f;return b._locale=b._locale||tb.localeData(b._l),null===d||e===a&&""===d?tb.invalid({nullInput:!0}):("string"==typeof d&&(b._i=d=b._locale.preparse(d)),tb.isMoment(d)?new k(d,!0):(e?u(e)?Z(b):W(b):bb(b),c=new k(b),c._nextDay&&(c.add(1,"d"),c._nextDay=a),c))}function kb(a,b){var c,d;if(1===b.length&&u(b[0])&&(b=b[0]),!b.length)return tb();for(c=b[0],d=1;d<b.length;++d)b[d][a](c)&&(c=b[d]);return c}function lb(a,b){var c;return"string"==typeof b&&(b=a.localeData().monthsParse(b),"number"!=typeof b)?a:(c=Math.min(a.date(),B(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a)}function mb(a,b){return a._d["get"+(a._isUTC?"UTC":"")+b]()}function nb(a,b,c){return"Month"===b?lb(a,c):a._d["set"+(a._isUTC?"UTC":"")+b](c)}function ob(a,b){return function(c){return null!=c?(nb(this,a,c),tb.updateOffset(this,b),this):mb(this,a)}}function pb(a){return 400*a/146097}function qb(a){return 146097*a/400}function rb(a){tb.duration.fn[a]=function(){return this._data[a]}}function sb(a){"undefined"==typeof ender&&(ub=xb.moment,xb.moment=a?f("Accessing Moment through the global scope is deprecated, and will be removed in an upcoming release.",tb):tb)}for(var tb,ub,vb,wb="2.8.4",xb="undefined"!=typeof global?global:this,yb=Math.round,zb=Object.prototype.hasOwnProperty,Ab=0,Bb=1,Cb=2,Db=3,Eb=4,Fb=5,Gb=6,Hb={},Ib=[],Jb="undefined"!=typeof module&&module&&module.exports,Kb=/^\/?Date\((\-?\d+)/i,Lb=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Mb=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,Nb=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g,Ob=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Pb=/\d\d?/,Qb=/\d{1,3}/,Rb=/\d{1,4}/,Sb=/[+\-]?\d{1,6}/,Tb=/\d+/,Ub=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,Vb=/Z|[\+\-]\d\d:?\d\d/gi,Wb=/T/i,Xb=/[\+\-]?\d+/,Yb=/[\+\-]?\d+(\.\d{1,3})?/,Zb=/\d/,$b=/\d\d/,_b=/\d{3}/,ac=/\d{4}/,bc=/[+-]?\d{6}/,cc=/[+-]?\d+/,dc=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ec="YYYY-MM-DDTHH:mm:ssZ",fc=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],gc=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],hc=/([\+\-]|\d\d)/gi,ic=("Date|Hours|Minutes|Seconds|Milliseconds".split("|"),{Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6}),jc={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",D:"date",w:"week",W:"isoWeek",M:"month",Q:"quarter",y:"year",DDD:"dayOfYear",e:"weekday",E:"isoWeekday",gg:"weekYear",GG:"isoWeekYear"},kc={dayofyear:"dayOfYear",isoweekday:"isoWeekday",isoweek:"isoWeek",weekyear:"weekYear",isoweekyear:"isoWeekYear"},lc={},mc={s:45,m:45,h:22,d:26,M:11},nc="DDD w W M D d".split(" "),oc="M D H h m s w W".split(" "),pc={M:function(){return this.month()+1},MMM:function(a){return this.localeData().monthsShort(this,a)},MMMM:function(a){return this.localeData().months(this,a)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(a){return this.localeData().weekdaysMin(this,a)},ddd:function(a){return this.localeData().weekdaysShort(this,a)},dddd:function(a){return this.localeData().weekdays(this,a)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return p(this.year()%100,2)},YYYY:function(){return p(this.year(),4)},YYYYY:function(){return p(this.year(),5)},YYYYYY:function(){var a=this.year(),b=a>=0?"+":"-";return b+p(Math.abs(a),6)},gg:function(){return p(this.weekYear()%100,2)},gggg:function(){return p(this.weekYear(),4)},ggggg:function(){return p(this.weekYear(),5)},GG:function(){return p(this.isoWeekYear()%100,2)},GGGG:function(){return p(this.isoWeekYear(),4)},GGGGG:function(){return p(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return A(this.milliseconds()/100)},SS:function(){return p(A(this.milliseconds()/10),2)},SSS:function(){return p(this.milliseconds(),3)},SSSS:function(){return p(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+p(A(a/60),2)+":"+p(A(a)%60,2)},ZZ:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+p(A(a/60),2)+p(A(a)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},x:function(){return this.valueOf()},X:function(){return this.unix()},Q:function(){return this.quarter()}},qc={},rc=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];nc.length;)vb=nc.pop(),pc[vb+"o"]=i(pc[vb],vb);for(;oc.length;)vb=oc.pop(),pc[vb+vb]=h(pc[vb],2);pc.DDDD=h(pc.DDD,3),m(j.prototype,{set:function(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(a){return this._months[a.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(a){return this._monthsShort[a.month()]},monthsParse:function(a,b,c){var d,e,f;for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;12>d;d++){if(e=tb.utc([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(a){return this._weekdays[a.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(a){return this._weekdaysShort[a.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(a){return this._weekdaysMin[a.day()]},weekdaysParse:function(a){var b,c,d;for(this._weekdaysParse||(this._weekdaysParse=[]),b=0;7>b;b++)if(this._weekdaysParse[b]||(c=tb([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b},_longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b},isPM:function(a){return"p"===(a+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(a,b,c){var d=this._calendar[a];return"function"==typeof d?d.apply(b,[c]):d},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)},pastFuture:function(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)},ordinal:function(a){return this._ordinal.replace("%d",a)},_ordinal:"%d",_ordinalParse:/\d{1,2}/,preparse:function(a){return a},postformat:function(a){return a},week:function(a){return hb(a,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),tb=function(b,c,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._i=b,g._f=c,g._l=e,g._strict=f,g._isUTC=!1,g._pf=d(),jb(g)},tb.suppressDeprecationWarnings=!1,tb.createFromInputFallback=f("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),tb.min=function(){var a=[].slice.call(arguments,0);return kb("isBefore",a)},tb.max=function(){var a=[].slice.call(arguments,0);return kb("isAfter",a)},tb.utc=function(b,c,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._useUTC=!0,g._isUTC=!0,g._l=e,g._i=b,g._f=c,g._strict=f,g._pf=d(),jb(g).utc()},tb.unix=function(a){return tb(1e3*a)},tb.duration=function(a,b){var d,e,f,g,h=a,i=null;return tb.isDuration(a)?h={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(h={},b?h[b]=a:h.milliseconds=a):(i=Lb.exec(a))?(d="-"===i[1]?-1:1,h={y:0,d:A(i[Cb])*d,h:A(i[Db])*d,m:A(i[Eb])*d,s:A(i[Fb])*d,ms:A(i[Gb])*d}):(i=Mb.exec(a))?(d="-"===i[1]?-1:1,f=function(a){var b=a&&parseFloat(a.replace(",","."));return(isNaN(b)?0:b)*d},h={y:f(i[2]),M:f(i[3]),d:f(i[4]),h:f(i[5]),m:f(i[6]),s:f(i[7]),w:f(i[8])}):"object"==typeof h&&("from"in h||"to"in h)&&(g=r(tb(h.from),tb(h.to)),h={},h.ms=g.milliseconds,h.M=g.months),e=new l(h),tb.isDuration(a)&&c(a,"_locale")&&(e._locale=a._locale),e},tb.version=wb,tb.defaultFormat=ec,tb.ISO_8601=function(){},tb.momentProperties=Ib,tb.updateOffset=function(){},tb.relativeTimeThreshold=function(b,c){return mc[b]===a?!1:c===a?mc[b]:(mc[b]=c,!0)},tb.lang=f("moment.lang is deprecated. Use moment.locale instead.",function(a,b){return tb.locale(a,b)}),tb.locale=function(a,b){var c;return a&&(c="undefined"!=typeof b?tb.defineLocale(a,b):tb.localeData(a),c&&(tb.duration._locale=tb._locale=c)),tb._locale._abbr},tb.defineLocale=function(a,b){return null!==b?(b.abbr=a,Hb[a]||(Hb[a]=new j),Hb[a].set(b),tb.locale(a),Hb[a]):(delete Hb[a],null)},tb.langData=f("moment.langData is deprecated. Use moment.localeData instead.",function(a){return tb.localeData(a)}),tb.localeData=function(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return tb._locale;if(!u(a)){if(b=J(a))return b;a=[a]}return I(a)},tb.isMoment=function(a){return a instanceof k||null!=a&&c(a,"_isAMomentObject")},tb.isDuration=function(a){return a instanceof l};for(vb=rc.length-1;vb>=0;--vb)z(rc[vb]);tb.normalizeUnits=function(a){return x(a)},tb.invalid=function(a){var b=tb.utc(0/0);return null!=a?m(b._pf,a):b._pf.userInvalidated=!0,b},tb.parseZone=function(){return tb.apply(null,arguments).parseZone()},tb.parseTwoDigitYear=function(a){return A(a)+(A(a)>68?1900:2e3)},m(tb.fn=k.prototype,{clone:function(){return tb(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var a=tb(this).utc();return 0<a.year()&&a.year()<=9999?"function"==typeof Date.prototype.toISOString?this.toDate().toISOString():N(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):N(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var a=this;return[a.year(),a.month(),a.date(),a.hours(),a.minutes(),a.seconds(),a.milliseconds()]},isValid:function(){return G(this)},isDSTShifted:function(){return this._a?this.isValid()&&w(this._a,(this._isUTC?tb.utc(this._a):tb(this._a)).toArray())>0:!1},parsingFlags:function(){return m({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(a){return this.zone(0,a)},local:function(a){return this._isUTC&&(this.zone(0,a),this._isUTC=!1,a&&this.add(this._dateTzOffset(),"m")),this},format:function(a){var b=N(this,a||tb.defaultFormat);return this.localeData().postformat(b)},add:s(1,"add"),subtract:s(-1,"subtract"),diff:function(a,b,c){var d,e,f,g=K(a,this),h=6e4*(this.zone()-g.zone());return b=x(b),"year"===b||"month"===b?(d=432e5*(this.daysInMonth()+g.daysInMonth()),e=12*(this.year()-g.year())+(this.month()-g.month()),f=this-tb(this).startOf("month")-(g-tb(g).startOf("month")),f-=6e4*(this.zone()-tb(this).startOf("month").zone()-(g.zone()-tb(g).startOf("month").zone())),e+=f/d,"year"===b&&(e/=12)):(d=this-g,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-h)/864e5:"week"===b?(d-h)/6048e5:d),c?e:o(e)},from:function(a,b){return tb.duration({to:this,from:a}).locale(this.locale()).humanize(!b)},fromNow:function(a){return this.from(tb(),a)},calendar:function(a){var b=a||tb(),c=K(b,this).startOf("day"),d=this.diff(c,"days",!0),e=-6>d?"sameElse":-1>d?"lastWeek":0>d?"lastDay":1>d?"sameDay":2>d?"nextDay":7>d?"nextWeek":"sameElse";return this.format(this.localeData().calendar(e,this,tb(b)))},isLeapYear:function(){return E(this.year())},isDST:function(){return this.zone()<this.clone().month(0).zone()||this.zone()<this.clone().month(5).zone()},day:function(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=eb(a,this.localeData()),this.add(a-b,"d")):b},month:ob("Month",!0),startOf:function(a){switch(a=x(a)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===a?this.weekday(0):"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this},endOf:function(b){return b=x(b),b===a||"millisecond"===b?this:this.startOf(b).add(1,"isoWeek"===b?"week":b).subtract(1,"ms")},isAfter:function(a,b){var c;return b=x("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=tb.isMoment(a)?a:tb(a),+this>+a):(c=tb.isMoment(a)?+a:+tb(a),c<+this.clone().startOf(b))},isBefore:function(a,b){var c;return b=x("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=tb.isMoment(a)?a:tb(a),+a>+this):(c=tb.isMoment(a)?+a:+tb(a),+this.clone().endOf(b)<c)},isSame:function(a,b){var c;return b=x(b||"millisecond"),"millisecond"===b?(a=tb.isMoment(a)?a:tb(a),+this===+a):(c=+tb(a),+this.clone().startOf(b)<=c&&c<=+this.clone().endOf(b))},min:f("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(a){return a=tb.apply(null,arguments),this>a?this:a}),max:f("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(a){return a=tb.apply(null,arguments),a>this?this:a}),zone:function(a,b){var c,d=this._offset||0;return null==a?this._isUTC?d:this._dateTzOffset():("string"==typeof a&&(a=Q(a)),Math.abs(a)<16&&(a=60*a),!this._isUTC&&b&&(c=this._dateTzOffset()),this._offset=a,this._isUTC=!0,null!=c&&this.subtract(c,"m"),d!==a&&(!b||this._changeInProgress?t(this,tb.duration(d-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,tb.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(a){return a=a?tb(a).zone():0,(this.zone()-a)%60===0},daysInMonth:function(){return B(this.year(),this.month())},dayOfYear:function(a){var b=yb((tb(this).startOf("day")-tb(this).startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")},quarter:function(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)},weekYear:function(a){var b=hb(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==a?b:this.add(a-b,"y")},isoWeekYear:function(a){var b=hb(this,1,4).year;return null==a?b:this.add(a-b,"y")},week:function(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")},isoWeek:function(a){var b=hb(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")},weekday:function(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")},isoWeekday:function(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)},isoWeeksInYear:function(){return C(this.year(),1,4)},weeksInYear:function(){var a=this.localeData()._week;return C(this.year(),a.dow,a.doy)},get:function(a){return a=x(a),this[a]()},set:function(a,b){return a=x(a),"function"==typeof this[a]&&this[a](b),this},locale:function(b){var c;return b===a?this._locale._abbr:(c=tb.localeData(b),null!=c&&(this._locale=c),this)},lang:f("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(b){return b===a?this.localeData():this.locale(b)}),localeData:function(){return this._locale},_dateTzOffset:function(){return 15*Math.round(this._d.getTimezoneOffset()/15)}}),tb.fn.millisecond=tb.fn.milliseconds=ob("Milliseconds",!1),tb.fn.second=tb.fn.seconds=ob("Seconds",!1),tb.fn.minute=tb.fn.minutes=ob("Minutes",!1),tb.fn.hour=tb.fn.hours=ob("Hours",!0),tb.fn.date=ob("Date",!0),tb.fn.dates=f("dates accessor is deprecated. Use date instead.",ob("Date",!0)),tb.fn.year=ob("FullYear",!0),tb.fn.years=f("years accessor is deprecated. Use year instead.",ob("FullYear",!0)),tb.fn.days=tb.fn.day,tb.fn.months=tb.fn.month,tb.fn.weeks=tb.fn.week,tb.fn.isoWeeks=tb.fn.isoWeek,tb.fn.quarters=tb.fn.quarter,tb.fn.toJSON=tb.fn.toISOString,m(tb.duration.fn=l.prototype,{_bubble:function(){var a,b,c,d=this._milliseconds,e=this._days,f=this._months,g=this._data,h=0;g.milliseconds=d%1e3,a=o(d/1e3),g.seconds=a%60,b=o(a/60),g.minutes=b%60,c=o(b/60),g.hours=c%24,e+=o(c/24),h=o(pb(e)),e-=o(qb(h)),f+=o(e/30),e%=30,h+=o(f/12),f%=12,g.days=e,g.months=f,g.years=h},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return o(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*A(this._months/12)},humanize:function(a){var b=gb(this,!a,this.localeData());return a&&(b=this.localeData().pastFuture(+this,b)),this.localeData().postformat(b)},add:function(a,b){var c=tb.duration(a,b);return this._milliseconds+=c._milliseconds,this._days+=c._days,this._months+=c._months,this._bubble(),this},subtract:function(a,b){var c=tb.duration(a,b);return this._milliseconds-=c._milliseconds,this._days-=c._days,this._months-=c._months,this._bubble(),this},get:function(a){return a=x(a),this[a.toLowerCase()+"s"]()},as:function(a){var b,c;if(a=x(a),"month"===a||"year"===a)return b=this._days+this._milliseconds/864e5,c=this._months+12*pb(b),"month"===a?c:c/12;switch(b=this._days+Math.round(qb(this._months/12)),a){case"week":return b/7+this._milliseconds/6048e5;case"day":return b+this._milliseconds/864e5;case"hour":return 24*b+this._milliseconds/36e5;case"minute":return 24*b*60+this._milliseconds/6e4;case"second":return 24*b*60*60+this._milliseconds/1e3; -case"millisecond":return Math.floor(24*b*60*60*1e3)+this._milliseconds;default:throw new Error("Unknown unit "+a)}},lang:tb.fn.lang,locale:tb.fn.locale,toIsoString:f("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var a=Math.abs(this.years()),b=Math.abs(this.months()),c=Math.abs(this.days()),d=Math.abs(this.hours()),e=Math.abs(this.minutes()),f=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(a?a+"Y":"")+(b?b+"M":"")+(c?c+"D":"")+(d||e||f?"T":"")+(d?d+"H":"")+(e?e+"M":"")+(f?f+"S":""):"P0D"},localeData:function(){return this._locale}}),tb.duration.fn.toString=tb.duration.fn.toISOString;for(vb in ic)c(ic,vb)&&rb(vb.toLowerCase());tb.duration.fn.asMilliseconds=function(){return this.as("ms")},tb.duration.fn.asSeconds=function(){return this.as("s")},tb.duration.fn.asMinutes=function(){return this.as("m")},tb.duration.fn.asHours=function(){return this.as("h")},tb.duration.fn.asDays=function(){return this.as("d")},tb.duration.fn.asWeeks=function(){return this.as("weeks")},tb.duration.fn.asMonths=function(){return this.as("M")},tb.duration.fn.asYears=function(){return this.as("y")},tb.locale("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===A(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),Jb?module.exports=tb:"function"==typeof define&&define.amd?(define("moment",function(a,b,c){return c.config&&c.config()&&c.config().noGlobal===!0&&(xb.moment=ub),tb}),sb(!0)):sb()}).call(this); - -/** - * This plug-in for DataTables represents the ultimate option in extensibility - * for sorting date / time strings correctly. It uses - * [Moment.js](http://momentjs.com) to create automatic type detection and - * sorting plug-ins for DataTables based on a given format. This way, DataTables - * will automatically detect your temporal information and sort it correctly. - * - * For usage instructions, please see the DataTables blog - * post that [introduces it](//datatables.net/blog/2014-12-18). - * - * @name Ultimate Date / Time sorting - * @summary Sort date and time in any format using Moment.js - * @author [Allan Jardine](//datatables.net) - * @depends DataTables 1.10+, Moment.js 1.7+ - * - * @example - * $.fn.dataTable.moment( 'HH:mm MMM D, YY' ); - * $.fn.dataTable.moment( 'dddd, MMMM Do, YYYY' ); - * - * $('#example').DataTable(); - */ - -(function($) { - -$.fn.dataTable.moment = function ( format, locale ) { - var types = $.fn.dataTable.ext.type; - - // Add type detection - types.detect.unshift( function ( d ) { - return moment( d, format, locale, true ).isValid() ? - 'moment-'+format : - null; - } ); - - // Add sorting method - use an integer for the sorting - types.order[ 'moment-'+format+'-pre' ] = function ( d ) { - return moment( d, format, locale, true ).unix(); - }; -}; - -}(jQuery)); - -/*! - Responsive 2.1.0 - 2014-2016 SpryMedia Ltd - datatables.net/license -*/ -(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(l){return c(l,window,document)}):"object"===typeof exports?module.exports=function(l,k){l||(l=window);if(!k||!k.fn.dataTable)k=require("datatables.net")(l,k).$;return c(k,l,l.document)}:c(jQuery,window,document)})(function(c,l,k,p){var m=c.fn.dataTable,j=function(a,b){if(!m.versionCheck||!m.versionCheck("1.10.3"))throw"DataTables Responsive requires DataTables 1.10.3 or newer";this.s={dt:new m.Api(a),columns:[], -current:[]};this.s.dt.settings()[0].responsive||(b&&"string"===typeof b.details?b.details={type:b.details}:b&&!1===b.details?b.details={type:!1}:b&&!0===b.details&&(b.details={type:"inline"}),this.c=c.extend(!0,{},j.defaults,m.defaults.responsive,b),a.responsive=this,this._constructor())};c.extend(j.prototype,{_constructor:function(){var a=this,b=this.s.dt,d=b.settings()[0],e=c(l).width();b.settings()[0]._responsive=this;c(l).on("resize.dtr orientationchange.dtr",m.util.throttle(function(){var b= -c(l).width();b!==e&&(a._resize(),e=b)}));d.oApi._fnCallbackReg(d,"aoRowCreatedCallback",function(e){-1!==c.inArray(!1,a.s.current)&&c("td, th",e).each(function(e){e=b.column.index("toData",e);!1===a.s.current[e]&&c(this).css("display","none")})});b.on("destroy.dtr",function(){b.off(".dtr");c(b.table().body()).off(".dtr");c(l).off("resize.dtr orientationchange.dtr");c.each(a.s.current,function(b,e){!1===e&&a._setColumnVis(b,!0)})});this.c.breakpoints.sort(function(a,b){return a.width<b.width?1:a.width> -b.width?-1:0});this._classLogic();this._resizeAuto();d=this.c.details;!1!==d.type&&(a._detailsInit(),b.on("column-visibility.dtr",function(){a._classLogic();a._resizeAuto();a._resize()}),b.on("draw.dtr",function(){a._redrawChildren()}),c(b.table().node()).addClass("dtr-"+d.type));b.on("column-reorder.dtr",function(){a._classLogic();a._resizeAuto();a._resize()});b.on("column-sizing.dtr",function(){a._resizeAuto();a._resize()});b.on("init.dtr",function(){a._resizeAuto();a._resize();c.inArray(false, -a.s.current)&&b.columns.adjust()});this._resize()},_columnsVisiblity:function(a){var b=this.s.dt,d=this.s.columns,e,f,g=d.map(function(a,b){return{columnIdx:b,priority:a.priority}}).sort(function(a,b){return a.priority!==b.priority?a.priority-b.priority:a.columnIdx-b.columnIdx}),h=c.map(d,function(b){return b.auto&&null===b.minWidth?!1:!0===b.auto?"-":-1!==c.inArray(a,b.includeIn)}),n=0;e=0;for(f=h.length;e<f;e++)!0===h[e]&&(n+=d[e].minWidth);e=b.settings()[0].oScroll;e=e.sY||e.sX?e.iBarWidth:0;b= -b.table().container().offsetWidth-e-n;e=0;for(f=h.length;e<f;e++)d[e].control&&(b-=d[e].minWidth);n=!1;e=0;for(f=g.length;e<f;e++){var i=g[e].columnIdx;"-"===h[i]&&(!d[i].control&&d[i].minWidth)&&(n||0>b-d[i].minWidth?(n=!0,h[i]=!1):h[i]=!0,b-=d[i].minWidth)}g=!1;e=0;for(f=d.length;e<f;e++)if(!d[e].control&&!d[e].never&&!h[e]){g=!0;break}e=0;for(f=d.length;e<f;e++)d[e].control&&(h[e]=g);-1===c.inArray(!0,h)&&(h[0]=!0);return h},_classLogic:function(){var a=this,b=this.c.breakpoints,d=this.s.dt,e= -d.columns().eq(0).map(function(a){var b=this.column(a),e=b.header().className,a=d.settings()[0].aoColumns[a].responsivePriority;a===p&&(b=c(b.header()).data("priority"),a=b!==p?1*b:1E4);return{className:e,includeIn:[],auto:!1,control:!1,never:e.match(/\bnever\b/)?!0:!1,priority:a}}),f=function(a,b){var d=e[a].includeIn;-1===c.inArray(b,d)&&d.push(b)},g=function(c,d,i,g){if(i)if("max-"===i){g=a._find(d).width;d=0;for(i=b.length;d<i;d++)b[d].width<=g&&f(c,b[d].name)}else if("min-"===i){g=a._find(d).width; -d=0;for(i=b.length;d<i;d++)b[d].width>=g&&f(c,b[d].name)}else{if("not-"===i){d=0;for(i=b.length;d<i;d++)-1===b[d].name.indexOf(g)&&f(c,b[d].name)}}else e[c].includeIn.push(d)};e.each(function(a,e){for(var d=a.className.split(" "),f=!1,j=0,l=d.length;j<l;j++){var k=c.trim(d[j]);if("all"===k){f=!0;a.includeIn=c.map(b,function(a){return a.name});return}if("none"===k||a.never){f=!0;return}if("control"===k){f=!0;a.control=!0;return}c.each(b,function(a,b){var d=b.name.split("-"),c=k.match(RegExp("(min\\-|max\\-|not\\-)?("+ -d[0]+")(\\-[_a-zA-Z0-9])?"));c&&(f=!0,c[2]===d[0]&&c[3]==="-"+d[1]?g(e,b.name,c[1],c[2]+c[3]):c[2]===d[0]&&!c[3]&&g(e,b.name,c[1],c[2]))})}f||(a.auto=!0)});this.s.columns=e},_detailsDisplay:function(a,b){var d=this,e=this.s.dt,f=this.c.details;if(f&&!1!==f.type){var g=f.display(a,b,function(){return f.renderer(e,a[0],d._detailsObj(a[0]))});(!0===g||!1===g)&&c(e.table().node()).triggerHandler("responsive-display.dt",[e,a,g,b])}},_detailsInit:function(){var a=this,b=this.s.dt,d=this.c.details;"inline"=== -d.type&&(d.target="td:first-child, th:first-child");b.on("draw.dtr",function(){a._tabIndexes()});a._tabIndexes();c(b.table().body()).on("keyup.dtr","td, th",function(a){a.keyCode===13&&c(this).data("dtr-keyboard")&&c(this).click()});var e=d.target;c(b.table().body()).on("click.dtr mousedown.dtr mouseup.dtr","string"===typeof e?e:"td, th",function(d){if(c(b.table().node()).hasClass("collapsed")&&b.row(c(this).closest("tr")).length){if(typeof e==="number"){var g=e<0?b.columns().eq(0).length+e:e;if(b.cell(this).index().column!== -g)return}g=b.row(c(this).closest("tr"));d.type==="click"?a._detailsDisplay(g,false):d.type==="mousedown"?c(this).css("outline","none"):d.type==="mouseup"&&c(this).blur().css("outline","")}})},_detailsObj:function(a){var b=this,d=this.s.dt;return c.map(this.s.columns,function(e,c){if(!e.never&&!e.control)return{title:d.settings()[0].aoColumns[c].sTitle,data:d.cell(a,c).render(b.c.orthogonal),hidden:d.column(c).visible()&&!b.s.current[c],columnIndex:c,rowIndex:a}})},_find:function(a){for(var b=this.c.breakpoints, -d=0,c=b.length;d<c;d++)if(b[d].name===a)return b[d]},_redrawChildren:function(){var a=this,b=this.s.dt;b.rows({page:"current"}).iterator("row",function(c,e){b.row(e);a._detailsDisplay(b.row(e),!0)})},_resize:function(){var a=this,b=this.s.dt,d=c(l).width(),e=this.c.breakpoints,f=e[0].name,g=this.s.columns,h,j=this.s.current.slice();for(h=e.length-1;0<=h;h--)if(d<=e[h].width){f=e[h].name;break}var i=this._columnsVisiblity(f);this.s.current=i;e=!1;h=0;for(d=g.length;h<d;h++)if(!1===i[h]&&!g[h].never&& -!g[h].control){e=!0;break}c(b.table().node()).toggleClass("collapsed",e);var k=!1;b.columns().eq(0).each(function(b,c){i[c]!==j[c]&&(k=!0,a._setColumnVis(b,i[c]))});k&&(this._redrawChildren(),c(b.table().node()).trigger("responsive-resize.dt",[b,this.s.current]))},_resizeAuto:function(){var a=this.s.dt,b=this.s.columns;if(this.c.auto&&-1!==c.inArray(!0,c.map(b,function(a){return a.auto}))){a.table().node();var d=a.table().node().cloneNode(!1),e=c(a.table().header().cloneNode(!1)).appendTo(d),f=c(a.table().body()).clone(!1, -!1).empty().appendTo(d),g=a.columns().header().filter(function(b){return a.column(b).visible()}).to$().clone(!1).css("display","table-cell");c(f).append(c(a.rows({page:"current"}).nodes()).clone(!1)).find("th, td").css("display","");if(f=a.table().footer()){var f=c(f.cloneNode(!1)).appendTo(d),h=a.columns().footer().filter(function(b){return a.column(b).visible()}).to$().clone(!1).css("display","table-cell");c("<tr/>").append(h).appendTo(f)}c("<tr/>").append(g).appendTo(e);"inline"===this.c.details.type&& -c(d).addClass("dtr-inline collapsed");c(d).find("[name]").removeAttr("name");d=c("<div/>").css({width:1,height:1,overflow:"hidden"}).append(d);d.insertBefore(a.table().node());g.each(function(c){c=a.column.index("fromVisible",c);b[c].minWidth=this.offsetWidth||0});d.remove()}},_setColumnVis:function(a,b){var d=this.s.dt,e=b?"":"none";c(d.column(a).header()).css("display",e);c(d.column(a).footer()).css("display",e);d.column(a).nodes().to$().css("display",e)},_tabIndexes:function(){var a=this.s.dt, -b=a.cells({page:"current"}).nodes().to$(),d=a.settings()[0],e=this.c.details.target;b.filter("[data-dtr-keyboard]").removeData("[data-dtr-keyboard]");c("number"===typeof e?":eq("+e+")":e,a.rows({page:"current"}).nodes()).attr("tabIndex",d.iTabIndex).data("dtr-keyboard",1)}});j.breakpoints=[{name:"desktop",width:Infinity},{name:"tablet-l",width:1024},{name:"tablet-p",width:768},{name:"mobile-l",width:480},{name:"mobile-p",width:320}];j.display={childRow:function(a,b,d){if(b){if(c(a.node()).hasClass("parent"))return a.child(d(), -"child").show(),!0}else{if(a.child.isShown())return a.child(!1),c(a.node()).removeClass("parent"),!1;a.child(d(),"child").show();c(a.node()).addClass("parent");return!0}},childRowImmediate:function(a,b,d){if(!b&&a.child.isShown()||!a.responsive.hasHidden())return a.child(!1),c(a.node()).removeClass("parent"),!1;a.child(d(),"child").show();c(a.node()).addClass("parent");return!0},modal:function(a){return function(b,d,e){if(d)c("div.dtr-modal-content").empty().append(e());else{var f=function(){g.remove(); -c(k).off("keypress.dtr")},g=c('<div class="dtr-modal"/>').append(c('<div class="dtr-modal-display"/>').append(c('<div class="dtr-modal-content"/>').append(e())).append(c('<div class="dtr-modal-close">×</div>').click(function(){f()}))).append(c('<div class="dtr-modal-background"/>').click(function(){f()})).appendTo("body");c(k).on("keyup.dtr",function(a){27===a.keyCode&&(a.stopPropagation(),f())})}a&&a.header&&c("div.dtr-modal-content").prepend("<h2>"+a.header(b)+"</h2>")}}};j.renderer={listHidden:function(){return function(a, -b,d){return(a=c.map(d,function(a){return a.hidden?'<li data-dtr-index="'+a.columnIndex+'" data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><span class="dtr-title">'+a.title+'</span> <span class="dtr-data">'+a.data+"</span></li>":""}).join(""))?c('<ul data-dtr-index="'+b+'"/>').append(a):!1}},tableAll:function(a){a=c.extend({tableClass:""},a);return function(b,d,e){b=c.map(e,function(a){return'<tr data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><td>'+a.title+":</td> <td>"+ -a.data+"</td></tr>"}).join("");return c('<table class="'+a.tableClass+'" width="100%"/>').append(b)}}};j.defaults={breakpoints:j.breakpoints,auto:!0,details:{display:j.display.childRow,renderer:j.renderer.listHidden(),target:0,type:"inline"},orthogonal:"display"};var o=c.fn.dataTable.Api;o.register("responsive()",function(){return this});o.register("responsive.index()",function(a){a=c(a);return{column:a.data("dtr-index"),row:a.parent().data("dtr-index")}});o.register("responsive.rebuild()",function(){return this.iterator("table", -function(a){a._responsive&&a._responsive._classLogic()})});o.register("responsive.recalc()",function(){return this.iterator("table",function(a){a._responsive&&(a._responsive._resizeAuto(),a._responsive._resize())})});o.register("responsive.hasHidden()",function(){var a=this.context[0];return a._responsive?-1!==c.inArray(!1,a._responsive.s.current):!1});j.version="2.1.0";c.fn.dataTable.Responsive=j;c.fn.DataTable.Responsive=j;c(k).on("preInit.dt.dtr",function(a,b){if("dt"===a.namespace&&(c(b.nTable).hasClass("responsive")|| -c(b.nTable).hasClass("dt-responsive")||b.oInit.responsive||m.defaults.responsive)){var d=b.oInit.responsive;!1!==d&&new j(b,c.isPlainObject(d)?d:{})}});return j}); - -/*! - DataTables jQuery UI integration - ©2011-2014 SpryMedia Ltd - datatables.net/license -*/ -(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,d){b||(b=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(b,d).$;return a(d,b,b.document)}:a(jQuery,window,document)})(function(a){var b=a.fn.dataTable;a.extend(!0,b.defaults,{dom:'<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-tl ui-corner-tr"lfr>t<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-bl ui-corner-br"ip>', -renderer:"jqueryui"});a.extend(b.ext.classes,{sWrapper:"dataTables_wrapper dt-jqueryui",sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:"ui-state-default sorting_asc",sSortDesc:"ui-state-default sorting_desc",sSortable:"ui-state-default sorting",sSortableAsc:"ui-state-default sorting_asc_disabled",sSortableDesc:"ui-state-default sorting_desc_disabled", -sSortableNone:"ui-state-default sorting_disabled",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead ui-state-default",sScrollFoot:"dataTables_scrollFoot ui-state-default",sHeaderTH:"ui-state-default",sFooterTH:"ui-state-default"});b.ext.renderer.header.jqueryui=function(b,h,e,c){var f="css_right ui-icon ui-icon-carat-2-n-s",g=-1!==a.inArray("asc",e.asSorting),i=-1!==a.inArray("desc",e.asSorting);!e.bSortable||!g&&!i?f="":g&&!i?f="css_right ui-icon ui-icon-carat-1-n":!g&&i&&(f="css_right ui-icon ui-icon-carat-1-s"); -a("<div/>").addClass("DataTables_sort_wrapper").append(h.contents()).append(a("<span/>").addClass(c.sSortIcon+" "+f)).appendTo(h);a(b.nTable).on("order.dt",function(a,g,i,j){b===g&&(a=e.idx,h.removeClass(c.sSortAsc+" "+c.sSortDesc).addClass("asc"==j[a]?c.sSortAsc:"desc"==j[a]?c.sSortDesc:e.sSortingClass),h.find("span."+c.sSortIcon).removeClass("css_right ui-icon ui-icon-triangle-1-n css_right ui-icon ui-icon-triangle-1-s css_right ui-icon ui-icon-carat-2-n-s css_right ui-icon ui-icon-carat-1-n css_right ui-icon ui-icon-carat-1-s").addClass("asc"== -j[a]?"css_right ui-icon ui-icon-triangle-1-n":"desc"==j[a]?"css_right ui-icon ui-icon-triangle-1-s":f))})};b.TableTools&&a.extend(!0,b.TableTools.classes,{container:"DTTT_container ui-buttonset ui-buttonset-multi",buttons:{normal:"DTTT_button ui-button ui-state-default"},collection:{container:"DTTT_collection ui-buttonset ui-buttonset-multi"}});return b}); - -/*! - jQuery UI integration for DataTables' Responsive - ©2015 SpryMedia Ltd - datatables.net/license -*/ -(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-jqui","datatables.net-responsive"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);if(!b||!b.fn.dataTable)b=require("datatables.net-jqui")(a,b).$;b.fn.dataTable.Responsive||require("datatables.net-responsive")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c){var a=c.fn.dataTable,b=a.Responsive.display,f=b.modal;b.modal=function(a){return function(b, -d,e){c.fn.dialog?d||c("<div/>").append(e()).appendTo("body").dialog(c.extend(!0,{title:a&&a.header?a.header(b):"",width:500},a.dialog)):f(b,d,e)}};return a.Responsive}); - /** + * scrollTo * Copyright (c) 2007-2015 Ariel Flesler - aflesler ○ gmail • com | http://flesler.blogspot.com * Licensed under MIT * @author Ariel Flesler Only in /home/deploy/wp-safety.org/data/plugin-versions/wp-base-booking-of-appointments-services-and-events/5.9.0/js: locale @@ -253,511 +253,6 @@ (function ($) { - /** - * Add/edit/save bookings quickly - */ - var WPB_Quickbook = { - - init: function (task, arg, calendar) { - var me = this; - - // me.calendar = calendar; - // me.arg = arg; - me.wrap = $(document).find(".app-panel-wrap"); - me.panel = $(document).find(".app-panel"); - - var table = $("div.app-manage"); - - table.on("click", ".save", function (e) { - e.preventDefault(); - me.save(e); - }); - - table.on("change", "select.app_extras,.app-admin-lsw,select[name='start_time'],select[name='status'],select.app_duration,.app-special-select", function (e) { - me.updateEdit($(e.target)); - }); - - var cursorTimer; - table.on("keyup", "input[name='app_seats'],.app-special-text", function (e) { - clearTimeout(cursorTimer); - cursorTimer = setTimeout(function () { - me.updateEdit($(e.target)); - }, 500); - }); - - table.on("focus", ".datepicker", function (e) { - if ( !$(this).prop( "readonly" ) ) { - me.datePicker(e); - } - }); - - /* Cancel */ - table.on("click", ".cancel", function (e) { - me.wrap.removeClass("open"); - }); - - /* Redraw multiselect */ - $(window).resize(function () { - $.each($(".app_users,.app_extras"), function (ignore, val) { - $this = $(val); - if ($this.data().hasOwnProperty("echMultiselect")) { - $this.multiselect("refresh"); - } - }); - }); - - }, - - /** - * Read all field values of a row (par) - * @param par object Possibly a row in the table under which fields will be read - */ - readData: function (par) { - var table = par.parents("div.app-manage"); - - var app_user_data = {}; - $.each(_app_.user_fields, function (ignore, v) { - app_user_data[v] = par.find("input[name='" + v + "']").val(); - }); - - var postData = { - wpb_ajax: true, - admin_edit: true, - user: par.find("select[name='user'] option:selected").val(), - create_user: par.find("input[name='create_user']").is(":checked") ? 1 : 0, - create_user_check: par.find("input[name='create_user_check']").val(), - name: par.find("input[name='cname']").val(), - app_user_data: JSON.stringify(app_user_data), - location: par.find("select[name='location'] option:selected").val() || 0, - service: par.find("select[name='service'] option:selected").val(), - worker: par.find(".app_select_workers").val() || 0, - start_date: par.find("input[name='start_date']").val(), - start_time: par.find("select[name='start_time'] option:selected").val(), - end_date: par.find("input[name='end_date']").val(), - end_time: par.find("select[name='end_time'] option:selected").val(), - status: par.find("select[name='status'] option:selected").val(), - app_id: par.find("input[name='app_id']").val(), - app_seats: par.find(".app_seats").val(), - app_duration: par.find("select[name='app_duration'] option:selected").val(), - send_email: par.find("input[name='send_email']").is(":checked") ? 1 : 0, - only_own: table.data("only_own"), - ajax_nonce: _app_.iedit_nonce, - is_account_page: _app_.is.account_page ? 1 : 0, - is_store_page: _app_.is.store_page ? 1 : 0 - }; - - /* Add special values to post data */ - var postSpecialData = {}; - - par.find("input[class*=app-special-text], select[class*=app-special-select]").each( function(){ - var sp_name = $(this).attr("name"); - var sp_value = $(this).attr("type") === "checkbox" ? ((this).checked ? 1 : 0) : $(this).val(); - postSpecialData[sp_name] = sp_value; - }); - - $.extend(postData, postSpecialData); - - var udfs = {}; - $.each(_app_.udf_ids, function (ignore, v) { - var field = par.find(".app-udf-field-entry-" + v); - if (parseInt(field.length) > 0) { - if (field.hasClass("app-udf-checkbox")) { - udfs["udf_" + v] = field.is(":checked") ? 1 : 0; - } else { - udfs["udf_" + v] = field.val(); - } - } - }); - postData = $.extend(postData, { - udf_data: JSON.stringify(udfs) - }); - - return postData; - }, - - /** - * Edit a booking - */ - upsert: function (task, arg, calendar) { - var me = this; - var resource_id = typeof arg.resource === "undefined" ? 0 : arg.resource.id; - me.calendar = calendar; - - var data = { - wpb_ajax: true, - action: "app_quick_book_upsert", - app_id: task == "edit" ? arg.event.id : 0, - worker: task == "add" ? resource_id : 0, - updated: task == "add" && resource_id ? "worker" : "", - app_timestamp: task == "add" ? arg.startStr : 0, - ajax_nonce: _app_.iedit_nonce, - is_account_page: _app_.is.account_page ? 1 : 0, - is_store_page: _app_.is.store_page ? 1 : 0 - }; - - me.panel.empty(); - me.wrap.addClass("open"); - - $.post(_app_.ajax_url, data, function (r) { - if (r && r.error) { - window.alert(r.error); - } else if (r) { - var iedit_row = r.result; - var insertedRow = $(iedit_row).appendTo(me.panel); - insertedRow.find(".inline-edit-col .blocked-days") - .val(r.blocked_days).data("blocked", r.blocked_days); - var dpicker_id = insertedRow.find(".datepicker").attr("id"); - $("#" + dpicker_id).datepicker("refresh"); - if (parseInt(r.locked) > 0) { - insertedRow.data("locked", true); - } - me.configureMS(r.id); - me.configQtip(r.id); - } else { - window.alert(_app_.con_error); - } - }, "json"); - }, - - /** - * Updates fields during edit if lsw or date/time fields changed - */ - updateEdit: function (obj) { - var me = this; - var par = obj.parents(".inline-edit-row"); - var table = par.parents("div.app-manage"); - var only_own = table.data("only_own"); - - if (obj.hasClass("app_seats") && !obj.val()) { - return false; - } - - $.infoPanel(); - - if ($.inArray(parseInt(obj.val()), _app_.daily_services) === -1) { - $(".app-is-daily").text(""); - par.find(".app-admin-time,input[name='end_date']") - .css("text-decoration", "none") - .attr("disabled", false); - } else { - // Daily - $(".app-is-daily").text(_app_.daily_text); - par.find(".app-admin-time,input[name='end_date']") - .css("text-decoration", "line-through") - .attr("disabled", true); - } - - par.find(".app-admin-lsw").attr("disabled", "disabled"); - var locSel = par.find("select[name='location']"); - var serviceSel = par.find("select[name='service']"); - var workerSel = par.find(".app_select_workers"); - var startTimeSel = par.find("select[name='start_time']"); - var endTimeSel = par.find("select[name='end_time']"); - - var durationLabel = par.find(".app_iedit_duration"); - var durationSel = durationLabel.find(".input-text-wrap"); - var repeatUnitLabel = par.find(".app_iedit_repeat_unit"); - var repeatUnitSel = repeatUnitLabel.find(".input-text-wrap"); - var repeatNumberLabel = par.find(".app_iedit_repeat_count"); - var repeatNumberSel = repeatNumberLabel.find(".input-text-wrap"); - - var postData = me.readData(par); - postData.action = "app_quick_book_update"; - if (parseInt(par.find(".is_event").val()) > 0 ) { - postData.is_event = true; - } - // if (obj.hasClass("app_select_workers") && obj.val()) { - // postData.updated = "worker"; - // } - - $.post(_app_.ajax_url, postData, function (r) { - - par.find(".app-admin-lsw").attr("disabled", false); - - if (r && r.error) { - window.alert(r.error); - } else if (r) { - var notice = r.notice || ""; - par.find(".app-admin-notice").empty().html(notice); - if (r.event_start) { - par.find("[name='event_start']").replaceWith(r.event_start); - } - if (r.event_end) { - par.find("[name='event_end']").replaceWith(r.event_end); - } - if (r.end_date) { - var end_date_fld = par.find("input[name='end_date']"); - end_date_fld.attr("readonly", false); - end_date_fld.val(r.end_date); - end_date_fld.attr("readonly", true); - } - if (r.start_time_sel) { - startTimeSel.replaceWith(r.start_time_sel); - } - if (r.end_time_sel) { - endTimeSel.replaceWith(r.end_time_sel); - } - if (r.locations_sel) { - locSel.replaceWith(r.locations_sel); - } - if (r.services_sel) { - serviceSel.replaceWith(r.services_sel); - } - if (r.durations_sel) { - durationSel.html(r.durations_sel); - durationLabel.show(); - } else { - durationLabel.hide(); - } - if (r.repeat_unit_sel) { - repeatUnitSel.html(r.repeat_unit_sel); - repeatUnitLabel.show(); - } else { - repeatUnitLabel.hide(); - } - if (r.repeat_count_sel) { - repeatNumberSel.html(r.repeat_count_sel); - repeatNumberLabel.show(); - } else { - repeatNumberLabel.hide(); - } - if (r.workers_sel) { - workerSel.siblings(".worker-name").remove(); - workerSel.replaceWith(r.workers_sel); - } - - par.find(".blocked-days").val(r.blocked_days).data("blocked", r.blocked_days); - var dpicker_id = par.find(".datepicker").attr("id"); - $("#" + dpicker_id).datepicker("refresh"); - - } else { - window.alert(_app_.con_error); - } - }, "json"); - }, - - /** - * Save a booking - */ - save: function (e) { - var me = this; - var $this = $(e.target); - var sPar = $this.parents(".inline-edit-row"); - $this.attr("disabled", true); - $.infoPanel("saving"); - sPar.find(".waiting").show(); - - var postData = me.readData(sPar); - postData.action = "app_quick_book_save"; - if (parseInt(sPar.find(".is_event").val()) > 0 ) { - postData.is_event = true; - } - - $.post(_app_.ajax_url, postData, function (r) { - $this.attr("disabled", false); - sPar.find(".waiting").hide(); - - if (!r) { - window.alert(_app_.con_error); - return false; - } - var emailMsg = r.emailMsg ? " " + r.emailMsg : ""; - if (r.error) { - sPar.find(".error") - .html("<span class='app-error'>" + r.error + emailMsg + "</span>") - .show().delay(10000).fadeOut("slow"); - } else if (r.no_change) { - sPar.find(".error") - .html("<span class='app-b'>" + r.no_change + emailMsg + "</span>") - .show().delay(10000).fadeOut("slow"); - } else if (r.result) { - sPar.find(".error") - .html("<span class='app-success'>" + r.result + emailMsg + "</span>") - .show().delay(10000).fadeOut("slow"); - - r.target = $this; - $(document).trigger("app-admin-booking-saved", r); - - setTimeout(function () { - me.wrap.removeClass("open"); - }, 3000); - - if ( r.event ) { - if (r.inserted) { - me.calendar.addEvent( r.event ); - } else { - me.calendar.updateEvent( r.event ); - } - } - } else if (emailMsg) { - sPar.find(".error") - .html("<span class='app-success'>" + emailMsg + "</span>") - .show().delay(10000).fadeOut("slow"); - } - }, "json"); - }, - - /** - * Populate userdata upon user selection - */ - populateUser: function (me) { - var sel_user = parseInt(me.val()); - var par = me.parents(".inline-edit-col"); - if (sel_user === 0) { - // Clear fields for unregistered user - $.each(_app_.user_fields, function (ignore, v) { - par.find(".app_iedit_" + v + " input").val(""); - }); - par.find(".app-quick-book-user-fields").show(); - par.find(".app_iedit_create_user").show(); - return false; - } - $.infoPanel("reading"); - par.find(".app-quick-book-user-fields").hide(); - par.find(".app_iedit_create_user").hide(); - var data = { - action: "app_populate_user", - user_id: sel_user, - ajax_nonce: _app_.iedit_nonce - }; - $.post(_app_.ajax_url, data, function (r) { - if (r && r.error) { - window.alert(r.error); - } else if (r) { - par.find(".app_iedit_create_user :input").prop("checked", false); - $.each(r, function (i, v) { - par.find(".app_iedit_" + i + " :input").val(v); - }); - } else { - window.alert(_app_.con_error); - } - }, "json"); - }, - - /** - * Initiates Multiselect for users and extras - */ - configureMS: function (id) { - var me = this; - var $this = $("#app_users_" + id); - - $("#app_extras_" + id).multiselect({ - selectedList: 3, - buttonWidth: "100%", - classes: "app_extras app-ms-small" - }).multiselectfilter(); - - if ( _app_.is.msUsers ) { - $this.multiselect({ - openEffect: null, - closeEffect: null, - menuHeight: 300, - selectedList: 1, - buttonWidth: "100%", - classes: "app_users app-ms-small app_users_admin app-users-quick-book", - close: function () { - me.populateUser($this); - } - }).multiselectfilter(); - } - - $(document).trigger("app-configure-ms", id); - }, - - /** - * Initiate datepicker upon focus - */ - datePicker: function (e) { - var me = this; - var $this = $(e.target); - if ($this.data("focused") !== "yes") { - $this.datepicker({ - dateFormat: _app_.js_date_format, - firstDay: _app_.start_of_week, - onSelect: function (dateText) { - if ($this.attr("name") === "start_date") { - $this.parents(".inline-edit-col") - .find("input[name='end_date']") - .datepicker("setDate", dateText); - me.updateEdit($this); - } - }, - beforeShowDay: function (date) { - var string = $.datepicker.formatDate("yy-mm-dd", date); - var datelist = $this.parents(".inline-edit-col").find(".blocked-days").data("blocked"); - if (datelist) { - return [$.inArray(string, datelist) === -1]; - } else { - return [true]; - } - } - }); - } - $this.data("focused", "yes"); - }, - - /** - * Initiates qtip - */ - configQtip: function (id) { - var edit_row = $(".inline-edit-row"); - edit_row.find("[title][title!='']").each(function (ignore, val) { - var $this = $(val); - var title = $this.attr("title"); - var ttip = title ? title.replace(/●/g, "<br />").replace("/|/", "<br/>") : ""; - - $this.qtip({ - content: { - text: ttip - }, - hide: _app_.qtipHide, - position: _app_.qtipPos, - style: _app_.qtipYellow - }); - }); - - var cacheCl = "app-payment-cache-" + id; - var cache = $("<div class='" + cacheCl + "' />"); - var abbrPayment = $("#app-payment-ttip-" + id); - - abbrPayment.qtip({ - overwrite: true, - content: { - text: function (ignore, api) { - if (parseInt($(document).find("." + cacheCl).length) > 0) { - return $(document).find("." + cacheCl).html(); - } - api.elements.content.html(_app_.loading); - return $.ajax({ - url: _app_.ajax_url, - type: "POST", - dataType: "json", - data: { - app_id: abbrPayment.parents(".inline-edit-row") - .find("input[name='app_id']").val(), - action: "app_show_payment_in_tooltip" - } - }) - .then(function (res) { - var content = res.result; - if (content) { - cache.html(content).appendTo($(document.body)).hide(); - } - return content; - }, function (ignore, status, error) { - api.set("content.text", status + ": " + error); - }); - } - }, - hide: _app_.qtipHide, - position: _app_.qtipPos, - style: _app_.qtipSmall - }); - } - }; - WPB_Quickbook.init(); - - let calendar; let Calendar = function ($container, options) { @@ -826,7 +321,7 @@ } arg.jsEvent.stopPropagation(); - WPB_Quickbook.upsert( 'edit', arg, calendar ); + $.WPB_Quickbook.upsert( 'edit', arg, calendar ); }, eventContent: function (arg) { @@ -875,6 +370,8 @@ }, eventSources: [{ events: function(arg) { + $.infoPanel( 'loading' ); + return $.ajax({ url: _app_.ajax_url, type: "POST", @@ -888,6 +385,7 @@ worker_ids: $container.data("worker_ids"), location_ids: $container.data("location_ids"), service_ids: $container.data("service_ids"), + view: $.getCookie('app_schedule_view'), is_account_page: _app_.is.account_page ? 1 : 0, is_store_page: _app_.is.store_page ? 1 : 0 } @@ -950,13 +448,13 @@ selectMinDistance: -1, select: function (arg) { - if ( !_app_.is.editable ) { + if ( !_app_.is.editable || _app_.is.client ) { return; } arg.jsEvent.stopPropagation(); - WPB_Quickbook.upsert( 'add', arg, calendar ); + $.WPB_Quickbook.upsert( 'add', arg, calendar ); }, slotDuration: _app_.slot_duration, slotMinTime: _app_.wh_starts, @@ -1056,24 +554,26 @@ /** * Init */ - $.WPB_Schedule = new AppSchedule($calendar, { - calendar: { - height: '100%', - headerToolbar: headerToolbar, - resources: workers, - view: lastView, - date: $.getCookie('app_schedule_date') || newDate - }, - viewChanged: function (view) { - $.setCookie('app_schedule_view', view.type); - if ( view.type == 'resourceTimelineDay' ) { - $.WPB_Schedule.ec.refetchEvents(); + if ( $calendar.length ) { + $.WPB_Schedule = new AppSchedule($calendar, { + calendar: { + height: '100%', + headerToolbar: headerToolbar, + resources: workers, + view: lastView, + date: $.getCookie('app_schedule_date') || newDate + }, + viewChanged: function (view) { + $.setCookie('app_schedule_view', view.type); + if ( view.type == 'resourceTimelineDay' ) { + $.WPB_Schedule.ec.refetchEvents(); + } } - } - }); - + }); + } + function drawConnections(task) { - setTimeout(function(){ + setTimeout(function(){ var conns = $(".app-js-schedules").data("conns"); $.each( conns, function(i, v) { // $().connections({ from: ".app-" + v, to: ".conn-" + v }); @@ -1081,11 +581,11 @@ }); }, 10); } - + $(document).on("app-ec-loaded", function() { // drawConnections(); - }); - + }); + $(window).on("resize", function() { // drawConnections("update"); }); @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: WP BASE Booking of Appointments, Services and Events\n" -"POT-Creation-Date: 2026-01-04 09:03+0700\n" +"POT-Creation-Date: 2026-03-09 15:48+0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: \n" "Language-Team: \n" @@ -72,8 +72,9 @@ msgstr "" #: includes/addons.php:653 +#: includes/addons/multi-vendor/admin/commissions-list.php:775 #: includes/addons/multi-vendor/admin/unconfirmed.php:738 -#: includes/custom-texts.php:808 includes/schedules.php:1131 +#: includes/custom-texts.php:817 includes/schedules.php:1343 msgid "Apply" msgstr "" @@ -83,7 +84,7 @@ #: includes/addons.php:661 includes/addons/locations/locations-list.php:1025 #: includes/addons/service-providers/workers-list.php:1128 -#: includes/admin/help.php:680 includes/admin/services-list.php:1556 +#: includes/admin/help.php:680 includes/admin/services-list.php:1557 #: includes/admin/tinymce.php:275 msgid "Description" msgstr "" @@ -117,16 +118,16 @@ msgstr "" #: includes/addons.php:783 -#: includes/addons/multi-vendor/admin/commissions-list.php:624 -#: includes/addons/multi-vendor/admin/commissions-list.php:1162 +#: includes/addons/multi-vendor/admin/commissions-list.php:631 +#: includes/addons/multi-vendor/admin/commissions-list.php:1229 #: includes/addons/multi-vendor/admin/vendors-list.php:430 #: includes/addons/multi-vendor/admin/vendors-list.php:890 -#: includes/admin/bookings.php:1737 includes/custom-texts.php:1111 -#: includes/custom-texts.php:1313 includes/schedules.php:464 +#: includes/admin/bookings.php:1737 includes/custom-texts.php:1118 +#: includes/custom-texts.php:1318 includes/schedules.php:479 msgid "Status" msgstr "" -#: includes/addons.php:784 includes/custom-texts.php:782 +#: includes/addons.php:784 includes/custom-texts.php:783 msgid "Action" msgstr "" @@ -240,7 +241,7 @@ #: includes/addons/2checkout/2checkout.php:306 #: includes/addons/authorizenet-aim/authorizenet-aim.php:373 -#: includes/addons/credits/credits.php:1548 +#: includes/addons/credits/credits.php:1552 #: includes/addons/stripe/stripe.php:450 msgid "Mode" msgstr "" @@ -293,7 +294,7 @@ msgid "Check \"mode\" parameter of Book in Flex View shortcode" msgstr "" -#: includes/addons/advanced-features.php:250 includes/front-listing.php:264 +#: includes/addons/advanced-features.php:250 includes/front-listing.php:345 #: includes/front.php:1147 #, php-format msgid "Hard limit activated. Execution time: %s secs." @@ -525,7 +526,7 @@ msgstr "" #: includes/addons/advanced-features/trial-services.php:54 -#: includes/constant-data.php:642 +#: includes/constant-data.php:660 msgid "Trial Services" msgstr "" @@ -561,8 +562,9 @@ msgstr "" #: includes/addons/advanced-features/widgets-pro-child.php:195 -#: includes/addons/multi-vendor/admin/commissions-list.php:302 -#: includes/custom-texts.php:919 includes/schedules.php:1008 +#: includes/addons/multi-vendor/admin/commissions-list.php:309 +#: includes/admin/service-rte.php:196 includes/custom-texts.php:927 +#: includes/functions.listing.php:809 msgid "Close" msgstr "" @@ -580,7 +582,7 @@ #: includes/addons/advanced-features/widgets-pro-child.php:441 #: includes/addons/paypal-standard/paypal-standard.php:509 -#: includes/custom-texts.php:1346 includes/widget-helper.php:145 +#: includes/custom-texts.php:1352 includes/widget-helper.php:145 msgid "Unknown" msgstr "" @@ -601,7 +603,7 @@ msgstr "" #: includes/addons/advanced-features/widgets-pro-child.php:512 -#: includes/admin/global-settings.php:741 includes/functions.internal.php:1663 +#: includes/admin/global-settings.php:875 includes/functions.internal.php:1663 #: includes/notices.php:258 msgid "Click to toggle details" msgstr "" @@ -664,7 +666,7 @@ #: includes/addons/authorizenet-aim/authorizenet-aim.php:287 #: includes/addons/google-calendar.php:2670 -#: includes/addons/google-calendar.php:2720 includes/custom-texts.php:1325 +#: includes/addons/google-calendar.php:2720 includes/custom-texts.php:1330 msgid "Test" msgstr "" @@ -730,9 +732,9 @@ #: includes/addons/multi-vendor/admin/vendor-settings.php:664 #: includes/addons/multi-vendor/admin/vendor-settings.php:666 #: includes/admin/setup.php:227 includes/admin/setup.php:906 -#: includes/admin/setup.php:917 includes/constant-data.php:626 -#: includes/constant-data.php:628 includes/constant-data.php:631 -#: includes/functions.internal.php:2934 +#: includes/admin/setup.php:917 includes/constant-data.php:644 +#: includes/constant-data.php:646 includes/constant-data.php:649 +#: includes/functions.internal.php:2969 msgid "here" msgstr "" @@ -743,11 +745,11 @@ #: includes/addons/authorizenet-aim/authorizenet-aim.php:391 #: includes/addons/authorizenet-aim/authorizenet-aim.php:438 #: includes/addons/authorizenet-aim/authorizenet-aim.php:459 -#: includes/addons/credits/credits.php:1564 -#: includes/addons/credits/credits.php:1591 -#: includes/addons/credits/credits.php:1733 -#: includes/addons/credits/credits.php:1749 -#: includes/addons/group-bookings.php:1452 +#: includes/addons/credits/credits.php:1568 +#: includes/addons/credits/credits.php:1595 +#: includes/addons/credits/credits.php:1737 +#: includes/addons/credits/credits.php:1753 +#: includes/addons/group-bookings.php:1469 #: includes/addons/multi-vendor/admin/vendor-settings.php:226 #: includes/addons/paypal-standard/paypal-standard.php:224 #: includes/addons/service-providers/worker-settings.php:199 @@ -756,15 +758,15 @@ #: includes/addons/service-providers/workers-list.php:1377 #: includes/addons/stripe/stripe.php:480 #: includes/addons/variable-durations/selectable-durations.php:536 -#: includes/admin/global-settings.php:736 -#: includes/admin/global-settings.php:756 +#: includes/admin/global-settings.php:870 +#: includes/admin/global-settings.php:890 #: includes/admin/monetary-settings.php:193 -#: includes/admin/services-list.php:920 includes/admin/services-list.php:921 -#: includes/admin/services-list.php:933 includes/admin/services-list.php:1251 -#: includes/admin/services-list.php:1825 includes/admin/services-list.php:1826 -#: includes/admin/services-list.php:1842 includes/admin/setup.php:771 +#: includes/admin/services-list.php:921 includes/admin/services-list.php:922 +#: includes/admin/services-list.php:934 includes/admin/services-list.php:1252 +#: includes/admin/services-list.php:1834 includes/admin/services-list.php:1835 +#: includes/admin/services-list.php:1851 includes/admin/setup.php:771 #: includes/admin/setup.php:903 includes/admin/setup.php:914 -#: includes/custom-texts.php:1159 includes/functions.internal.php:1705 +#: includes/custom-texts.php:1165 includes/functions.internal.php:1705 #: includes/login-register.php:204 includes/payment-gateway-pay-later.php:76 msgid "No" msgstr "" @@ -772,24 +774,24 @@ #: includes/addons/authorizenet-aim/authorizenet-aim.php:392 #: includes/addons/authorizenet-aim/authorizenet-aim.php:437 #: includes/addons/authorizenet-aim/authorizenet-aim.php:458 -#: includes/addons/credits/credits.php:1565 -#: includes/addons/credits/credits.php:1592 -#: includes/addons/credits/credits.php:1750 +#: includes/addons/credits/credits.php:1569 +#: includes/addons/credits/credits.php:1596 +#: includes/addons/credits/credits.php:1754 #: includes/addons/paypal-standard/paypal-standard.php:225 #: includes/addons/service-providers/workers-list.php:772 #: includes/addons/service-providers/workers-list.php:1213 #: includes/addons/service-providers/workers-list.php:1377 #: includes/addons/stripe/stripe.php:481 #: includes/addons/variable-durations/selectable-durations.php:537 -#: includes/admin/global-settings.php:737 -#: includes/admin/global-settings.php:761 +#: includes/admin/global-settings.php:871 +#: includes/admin/global-settings.php:895 #: includes/admin/monetary-settings.php:191 -#: includes/admin/services-list.php:920 includes/admin/services-list.php:921 -#: includes/admin/services-list.php:933 includes/admin/services-list.php:1250 -#: includes/admin/services-list.php:1825 includes/admin/services-list.php:1826 -#: includes/admin/services-list.php:1842 includes/admin/setup.php:772 +#: includes/admin/services-list.php:921 includes/admin/services-list.php:922 +#: includes/admin/services-list.php:934 includes/admin/services-list.php:1251 +#: includes/admin/services-list.php:1834 includes/admin/services-list.php:1835 +#: includes/admin/services-list.php:1851 includes/admin/setup.php:772 #: includes/admin/setup.php:904 includes/admin/setup.php:915 -#: includes/custom-texts.php:1372 includes/functions.internal.php:1706 +#: includes/custom-texts.php:1378 includes/functions.internal.php:1706 #: includes/login-register.php:205 includes/payment-gateway-pay-later.php:77 msgid "Yes" msgstr "" @@ -917,82 +919,82 @@ msgid "BuddyPress may have been deactivated." msgstr "" -#: includes/addons/buddypress.php:1278 includes/user.php:1643 +#: includes/addons/buddypress.php:1290 includes/user.php:1656 msgid "Save Profile Settings" msgstr "" -#: includes/addons/buddypress.php:1411 +#: includes/addons/buddypress.php:1423 msgid "New booking made by client" msgstr "" -#: includes/addons/buddypress.php:1412 +#: includes/addons/buddypress.php:1424 msgid "New booking made by provider" msgstr "" -#: includes/addons/buddypress.php:1413 +#: includes/addons/buddypress.php:1425 msgid "New booking made by admin" msgstr "" -#: includes/addons/buddypress.php:1414 +#: includes/addons/buddypress.php:1426 msgid "Booking confirmed" msgstr "" -#: includes/addons/buddypress.php:1415 +#: includes/addons/buddypress.php:1427 msgid "Booking paid" msgstr "" -#: includes/addons/buddypress.php:1416 +#: includes/addons/buddypress.php:1428 msgid "Booking rescheduled by client" msgstr "" -#: includes/addons/buddypress.php:1417 +#: includes/addons/buddypress.php:1429 msgid "Booking rescheduled by provider" msgstr "" -#: includes/addons/buddypress.php:1418 +#: includes/addons/buddypress.php:1430 msgid "Booking rescheduled by admin" msgstr "" -#: includes/addons/buddypress.php:1419 +#: includes/addons/buddypress.php:1431 msgid "Booking cancelled by client" msgstr "" -#: includes/addons/buddypress.php:1420 +#: includes/addons/buddypress.php:1432 msgid "Booking cancelled by provider" msgstr "" -#: includes/addons/buddypress.php:1421 +#: includes/addons/buddypress.php:1433 msgid "Booking cancelled by admin" msgstr "" -#: includes/addons/buddypress.php:1422 +#: includes/addons/buddypress.php:1434 msgid "Service provider changed" msgstr "" -#: includes/addons/buddypress.php:1423 +#: includes/addons/buddypress.php:1435 msgid "Booking started" msgstr "" -#: includes/addons/buddypress.php:1424 +#: includes/addons/buddypress.php:1436 msgid "Booking completed" msgstr "" -#: includes/addons/buddypress.php:1836 includes/addons/google-calendar.php:1879 +#: includes/addons/buddypress.php:1848 includes/addons/google-calendar.php:1879 #: includes/addons/google-calendar.php:2016 #: includes/addons/google-calendar.php:2644 -#: includes/admin/global-settings.php:473 +#: includes/admin/global-settings.php:558 msgid "Not selected" msgstr "" -#: includes/addons/buddypress.php:1836 +#: includes/addons/buddypress.php:1848 msgid "No groups defined" msgstr "" -#: includes/addons/buddypress.php:2144 includes/addons/coupons.php:462 +#: includes/addons/buddypress.php:2156 includes/addons/coupons.php:462 #: includes/addons/custom-pricing.php:343 #: includes/addons/event-bookings/event-admin.php:715 #: includes/addons/extras.php:684 includes/addons/google-calendar.php:2156 -#: includes/addons/locations.php:925 +#: includes/addons/locations.php:904 #: includes/addons/locations/location-settings.php:69 #: includes/addons/multi-language.php:2249 includes/addons/multi-vendor.php:132 #: includes/addons/reminder-follow-up-emails.php:458 @@ -1000,53 +1002,52 @@ #: includes/addons/service-providers/worker-settings.php:68 #: includes/addons/woocommerce/wc-admin.php:178 #: includes/admin/base-admin.php:92 includes/admin/toolbar.php:137 -#: includes/custom-texts.php:866 includes/freeons/edd.php:1477 +#: includes/custom-texts.php:875 includes/freeons/edd.php:1477 #: includes/freeons/export-import.php:1363 #: includes/freeons/front-end-booking-management.php:386 -#: includes/freeons/front-end-edit.php:804 #: includes/freeons/shopping-cart.php:71 includes/gateways.php:258 msgid "Settings" msgstr "" -#: includes/addons/buddypress.php:2153 +#: includes/addons/buddypress.php:2165 msgid "BuddyPress" msgstr "" -#: includes/addons/buddypress.php:2179 +#: includes/addons/buddypress.php:2191 msgid "Service Provider Selects" msgstr "" -#: includes/addons/buddypress.php:2214 +#: includes/addons/buddypress.php:2226 msgid "" "No member types defined. If automatic assignment is required, it should be " "done using \"WP BASE Provider\" custom role." msgstr "" -#: includes/addons/buddypress.php:2241 +#: includes/addons/buddypress.php:2253 msgid "Other Settings" msgstr "" -#: includes/addons/buddypress.php:2243 +#: includes/addons/buddypress.php:2255 #, php-format msgid "" "Provider capabilities are set at %s. These capabilities will affect which " "tabs are available at the profile page of the user." msgstr "" -#: includes/addons/buddypress.php:2243 +#: includes/addons/buddypress.php:2255 #: includes/addons/multi-vendor/admin/vendor-settings.php:674 #: includes/addons/service-providers/worker-settings.php:60 msgid "Provider Settings" msgstr "" -#: includes/addons/buddypress.php:2245 +#: includes/addons/buddypress.php:2257 #, php-format msgid "" "You can enable payment with WooCommerce at %s. Otherwise payments will be " "done with WP BASE payment gateways." msgstr "" -#: includes/addons/buddypress.php:2245 +#: includes/addons/buddypress.php:2257 #: includes/addons/multi-vendor/admin/vendor-settings.php:46 #: includes/addons/multi-vendor/admin/vendor-settings.php:142 msgid "Marketplace Settings" @@ -1074,10 +1075,10 @@ #: includes/addons/seasonal-working-hours.php:251 #: includes/addons/service-providers/workers-list.php:237 #: includes/addons/service-providers/workers-list.php:724 -#: includes/addons/user-defined-fields.php:1388 includes/admin/clients.php:178 +#: includes/addons/user-defined-fields.php:1403 includes/admin/clients.php:178 #: includes/admin/clients.php:249 includes/admin/clients.php:619 -#: includes/admin/services-list.php:201 includes/admin/services-list.php:872 -#: includes/freeons/categories/categories.php:381 +#: includes/admin/services-list.php:202 includes/admin/services-list.php:873 +#: includes/freeons/categories/categories.php:374 msgid "ID" msgstr "" @@ -1106,7 +1107,7 @@ msgid "Max Uses" msgstr "" -#: includes/addons/coupons.php:587 includes/addons/credits/user.php:291 +#: includes/addons/coupons.php:587 includes/addons/credits/user.php:263 msgid "Used" msgstr "" @@ -1167,7 +1168,7 @@ msgid "All must match" msgstr "" -#: includes/addons/coupons.php:692 includes/addons/credits/credits.php:1843 +#: includes/addons/coupons.php:692 includes/addons/credits/credits.php:1847 #: includes/addons/custom-pricing.php:526 includes/addons/extras.php:961 #: includes/addons/multi-vendor/includes/flexible-price.php:448 msgid "Everyone" @@ -1268,48 +1269,48 @@ msgid "This product is for tracking WP BASE credit sales. Do not delete." msgstr "" -#: includes/addons/credits/credits.php:1231 +#: includes/addons/credits/credits.php:1232 #, php-format msgid "Order #%d" msgstr "" -#: includes/addons/credits/credits.php:1235 +#: includes/addons/credits/credits.php:1239 #, php-format msgid "" "Credits in WooCommerce order #%d for %s credits for user #%d cannot be saved" msgstr "" -#: includes/addons/credits/credits.php:1262 +#: includes/addons/credits/credits.php:1266 #, php-format msgid "Payment with %s credits for user# %d cannot be saved" msgstr "" -#: includes/addons/credits/credits.php:1295 +#: includes/addons/credits/credits.php:1299 #, php-format msgid "Credit sale - %s credits" msgstr "" -#: includes/addons/credits/credits.php:1466 -#: includes/addons/credits/credits.php:1472 +#: includes/addons/credits/credits.php:1470 +#: includes/addons/credits/credits.php:1476 #, php-format msgid "Refunded due to cancellation of booking #%d" msgstr "" -#: includes/addons/credits/credits.php:1509 +#: includes/addons/credits/credits.php:1513 #, php-format msgid "Bundle%d" msgstr "" -#: includes/addons/credits/credits.php:1509 +#: includes/addons/credits/credits.php:1513 #, php-format msgid "Plan%d" msgstr "" -#: includes/addons/credits/credits.php:1534 includes/addons/credits/user.php:53 +#: includes/addons/credits/credits.php:1538 includes/addons/credits/user.php:53 msgid "Digital Wallet" msgstr "" -#: includes/addons/credits/credits.php:1536 +#: includes/addons/credits/credits.php:1540 #, php-format msgid "" "Accept payments using internal credit/points system. Also allows selling " @@ -1317,33 +1318,33 @@ "user on %s page by editing the client record." msgstr "" -#: includes/addons/credits/credits.php:1536 includes/admin/clients.php:116 +#: includes/addons/credits/credits.php:1540 includes/admin/clients.php:116 #: includes/admin/clients.php:306 includes/admin/toolbar.php:128 -#: includes/custom-texts.php:916 +#: includes/custom-texts.php:924 msgid "Clients" msgstr "" -#: includes/addons/credits/credits.php:1539 includes/gateways.php:211 +#: includes/addons/credits/credits.php:1543 includes/gateways.php:211 msgid "Public Name" msgstr "" -#: includes/addons/credits/credits.php:1543 includes/gateways.php:215 +#: includes/addons/credits/credits.php:1547 includes/gateways.php:215 msgid "" "Enter a public name for this payment method that is displayed to users - No " "HTML" msgstr "" -#: includes/addons/credits/credits.php:1551 -#: includes/addons/credits/credits.php:1638 -#: includes/addons/credits/user.php:368 includes/custom-texts.php:949 +#: includes/addons/credits/credits.php:1555 +#: includes/addons/credits/credits.php:1642 +#: includes/addons/credits/user.php:340 includes/custom-texts.php:956 msgid "Credits" msgstr "" -#: includes/addons/credits/credits.php:1552 +#: includes/addons/credits/credits.php:1556 msgid "Service Packages" msgstr "" -#: includes/addons/credits/credits.php:1554 +#: includes/addons/credits/credits.php:1558 msgid "" "In <b>Credits mode</b>, clients buy credits that they can use to book " "services. Credits can be considered as internal digital coins. Credits " @@ -1351,7 +1352,7 @@ "promote selling higher amounts and it is optional." msgstr "" -#: includes/addons/credits/credits.php:1556 +#: includes/addons/credits/credits.php:1560 msgid "" "In <b>Service Packages mode</b>, clients buy service sessions regardless of " "service price. For example 5 sessions of English Class, 10 sessions of " @@ -1360,11 +1361,11 @@ "will be regarded as free." msgstr "" -#: includes/addons/credits/credits.php:1561 +#: includes/addons/credits/credits.php:1565 msgid "Sell Credits/Packages with WooCommerce" msgstr "" -#: includes/addons/credits/credits.php:1567 +#: includes/addons/credits/credits.php:1571 msgid "" "If selected as Yes, Credits/Packages will be sold with WooCoommerce " "checkout. WooCommerce plugin is required, WooCommerce Integration addon is " @@ -1372,11 +1373,11 @@ "REGULAR page (not on a product page)." msgstr "" -#: includes/addons/credits/credits.php:1572 +#: includes/addons/credits/credits.php:1576 msgid "WooCommerce Product Name" msgstr "" -#: includes/addons/credits/credits.php:1575 +#: includes/addons/credits/credits.php:1579 msgid "" "If credits/packages are sold with a plan and with WooCommerce, this template " "will be used to replace product name in WC Cart and Checkout. NAME, CREDIT, " @@ -1385,32 +1386,32 @@ "respectively." msgstr "" -#: includes/addons/credits/credits.php:1580 +#: includes/addons/credits/credits.php:1584 msgid "WooCommerce Product Details" msgstr "" -#: includes/addons/credits/credits.php:1583 +#: includes/addons/credits/credits.php:1587 msgid "" "Same as Product name, but this will be displayed under the product name " "field." msgstr "" -#: includes/addons/credits/credits.php:1588 +#: includes/addons/credits/credits.php:1592 msgid "Unique Payment Method" msgstr "" -#: includes/addons/credits/credits.php:1594 +#: includes/addons/credits/credits.php:1598 msgid "" "If selected as Yes, Digital Wallet will be the only payment method to book " "for services. Other active payment methods will only be used to sell credits " "and packages." msgstr "" -#: includes/addons/credits/credits.php:1599 +#: includes/addons/credits/credits.php:1603 msgid "Conversion (Buying) Rate" msgstr "" -#: includes/addons/credits/credits.php:1602 +#: includes/addons/credits/credits.php:1606 msgid "" "Your credit buying rate from the client. For example, if you enter 100 here, " "a $1 service will require 100 credits to book. For Service Packages mode, " @@ -1418,11 +1419,11 @@ "One package session is required for one booking per person." msgstr "" -#: includes/addons/credits/credits.php:1607 +#: includes/addons/credits/credits.php:1611 msgid "Selling Rate" msgstr "" -#: includes/addons/credits/credits.php:1610 +#: includes/addons/credits/credits.php:1614 msgid "" "Your credit selling rate to the client when you do not use plans. For " "example, if you enter 80 here, client needs to pay $1 to buy 80 credits. For " @@ -1430,25 +1431,25 @@ "<code>[app_sell_credit]</code> shortcode" msgstr "" -#: includes/addons/credits/credits.php:1615 +#: includes/addons/credits/credits.php:1619 msgid "Plans" msgstr "" -#: includes/addons/credits/credits.php:1617 +#: includes/addons/credits/credits.php:1621 msgid "" "In <b>Credits mode</b>, plans are optional and allow you to define tiers, " "i.e. price based on purchased quantity, instead of a fixed rate. For example " "5 credits $125, 10 credits $230." msgstr "" -#: includes/addons/credits/credits.php:1618 +#: includes/addons/credits/credits.php:1622 msgid "" "In <b>Service Packages mode</b>, having plans is mandatory. For example 10 " "sessions of English and German classes $250, 10 sessions of French classes " "is $300." msgstr "" -#: includes/addons/credits/credits.php:1619 +#: includes/addons/credits/credits.php:1623 msgid "" "Also in Service Packages mode you can combine 2 or more plans to form a " "<b>bundle</b> in order to offer special prices to your clients. For example " @@ -1456,54 +1457,54 @@ "instead of $550." msgstr "" -#: includes/addons/credits/credits.php:1623 +#: includes/addons/credits/credits.php:1627 msgid "Add New Plan" msgstr "" -#: includes/addons/credits/credits.php:1628 +#: includes/addons/credits/credits.php:1632 msgid "Make Bundle from Existing Plans" msgstr "" -#: includes/addons/credits/credits.php:1637 includes/addons/extras.php:822 +#: includes/addons/credits/credits.php:1641 includes/addons/extras.php:822 #: includes/addons/locations/locations-list.php:835 -#: includes/admin/services-list.php:1165 includes/admin/transactions.php:466 -#: includes/custom-texts.php:1151 includes/custom-texts.php:1485 +#: includes/admin/services-list.php:1166 includes/admin/transactions.php:466 +#: includes/custom-texts.php:1158 includes/custom-texts.php:1490 msgid "Name" msgstr "" -#: includes/addons/credits/credits.php:1638 +#: includes/addons/credits/credits.php:1642 #: includes/addons/event-bookings/event-admin.php:336 -#: includes/addons/event-bookings/geodir.php:245 includes/custom-texts.php:1305 +#: includes/addons/event-bookings/geodir.php:245 includes/custom-texts.php:1311 msgid "Sessions" msgstr "" -#: includes/addons/credits/credits.php:1640 +#: includes/addons/credits/credits.php:1644 msgid "Expires" msgstr "" -#: includes/addons/credits/credits.php:1642 +#: includes/addons/credits/credits.php:1646 #: includes/addons/locations/locations-list.php:869 #: includes/addons/multi-vendor/admin/vendors-list.php:876 #: includes/addons/multi-vendor/includes/flexible-price.php:419 #: includes/addons/service-providers/workers-list.php:1047 -#: includes/admin/services-list.php:1213 +#: includes/admin/services-list.php:1214 #, php-format msgid "Price (%s)" msgstr "" -#: includes/addons/credits/credits.php:1643 +#: includes/addons/credits/credits.php:1647 msgid "Services in the Plan or Plans in the Bundle" msgstr "" -#: includes/addons/credits/credits.php:1643 +#: includes/addons/credits/credits.php:1647 msgid "For Services" msgstr "" -#: includes/addons/credits/credits.php:1644 +#: includes/addons/credits/credits.php:1648 msgid "For Users" msgstr "" -#: includes/addons/credits/credits.php:1651 +#: includes/addons/credits/credits.php:1655 msgid "" "Enter details of your plans here. For example Basic, 5, 125; Popular, 10, " "230. Name, Credits/Sessions and Price fields are mandatory. You can select " @@ -1512,11 +1513,11 @@ "mode." msgstr "" -#: includes/addons/credits/credits.php:1657 +#: includes/addons/credits/credits.php:1661 msgid "Plan Label (For simple plans)" msgstr "" -#: includes/addons/credits/credits.php:1661 +#: includes/addons/credits/credits.php:1665 msgid "" "For non-bundle plans only. In the plan selection menu which is created with " "<code>[app_sell_credit]</code> shortcode, items will be displayed according " @@ -1525,11 +1526,11 @@ "<code>Basic Plan: $125 → 5 Credits</code>" msgstr "" -#: includes/addons/credits/credits.php:1666 +#: includes/addons/credits/credits.php:1670 msgid "Credit Balance Note" msgstr "" -#: includes/addons/credits/credits.php:1670 +#: includes/addons/credits/credits.php:1674 msgid "" "Template to be used to display client balance at checkout and user account " "for Credits mode. For example, <code>You have BALANCE credits worth of " @@ -1537,21 +1538,21 @@ "formatted real values." msgstr "" -#: includes/addons/credits/credits.php:1675 +#: includes/addons/credits/credits.php:1679 msgid "Bundle of Plans Label" msgstr "" -#: includes/addons/credits/credits.php:1679 +#: includes/addons/credits/credits.php:1683 msgid "" "For plans consisting of other plans (bundles) only. Same as above, but only " "NAME, PRICE and PLAN placeholders can be used." msgstr "" -#: includes/addons/credits/credits.php:1685 +#: includes/addons/credits/credits.php:1689 msgid "Package Balance Note" msgstr "" -#: includes/addons/credits/credits.php:1689 +#: includes/addons/credits/credits.php:1693 msgid "" "Template to be used to display client balance at checkout and user account " "for Service Packages mode. For example, <code>You can book BALANCE sessions " @@ -1559,40 +1560,40 @@ "will be replaced by their formatted real values." msgstr "" -#: includes/addons/credits/credits.php:1694 +#: includes/addons/credits/credits.php:1698 msgid "Auto Wallet Selection Label" msgstr "" -#: includes/addons/credits/credits.php:1698 +#: includes/addons/credits/credits.php:1702 msgid "" "When client has more than one wallet, they can select which one to use at " "checkout or leave it to the system to pick a suitable one. This setting is " "the text for auto selection option." msgstr "" -#: includes/addons/credits/credits.php:1703 includes/gateways.php:234 +#: includes/addons/credits/credits.php:1707 includes/gateways.php:234 msgid "Client Instructions" msgstr "" -#: includes/addons/credits/credits.php:1707 includes/gateways.php:238 +#: includes/addons/credits/credits.php:1711 includes/gateways.php:238 msgid "" "These are the instructions to display in the tooltip of gateway image on " "confirmation form - HTML allowed" msgstr "" -#: includes/addons/credits/credits.php:1712 +#: includes/addons/credits/credits.php:1716 msgid "Confirmation Title" msgstr "" -#: includes/addons/credits/credits.php:1716 +#: includes/addons/credits/credits.php:1720 msgid "Confirmation dialog title after successful credit/package purchase." msgstr "" -#: includes/addons/credits/credits.php:1721 +#: includes/addons/credits/credits.php:1725 msgid "Confirmation Text" msgstr "" -#: includes/addons/credits/credits.php:1725 +#: includes/addons/credits/credits.php:1729 msgid "" "Confirmation dialog content after successful credit/package purchase. " "CLIENT, PURCHASED, PAID, BALANCE, PLAN, SERVICE placeholders will be " @@ -1600,84 +1601,83 @@ "name of the selected plan and services that the plan is for, respectively." msgstr "" -#: includes/addons/credits/credits.php:1730 +#: includes/addons/credits/credits.php:1734 msgid "Refund upon Cancellation" msgstr "" -#: includes/addons/credits/credits.php:1734 +#: includes/addons/credits/credits.php:1738 msgid "Yes, if cancelled by admin" msgstr "" -#: includes/addons/credits/credits.php:1735 +#: includes/addons/credits/credits.php:1739 msgid "Yes, if cancelled by admin or provider" msgstr "" -#: includes/addons/credits/credits.php:1736 +#: includes/addons/credits/credits.php:1740 msgid "Yes, if cancelled by provider" msgstr "" -#: includes/addons/credits/credits.php:1737 +#: includes/addons/credits/credits.php:1741 msgid "Yes, if cancelled by provider or client" msgstr "" -#: includes/addons/credits/credits.php:1738 +#: includes/addons/credits/credits.php:1742 msgid "Yes, if cancelled by client" msgstr "" -#: includes/addons/credits/credits.php:1739 +#: includes/addons/credits/credits.php:1743 msgid "Yes, when cancelled by anyone" msgstr "" -#: includes/addons/credits/credits.php:1741 +#: includes/addons/credits/credits.php:1745 msgid "" "Whether credits/packages will be refunded upon cancellation depending on who " "cancelled the booking." msgstr "" -#: includes/addons/credits/credits.php:1746 +#: includes/addons/credits/credits.php:1750 msgid "Pay for Waiting List Claims" msgstr "" -#: includes/addons/credits/credits.php:1752 +#: includes/addons/credits/credits.php:1756 msgid "" "If selected as Yes, waiting list claims will be paid from client's digital " "wallet. If their balance is not sufficient, claim will be rejected." msgstr "" -#: includes/addons/credits/credits.php:1799 +#: includes/addons/credits/credits.php:1803 msgid "This plan is a bundle" msgstr "" -#: includes/addons/credits/credits.php:1803 +#: includes/addons/credits/credits.php:1807 #: includes/addons/locations/locations-list.php:1074 #: includes/addons/multi-vendor/admin/unconfirmed.php:735 #: includes/addons/multi-vendor/admin/unconfirmed.php:828 #: includes/addons/multi-vendor/admin/vendors-list.php:1005 -#: includes/addons/multi-vendor/includes/user.php:257 +#: includes/addons/multi-vendor/includes/user.php:274 #: includes/addons/service-providers/workers-list.php:1169 -#: includes/admin/services-list.php:1605 includes/admin/setup.php:114 +#: includes/admin/services-list.php:1608 includes/admin/setup.php:114 msgid "Delete" msgstr "" -#: includes/addons/credits/credits.php:1825 +#: includes/addons/credits/credits.php:1829 msgid "Plans: " msgstr "" -#: includes/addons/credits/credits.php:1825 +#: includes/addons/credits/credits.php:1829 #: includes/addons/event-bookings/functions.event.php:236 #: includes/addons/extras.php:936 includes/addons/google-calendar.php:2117 -#: includes/addons/google-calendar.php:3243 includes/addons/locations.php:253 +#: includes/addons/google-calendar.php:3243 includes/addons/locations.php:251 #: includes/addons/locations/location-settings.php:114 -#: includes/addons/multi-vendor/admin/commission-settings.php:191 -#: includes/addons/multi-vendor/admin/commission-settings.php:225 -#: includes/addons/multi-vendor/admin/commissions-list.php:401 -#: includes/addons/multi-vendor/admin/commissions-list.php:402 -#: includes/addons/multi-vendor/admin/commissions-list.php:405 +#: includes/addons/multi-vendor/admin/commission-settings.php:203 +#: includes/addons/multi-vendor/admin/commission-settings.php:237 +#: includes/addons/multi-vendor/admin/commissions-list.php:408 +#: includes/addons/multi-vendor/admin/commissions-list.php:409 +#: includes/addons/multi-vendor/admin/commissions-list.php:412 #: includes/addons/multi-vendor/admin/vendor-settings.php:261 #: includes/addons/multi-vendor/admin/vendor-settings.php:286 #: includes/addons/multi-vendor/admin/vendor-settings.php:307 #: includes/addons/multi-vendor/admin/vendor-settings.php:323 -#: includes/addons/multi-vendor/admin/vendor-settings.php:359 #: includes/addons/multi-vendor/admin/vendor-settings.php:407 #: includes/addons/multi-vendor/admin/vendor-settings.php:522 #: includes/addons/multi-vendor/admin/vendors-list.php:1083 @@ -1687,24 +1687,24 @@ #: includes/addons/service-providers/worker-settings.php:151 #: includes/addons/woocommerce/functions.wc.php:88 #: includes/admin/clients.php:937 includes/admin/display-advanced.php:184 -#: includes/admin/display-advanced.php:198 includes/custom-texts.php:1165 +#: includes/admin/display-advanced.php:198 includes/custom-texts.php:1171 #: includes/freeons/edd.php:1526 includes/functions.internal.php:1386 -#: includes/functions.internal.php:1453 includes/user.php:698 +#: includes/functions.internal.php:1453 includes/user.php:706 msgid "None" msgstr "" -#: includes/addons/credits/credits.php:1835 +#: includes/addons/credits/credits.php:1839 msgid "Services: " msgstr "" -#: includes/addons/credits/credits.php:1835 -#: includes/addons/multi-vendor/admin/commissions-list.php:406 -#: includes/addons/multi-vendor/admin/commissions-list.php:597 -#: includes/addons/multi-vendor/admin/commissions-list.php:618 +#: includes/addons/credits/credits.php:1839 +#: includes/addons/multi-vendor/admin/commissions-list.php:413 +#: includes/addons/multi-vendor/admin/commissions-list.php:604 +#: includes/addons/multi-vendor/admin/commissions-list.php:625 #: includes/addons/multi-vendor/admin/vendors-list.php:402 #: includes/addons/multi-vendor/admin/vendors-list.php:423 #: includes/addons/woocommerce/coupons.php:87 includes/admin/bookings.php:666 -#: includes/custom-texts.php:798 +#: includes/custom-texts.php:807 msgid "All" msgstr "" @@ -1713,7 +1713,7 @@ msgid "Credit History for %1$s · Total: %2$d credits" msgstr "" -#: includes/addons/credits/user.php:140 includes/addons/credits/user.php:682 +#: includes/addons/credits/user.php:140 includes/addons/credits/user.php:654 #, php-format msgid "Expiring at %s" msgstr "" @@ -1723,13 +1723,13 @@ msgid "Service Package history for %1$s · Total: %2$d sessions" msgstr "" -#: includes/addons/credits/user.php:178 includes/addons/credits/user.php:241 +#: includes/addons/credits/user.php:178 includes/addons/credits/user.php:227 msgid "Delete Record" msgstr "" #: includes/addons/credits/user.php:194 -#: includes/addons/multi-vendor/includes/user.php:652 -#: includes/front-listing.php:192 +#: includes/addons/multi-vendor/includes/user.php:828 +#: includes/front-listing.php:261 msgid "Print All" msgstr "" @@ -1738,122 +1738,122 @@ msgid "Current credits: %s" msgstr "" -#: includes/addons/credits/user.php:287 +#: includes/addons/credits/user.php:259 msgid "Purchased" msgstr "" -#: includes/addons/credits/user.php:289 +#: includes/addons/credits/user.php:261 msgid "Deposited" msgstr "" -#: includes/addons/credits/user.php:293 +#: includes/addons/credits/user.php:265 msgid "Refunded" msgstr "" -#: includes/addons/credits/user.php:295 includes/class.booking.php:1204 +#: includes/addons/credits/user.php:267 includes/class.booking.php:1204 msgid "Expired" msgstr "" -#: includes/addons/credits/user.php:357 includes/custom-texts.php:862 +#: includes/addons/credits/user.php:329 includes/custom-texts.php:871 msgid "Packages" msgstr "" -#: includes/addons/credits/user.php:360 +#: includes/addons/credits/user.php:332 msgid "Opens a dialog box to add package sessions" msgstr "" -#: includes/addons/credits/user.php:361 +#: includes/addons/credits/user.php:333 msgid "Add Package" msgstr "" -#: includes/addons/credits/user.php:371 +#: includes/addons/credits/user.php:343 msgid "Opens a dialog box to add credits" msgstr "" -#: includes/addons/credits/user.php:372 +#: includes/addons/credits/user.php:344 msgid "Add Credit" msgstr "" -#: includes/addons/credits/user.php:375 +#: includes/addons/credits/user.php:347 msgid "Recalculate after delete" msgstr "" -#: includes/addons/credits/user.php:377 +#: includes/addons/credits/user.php:349 msgid "" "After deleting a record, recalculates credits by adding/subtracting deleted " "amount" msgstr "" -#: includes/addons/credits/user.php:450 +#: includes/addons/credits/user.php:422 msgid "Add Package Session to USER" msgstr "" -#: includes/addons/credits/user.php:450 +#: includes/addons/credits/user.php:422 msgid "Add Credit to USER" msgstr "" -#: includes/addons/credits/user.php:588 +#: includes/addons/credits/user.php:560 msgid "Plan/Wallet" msgstr "" -#: includes/addons/credits/user.php:599 +#: includes/addons/credits/user.php:571 msgid "Sessions to add" msgstr "" -#: includes/addons/credits/user.php:599 +#: includes/addons/credits/user.php:571 msgid "Credits to add" msgstr "" -#: includes/addons/credits/user.php:604 +#: includes/addons/credits/user.php:576 #: includes/addons/seasonal-working-hours.php:254 -#: includes/admin/bookings.php:711 includes/custom-texts.php:1169 -#: includes/freeons/categories/categories.php:383 +#: includes/admin/bookings.php:711 includes/custom-texts.php:1175 +#: includes/freeons/categories/categories.php:376 #: includes/freeons/manual-payments/manual-payments.php:111 msgid "Note" msgstr "" -#: includes/addons/credits/user.php:613 +#: includes/addons/credits/user.php:585 #: includes/addons/locations/locations-list.php:889 -#: includes/addons/multi-vendor/admin/commissions-list.php:336 -#: includes/addons/multi-vendor/admin/commissions-list.php:1176 +#: includes/addons/multi-vendor/admin/commissions-list.php:343 +#: includes/addons/multi-vendor/admin/commissions-list.php:1243 #: includes/addons/multi-vendor/admin/vendors-list.php:913 #: includes/addons/service-providers/workers-list.php:1073 #: includes/admin/bookings.php:1760 includes/admin/clients.php:850 -#: includes/admin/services-list.php:1299 includes/admin/tinymce.php:298 -#: includes/custom-texts.php:873 includes/custom-texts.php:876 +#: includes/admin/services-list.php:1300 includes/admin/tinymce.php:298 +#: includes/custom-texts.php:882 includes/custom-texts.php:885 #: includes/freeons/manual-payments/manual-payments.php:120 -#: includes/schedules.php:538 +#: includes/functions.listing.php:249 includes/schedules.php:553 msgid "Cancel" msgstr "" -#: includes/addons/credits/user.php:614 +#: includes/addons/credits/user.php:586 #: includes/freeons/manual-payments/manual-payments.php:122 msgid "Add" msgstr "" -#: includes/addons/credits/user.php:629 includes/addons/credits/user.php:701 +#: includes/addons/credits/user.php:601 includes/addons/credits/user.php:673 msgid "User ID not sent" msgstr "" -#: includes/addons/credits/user.php:633 +#: includes/addons/credits/user.php:605 msgid "Please enter a valid credit amount. Credits must be integer" msgstr "" -#: includes/addons/credits/user.php:639 +#: includes/addons/credits/user.php:611 msgid "No plan ID submitted. Refresh the page and try again" msgstr "" -#: includes/addons/credits/user.php:655 +#: includes/addons/credits/user.php:627 #, php-format msgid "User #%1$d %2$s: %3$s" msgstr "" -#: includes/addons/credits/user.php:657 +#: includes/addons/credits/user.php:629 #, php-format msgid "User #%1$d %2$s deposited" msgstr "" -#: includes/addons/credits/user.php:705 +#: includes/addons/credits/user.php:677 msgid "Credit record ID not sent" msgstr "" @@ -1997,7 +1997,7 @@ msgstr "" #: includes/addons/event-bookings/event-admin.php:247 -#: includes/admin/services-list.php:1515 includes/constant-data.php:453 +#: includes/admin/services-list.php:1516 includes/constant-data.php:464 msgid "Background Color" msgstr "" @@ -2006,18 +2006,18 @@ msgstr "" #: includes/addons/event-bookings/event-admin.php:259 -#: includes/addons/group-bookings.php:116 +#: includes/addons/group-bookings.php:121 msgid "Group Bookings" msgstr "" #: includes/addons/event-bookings/event-admin.php:262 -#: includes/addons/group-bookings.php:1421 +#: includes/addons/group-bookings.php:1438 #: includes/addons/multi-vendor/includes/flexible-price.php:362 #: includes/addons/recurring-appointments.php:1221 #: includes/addons/service-bundles.php:1167 #: includes/addons/variable-durations/selectable-durations.php:517 #: includes/addons/variable-durations/time-variant-durations.php:300 -#: includes/addons/waiting-list.php:940 includes/constant-data.php:355 +#: includes/addons/waiting-list.php:940 includes/constant-data.php:366 #: includes/freeons/limited-availability.php:228 msgid "Enable" msgstr "" @@ -2058,7 +2058,8 @@ msgstr "" #: includes/addons/event-bookings/event-admin.php:292 -#: includes/custom-texts.php:1053 includes/schedules.php:393 +#: includes/custom-texts.php:1059 includes/functions.listing.php:155 +#: includes/schedules.php:408 msgid "Location" msgstr "" @@ -2087,7 +2088,7 @@ msgstr "" #: includes/addons/event-bookings/event-admin.php:325 -#: includes/constant-data.php:670 includes/custom-texts.php:991 +#: includes/constant-data.php:688 includes/custom-texts.php:999 msgid "Enable Zoom" msgstr "" @@ -2229,7 +2230,7 @@ msgstr "" #: includes/addons/event-bookings/event-admin.php:538 -#: includes/custom-texts.php:889 includes/custom-texts.php:1275 +#: includes/custom-texts.php:898 includes/custom-texts.php:1281 #: includes/gateways.php:407 includes/gateways.php:522 msgid "Security Code" msgstr "" @@ -2264,8 +2265,9 @@ #: includes/addons/event-bookings/functions.event.php:196 #: includes/addons/online-meetings/zoom/zoom.php:554 #: includes/addons/online-meetings/zoom/zoom.php:692 -#: includes/admin/bookings.php:1683 includes/custom-texts.php:1310 -#: includes/custom-texts.php:1380 includes/schedules.php:425 +#: includes/admin/bookings.php:1683 includes/custom-texts.php:1316 +#: includes/custom-texts.php:1385 includes/functions.listing.php:187 +#: includes/schedules.php:440 msgid "Start" msgstr "" @@ -2274,13 +2276,13 @@ msgstr "" #: includes/addons/event-bookings/functions.event.php:206 -#: includes/admin/bookings.php:1705 includes/custom-texts.php:981 -#: includes/schedules.php:450 +#: includes/admin/bookings.php:1705 includes/custom-texts.php:989 +#: includes/functions.listing.php:212 includes/schedules.php:465 msgid "End" msgstr "" #: includes/addons/event-bookings/functions.event.php:213 -#: includes/custom-texts.php:1287 includes/custom-texts.php:1288 +#: includes/custom-texts.php:1293 includes/custom-texts.php:1294 msgid "Repeat" msgstr "" @@ -2356,11 +2358,11 @@ msgstr "" #: includes/addons/extras.php:909 includes/addons/service-bundles.php:1285 -#: includes/custom-texts.php:1291 +#: includes/custom-texts.php:1297 msgid "Select Service" msgstr "" -#: includes/addons/extras.php:1091 includes/custom-texts.php:1005 +#: includes/addons/extras.php:1091 includes/custom-texts.php:1013 msgid "Extra" msgstr "" @@ -2415,16 +2417,16 @@ msgid "Cannot connect to calendar" msgstr "" -#: includes/addons/google-calendar.php:337 includes/constant-data.php:458 -#: includes/constant-data.php:464 includes/constant-data.php:471 -#: includes/constant-data.php:474 +#: includes/addons/google-calendar.php:337 includes/constant-data.php:469 +#: includes/constant-data.php:475 includes/constant-data.php:482 +#: includes/constant-data.php:485 #, php-format msgid "%s Appointment" msgstr "" #: includes/addons/google-calendar.php:467 #: includes/addons/google-calendar.php:1925 -#: includes/addons/google-calendar.php:2128 includes/custom-texts.php:842 +#: includes/addons/google-calendar.php:2128 includes/custom-texts.php:851 msgid "Google Calendar" msgstr "" @@ -2433,70 +2435,70 @@ msgid "Error getting list of GCal calendars: %s" msgstr "" -#: includes/addons/google-calendar.php:935 +#: includes/addons/google-calendar.php:933 msgid "Blue" msgstr "" -#: includes/addons/google-calendar.php:936 +#: includes/addons/google-calendar.php:934 msgid "Green" msgstr "" -#: includes/addons/google-calendar.php:937 +#: includes/addons/google-calendar.php:935 msgid "Purple" msgstr "" -#: includes/addons/google-calendar.php:938 +#: includes/addons/google-calendar.php:936 msgid "Red" msgstr "" -#: includes/addons/google-calendar.php:939 +#: includes/addons/google-calendar.php:937 msgid "Yellow" msgstr "" -#: includes/addons/google-calendar.php:940 +#: includes/addons/google-calendar.php:938 msgid "Orange" msgstr "" -#: includes/addons/google-calendar.php:941 +#: includes/addons/google-calendar.php:939 msgid "Turquoise" msgstr "" -#: includes/addons/google-calendar.php:942 +#: includes/addons/google-calendar.php:940 msgid "Gray" msgstr "" -#: includes/addons/google-calendar.php:943 +#: includes/addons/google-calendar.php:941 msgid "Bold Blue" msgstr "" -#: includes/addons/google-calendar.php:944 +#: includes/addons/google-calendar.php:942 msgid "Bold Green" msgstr "" -#: includes/addons/google-calendar.php:945 +#: includes/addons/google-calendar.php:943 msgid "Bold Red" msgstr "" -#: includes/addons/google-calendar.php:957 +#: includes/addons/google-calendar.php:955 #: includes/addons/multi-language.php:2191 -#: includes/admin/display-settings.php:238 includes/custom-texts.php:957 +#: includes/admin/display-settings.php:238 includes/custom-texts.php:964 msgid "Default" msgstr "" -#: includes/addons/google-calendar.php:965 +#: includes/addons/google-calendar.php:963 msgid "GCal Event Color" msgstr "" -#: includes/addons/google-calendar.php:967 +#: includes/addons/google-calendar.php:965 msgid "Google Calendar event background color" msgstr "" -#: includes/addons/google-calendar.php:1191 +#: includes/addons/google-calendar.php:1189 #, php-format msgid "Test failed because connection could not be established. Code: %s" msgstr "" -#: includes/addons/google-calendar.php:1251 +#: includes/addons/google-calendar.php:1249 #, php-format msgid "GCal insert went wrong for Booking #%1$s. Error: %2$s" msgstr "" @@ -2538,8 +2540,8 @@ msgid "GCal ID" msgstr "" -#: includes/addons/google-calendar.php:2115 includes/custom-texts.php:1017 -#: includes/custom-texts.php:1018 +#: includes/addons/google-calendar.php:2115 includes/custom-texts.php:1024 +#: includes/custom-texts.php:1025 msgid "Google Meet" msgstr "" @@ -2550,7 +2552,11 @@ msgstr "" #: includes/addons/google-calendar.php:2117 -msgid "Join Hangouts" +#: includes/addons/online-meetings/zoom/zoom.php:593 +#: includes/addons/online-meetings/zoom/zoom.php:693 +#: includes/custom-texts.php:792 includes/custom-texts.php:1026 +#: includes/custom-texts.php:1383 +msgid "Join" msgstr "" #: includes/addons/google-calendar.php:2180 @@ -2639,7 +2645,8 @@ #: includes/addons/multi-vendor/includes/store-settings.php:191 #: includes/addons/online-meetings/zoom/zoom.php:760 #: includes/addons/online-meetings/zoom/zoom.php:778 -#: includes/admin/global-settings.php:542 +#: includes/admin/global-settings.php:645 +#: includes/admin/global-settings.php:660 msgid "Select statuses" msgstr "" @@ -2690,7 +2697,7 @@ #: includes/addons/google-calendar.php:2480 #: includes/addons/google-calendar.php:2599 #: includes/addons/google-calendar.php:2693 -#: includes/addons/multi-vendor/admin/commission-settings.php:158 +#: includes/addons/multi-vendor/admin/commission-settings.php:170 msgid "Website" msgstr "" @@ -2807,7 +2814,7 @@ "this page." msgstr "" -#: includes/addons/google-calendar.php:2755 includes/assets.php:367 +#: includes/addons/google-calendar.php:2755 includes/assets.php:337 msgid "" "This action will clear internal authorization token and you will need to " "authorize again. Use it if configuration could not be proceeded as described." @@ -3068,202 +3075,203 @@ msgid "WP BASE <-> GCal" msgstr "" -#: includes/addons/group-bookings.php:388 +#: includes/addons/group-bookings.php:393 #, php-format msgid "This booking is for %d clients" msgstr "" -#: includes/addons/group-bookings.php:1355 +#: includes/addons/group-bookings.php:1372 msgid "Participant name" msgstr "" -#: includes/addons/group-bookings.php:1356 +#: includes/addons/group-bookings.php:1373 msgid "Participant email" msgstr "" -#: includes/addons/group-bookings.php:1391 +#: includes/addons/group-bookings.php:1408 msgid "Group bookings enabled for this service" msgstr "" -#: includes/addons/group-bookings.php:1423 +#: includes/addons/group-bookings.php:1440 msgid "Check to enable seats/pax/guests selection on the front end" msgstr "" -#: includes/addons/group-bookings.php:1426 +#: includes/addons/group-bookings.php:1443 msgid "Minimum Selectable" msgstr "" -#: includes/addons/group-bookings.php:1428 +#: includes/addons/group-bookings.php:1445 msgid "" "Minimum number of selectable seats. If left empty, minimum value will be 1. " "If minimum and maximum selectables are equal, pax selection element will be " "hidden." msgstr "" -#: includes/addons/group-bookings.php:1431 +#: includes/addons/group-bookings.php:1448 msgid "Maximum Selectable" msgstr "" -#: includes/addons/group-bookings.php:1433 +#: includes/addons/group-bookings.php:1450 #, php-format msgid "" "Maximum number of selectable seats. If left empty, capacity of the service " "(%d) will be taken." msgstr "" -#: includes/addons/group-bookings.php:1436 +#: includes/addons/group-bookings.php:1453 msgid "Slot Closed from Pax" msgstr "" -#: includes/addons/group-bookings.php:1438 +#: includes/addons/group-bookings.php:1455 #, php-format msgid "" "Number of booked seats after which slot will be regarded full. If left " "empty, maximum number of selectable seats (%d) will be taken." msgstr "" -#: includes/addons/group-bookings.php:1445 +#: includes/addons/group-bookings.php:1462 msgid "Participant Fields" msgstr "" -#: includes/addons/group-bookings.php:1453 +#: includes/addons/group-bookings.php:1470 msgid "Yes, optional" msgstr "" -#: includes/addons/group-bookings.php:1454 +#: includes/addons/group-bookings.php:1471 msgid "Yes, required" msgstr "" -#: includes/addons/group-bookings.php:1456 +#: includes/addons/group-bookings.php:1473 #, php-format msgid "" "Whether to allow client provide a list of %s of participants on the " "confirmation form." msgstr "" -#: includes/addons/group-bookings.php:1464 +#: includes/addons/group-bookings.php:1481 msgid "Email to Participants" msgstr "" -#: includes/addons/group-bookings.php:1467 +#: includes/addons/group-bookings.php:1484 msgid "Email Types" msgstr "" -#: includes/addons/group-bookings.php:1469 +#: includes/addons/group-bookings.php:1486 msgid "" "Participants whose emails are provided may receive copy of the email sent to " "the owner of the booking. This setting determines which emails they will " "receive." msgstr "" -#: includes/addons/group-bookings.php:1472 +#: includes/addons/group-bookings.php:1489 msgid "Method of Copy" msgstr "" -#: includes/addons/group-bookings.php:1474 +#: includes/addons/group-bookings.php:1491 msgid "Cc" msgstr "" -#: includes/addons/group-bookings.php:1475 +#: includes/addons/group-bookings.php:1492 msgid "Bcc" msgstr "" -#: includes/addons/group-bookings.php:1477 +#: includes/addons/group-bookings.php:1494 msgid "" "Copy email can be sent as cc (carbon copy) or bcc (blind carbon copy). In " "the latter case, recipients cannot see each other's email address." msgstr "" -#: includes/addons/group-bookings.php:1499 +#: includes/addons/group-bookings.php:1516 msgid "Person Types" msgstr "" -#: includes/addons/group-bookings.php:1503 +#: includes/addons/group-bookings.php:1520 msgid "Add Person Type" msgstr "" -#: includes/addons/group-bookings.php:1533 +#: includes/addons/group-bookings.php:1550 #, php-format msgid "Person Type #%d" msgstr "" -#: includes/addons/group-bookings.php:1533 +#: includes/addons/group-bookings.php:1550 msgid "Delete Type" msgstr "" -#: includes/addons/group-bookings.php:1536 includes/constant-data.php:636 +#: includes/addons/group-bookings.php:1553 includes/constant-data.php:654 msgid "Label" msgstr "" -#: includes/addons/group-bookings.php:1540 +#: includes/addons/group-bookings.php:1557 msgid "Label to be displayed on the front end, e.g. Adult, Children" msgstr "" -#: includes/addons/group-bookings.php:1543 includes/admin/bookings.php:1581 -#: includes/custom-texts.php:999 includes/custom-texts.php:1235 +#: includes/addons/group-bookings.php:1560 includes/admin/bookings.php:1581 +#: includes/custom-texts.php:1007 includes/custom-texts.php:1240 msgid "Price" msgstr "" -#: includes/addons/group-bookings.php:1545 +#: includes/addons/group-bookings.php:1562 msgid "Price per person for this type" msgstr "" -#: includes/addons/group-bookings.php:1548 +#: includes/addons/group-bookings.php:1565 #: includes/admin/display-settings.php:208 msgid "Minimum" msgstr "" -#: includes/addons/group-bookings.php:1550 +#: includes/addons/group-bookings.php:1567 msgid "" "Minimum value that can be selected on the front end for this type. If left " "empty, zero is assumed except if all types are zero, the first type will be " "assumed 1." msgstr "" -#: includes/addons/group-bookings.php:1553 +#: includes/addons/group-bookings.php:1570 #: includes/addons/recurring-appointments.php:1256 msgid "Maximum" msgstr "" -#: includes/addons/group-bookings.php:1555 +#: includes/addons/group-bookings.php:1572 msgid "" "Maximum value that can be selected on the front end for this type. If left " "empty, service capacity will be taken as maximum." msgstr "" -#: includes/addons/group-bookings.php:1558 +#: includes/addons/group-bookings.php:1575 msgid "Pax Value" msgstr "" -#: includes/addons/group-bookings.php:1560 +#: includes/addons/group-bookings.php:1577 msgid "" "Number of pax each of this type corresponds to. Normally 1, but for a " "\"Couples\" person type, you should enter 2." msgstr "" -#: includes/addons/group-bookings.php:1576 +#: includes/addons/group-bookings.php:1593 msgid "Select email types" msgstr "" -#: includes/addons/group-bookings.php:1710 +#: includes/addons/group-bookings.php:1731 msgid "GROUP" msgstr "" -#: includes/addons/group-bookings.php:1733 includes/custom-texts.php:1203 -#: includes/custom-texts.php:1269 includes/freeons/test-bookings.php:568 +#: includes/addons/group-bookings.php:1754 +#: includes/addons/group-bookings.php:1816 includes/custom-texts.php:1209 +#: includes/custom-texts.php:1275 includes/freeons/test-bookings.php:568 msgid "Pax" msgstr "" -#: includes/addons/locations.php:112 includes/addons/locations.php:905 +#: includes/addons/locations.php:110 includes/addons/locations.php:884 #: includes/addons/locations/locations-list.php:94 -#: includes/admin/services-list.php:1186 includes/constant-data.php:446 -#: includes/custom-texts.php:1054 includes/functions.internal.php:1620 +#: includes/admin/services-list.php:1187 includes/constant-data.php:457 +#: includes/custom-texts.php:1060 includes/functions.internal.php:1620 msgid "Locations" msgstr "" -#: includes/addons/locations.php:974 +#: includes/addons/locations.php:953 #: includes/addons/multi-vendor/admin/vendor-settings.php:168 -#: includes/addons/sms.php:499 includes/admin/global-settings.php:808 +#: includes/addons/sms.php:499 includes/admin/global-settings.php:942 #: includes/functions.internal.php:2307 includes/functions.internal.php:2325 msgid "General" msgstr "" @@ -3283,23 +3291,23 @@ #: includes/addons/locations/locations-list.php:185 #: includes/addons/service-providers/workers-list.php:230 #: includes/admin/bookings.php:165 includes/admin/clients.php:171 -#: includes/admin/services-list.php:194 includes/admin/transactions.php:118 +#: includes/admin/services-list.php:195 includes/admin/transactions.php:118 msgid "Columns" msgstr "" #: includes/addons/locations/locations-list.php:272 #: includes/addons/service-providers/workers-list.php:317 #: includes/admin/bookings.php:363 includes/admin/clients.php:293 -#: includes/admin/services-list.php:339 includes/admin/transactions.php:442 -#: includes/schedules.php:1020 +#: includes/admin/services-list.php:340 includes/admin/transactions.php:442 +#: includes/schedules.php:1232 msgid "Open toolbar" msgstr "" #: includes/addons/locations/locations-list.php:278 #: includes/addons/service-providers/workers-list.php:323 #: includes/admin/bookings.php:369 includes/admin/clients.php:299 -#: includes/admin/services-list.php:345 includes/admin/transactions.php:448 -#: includes/schedules.php:1026 +#: includes/admin/services-list.php:346 includes/admin/transactions.php:448 +#: includes/schedules.php:1238 msgid "Close toolbar" msgstr "" @@ -3319,16 +3327,16 @@ msgstr "" #: includes/addons/locations/locations-list.php:425 -#: includes/addons/multi-vendor/admin/commissions-list.php:739 +#: includes/addons/multi-vendor/admin/commissions-list.php:746 #: includes/addons/service-providers/workers-list.php:514 #: includes/admin/bookings.php:843 includes/admin/dashboard.php:1064 -#: includes/admin/services-list.php:633 includes/admin/transactions.php:603 +#: includes/admin/services-list.php:634 includes/admin/transactions.php:605 msgid "Filter" msgstr "" #: includes/addons/locations/locations-list.php:439 #: includes/addons/service-providers/workers-list.php:528 -#: includes/admin/bookings.php:412 includes/admin/services-list.php:647 +#: includes/admin/bookings.php:412 includes/admin/services-list.php:648 #: includes/admin/transactions.php:492 msgid "Clear Filters" msgstr "" @@ -3354,17 +3362,17 @@ #: includes/addons/multi-vendor/admin/vendors-list.php:464 #: includes/addons/service-providers/workers-list.php:554 #: includes/admin/bookings.php:709 includes/admin/clients.php:463 -#: includes/custom-texts.php:783 includes/custom-texts.php:1056 +#: includes/custom-texts.php:784 includes/custom-texts.php:1062 msgid "Address" msgstr "" #: includes/addons/locations/locations-list.php:467 -#: includes/addons/multi-vendor/admin/commissions-list.php:665 +#: includes/addons/multi-vendor/admin/commissions-list.php:672 #: includes/addons/multi-vendor/admin/vendors-list.php:469 #: includes/addons/service-providers/workers-list.php:560 #: includes/admin/bookings.php:716 includes/admin/clients.php:469 -#: includes/admin/services-list.php:536 includes/admin/transactions.php:477 -#: includes/custom-texts.php:1268 +#: includes/admin/services-list.php:537 includes/admin/transactions.php:477 +#: includes/custom-texts.php:1274 msgid "Search" msgstr "" @@ -3378,11 +3386,10 @@ msgstr "" #: includes/addons/locations/locations-list.php:487 -#: includes/addons/multi-vendor/admin/commissions-list.php:762 #: includes/addons/multi-vendor/admin/vendors-list.php:498 #: includes/addons/service-providers/workers-list.php:580 #: includes/admin/bookings.php:896 includes/admin/clients.php:491 -#: includes/admin/services-list.php:695 +#: includes/admin/services-list.php:696 msgid "Change" msgstr "" @@ -3392,10 +3399,10 @@ msgstr "" #: includes/addons/locations/locations-list.php:587 -#: includes/addons/multi-vendor/admin/commissions-list.php:928 +#: includes/addons/multi-vendor/admin/commissions-list.php:968 #: includes/addons/multi-vendor/admin/vendors-list.php:611 #: includes/addons/service-providers/workers-list.php:686 -#: includes/admin/clients.php:581 includes/admin/services-list.php:833 +#: includes/admin/clients.php:581 includes/admin/services-list.php:834 msgid "No matching records have been found." msgstr "" @@ -3403,11 +3410,11 @@ #: includes/addons/locations/locations-list.php:724 #: includes/addons/locations/locations-list.php:1369 #: includes/addons/service-providers.php:686 -#: includes/addons/service-providers.php:893 +#: includes/addons/service-providers.php:895 #: includes/addons/service-providers/workers-list.php:826 #: includes/addons/service-providers/workers-list.php:1622 #: includes/admin/bookings.php:1256 includes/admin/bookings.php:2340 -#: includes/admin/services-list.php:1007 includes/admin/services-list.php:2020 +#: includes/admin/services-list.php:1008 includes/admin/services-list.php:2029 #, php-format msgid "%s is editing" msgstr "" @@ -3425,25 +3432,25 @@ #: includes/addons/locations/locations-list.php:1007 #: includes/addons/multi-vendor/admin/vendors-list.php:714 #: includes/addons/service-providers/workers-list.php:806 -#: includes/admin/services-list.php:1050 includes/admin/services-list.php:1069 -#: includes/admin/services-list.php:1088 includes/admin/services-list.php:1533 +#: includes/admin/services-list.php:1051 includes/admin/services-list.php:1070 +#: includes/admin/services-list.php:1089 includes/admin/services-list.php:1534 #, php-format msgid " and %d more" msgstr "" #: includes/addons/locations/locations-list.php:836 #: includes/addons/seasonal-working-hours.php:436 -#: includes/addons/user-defined-fields.php:1461 includes/admin/help.php:398 +#: includes/addons/user-defined-fields.php:1476 includes/admin/help.php:398 #: includes/admin/help.php:404 includes/admin/help.php:410 -#: includes/admin/help.php:416 includes/admin/services-list.php:1166 -#: includes/custom-texts.php:1254 -#: includes/freeons/categories/categories.php:455 +#: includes/admin/help.php:416 includes/admin/services-list.php:1167 +#: includes/custom-texts.php:1260 +#: includes/freeons/categories/categories.php:448 msgid "Required" msgstr "" #: includes/addons/locations/locations-list.php:849 #: includes/addons/locations/locations-list.php:859 -#: includes/custom-texts.php:1075 +#: includes/custom-texts.php:1081 msgid "Manager" msgstr "" @@ -3452,13 +3459,13 @@ msgstr "" #: includes/addons/locations/locations-list.php:853 -#: includes/admin/services-list.php:1176 +#: includes/admin/services-list.php:1177 msgid "You" msgstr "" #: includes/addons/locations/locations-list.php:863 -#: includes/addons/waiting-list.php:945 includes/admin/services-list.php:1192 -#: includes/custom-texts.php:882 includes/custom-texts.php:987 +#: includes/addons/waiting-list.php:945 includes/admin/services-list.php:1193 +#: includes/custom-texts.php:891 includes/custom-texts.php:995 msgid "Capacity" msgstr "" @@ -3476,8 +3483,8 @@ #: includes/addons/locations/locations-list.php:875 #: includes/addons/locations/locations-list.php:1055 -#: includes/admin/services-list.php:1240 includes/admin/services-list.php:1586 -#: includes/custom-texts.php:962 +#: includes/admin/services-list.php:1241 includes/admin/services-list.php:1589 +#: includes/custom-texts.php:969 msgid "Connected Post" msgstr "" @@ -3489,12 +3496,13 @@ msgstr "" #: includes/addons/locations/locations-list.php:892 -#: includes/addons/multi-vendor/admin/commissions-list.php:1179 +#: includes/addons/multi-vendor/admin/commissions-list.php:1246 #: includes/addons/multi-vendor/admin/vendors-list.php:916 #: includes/addons/service-providers/workers-list.php:1076 #: includes/admin/bookings.php:1775 includes/admin/clients.php:853 -#: includes/admin/services-list.php:1307 includes/assets.php:360 -#: includes/custom-texts.php:1347 includes/schedules.php:553 +#: includes/admin/services-list.php:1308 includes/assets.php:330 +#: includes/custom-texts.php:1353 includes/functions.listing.php:264 +#: includes/schedules.php:568 msgid "Update" msgstr "" @@ -3507,20 +3515,20 @@ msgstr "" #: includes/addons/locations/locations-list.php:970 -#: includes/admin/services-list.php:1501 +#: includes/admin/services-list.php:1502 msgid "You are not the owner or admin. Changes will not be saved." msgstr "" #: includes/addons/locations/locations-list.php:970 -#: includes/admin/services-list.php:1501 +#: includes/admin/services-list.php:1502 msgid "(Read Only)" msgstr "" #: includes/addons/locations/locations-list.php:994 #: includes/addons/seasonal-working-hours.php:553 -#: includes/admin/services-list.php:91 includes/constant-data.php:618 -#: includes/custom-texts.php:865 includes/custom-texts.php:1298 -#: includes/custom-texts.php:1301 includes/functions.internal.php:1629 +#: includes/admin/services-list.php:92 includes/constant-data.php:636 +#: includes/custom-texts.php:874 includes/custom-texts.php:1304 +#: includes/custom-texts.php:1307 includes/functions.internal.php:1629 #: includes/holidays.php:220 includes/notices.php:399 includes/wh.php:1305 msgid "Services" msgstr "" @@ -3535,7 +3543,7 @@ #: includes/addons/multi-vendor/admin/vendor-settings.php:672 #: includes/addons/seasonal-working-hours.php:530 #: includes/addons/service-providers/workers-list.php:330 -#: includes/admin/services-list.php:1541 includes/functions.internal.php:1637 +#: includes/admin/services-list.php:1542 includes/functions.internal.php:1637 #: includes/holidays.php:199 includes/wh.php:1283 msgid "Service Providers" msgstr "" @@ -3557,19 +3565,19 @@ msgstr "" #: includes/addons/locations/locations-list.php:1053 -#: includes/admin/services-list.php:910 includes/admin/services-list.php:1584 -#: includes/admin/services-list.php:1824 +#: includes/admin/services-list.php:911 includes/admin/services-list.php:1587 +#: includes/admin/services-list.php:1833 #, php-format msgid "Created at: %s" msgstr "" #: includes/addons/locations/locations-list.php:1071 -#: includes/admin/services-list.php:1602 +#: includes/admin/services-list.php:1605 msgid "Main Image" msgstr "" #: includes/addons/locations/locations-list.php:1073 -#: includes/admin/services-list.php:1604 includes/admin/setup.php:113 +#: includes/admin/services-list.php:1607 includes/admin/setup.php:113 msgid "Upload disabled" msgstr "" @@ -3580,7 +3588,7 @@ msgstr "" #: includes/addons/locations/locations-list.php:1105 -#: includes/admin/services-list.php:1636 +#: includes/admin/services-list.php:1639 #, php-format msgid "Created by: %s" msgstr "" @@ -3591,8 +3599,8 @@ msgstr "" #: includes/addons/locations/locations-list.php:1225 -#: includes/admin/bookings.php:2204 includes/admin/services-list.php:1848 -#: includes/schedules.php:783 +#: includes/admin/bookings.php:2204 includes/admin/services-list.php:1857 +#: includes/functions.listing.php:502 includes/schedules.php:808 msgid "Record could not be saved!" msgstr "" @@ -3601,20 +3609,21 @@ msgstr "" #: includes/addons/locations/locations-list.php:1229 -#: includes/addons/multi-vendor/admin/commissions-list.php:1275 +#: includes/addons/multi-vendor/admin/commissions-list.php:1350 #: includes/addons/multi-vendor/admin/vendors-list.php:1206 #: includes/addons/service-providers/workers-list.php:1374 #: includes/admin/bookings.php:2208 includes/admin/clients.php:999 -#: includes/admin/services-list.php:1852 +#: includes/admin/services-list.php:1861 msgid "Changes saved." msgstr "" #: includes/addons/locations/locations-list.php:1231 -#: includes/addons/multi-vendor/admin/commissions-list.php:1288 +#: includes/addons/multi-vendor/admin/commissions-list.php:1363 #: includes/addons/multi-vendor/admin/vendors-list.php:1230 #: includes/addons/service-providers/workers-list.php:1402 #: includes/admin/bookings.php:2210 includes/admin/clients.php:1017 -#: includes/admin/services-list.php:1854 includes/schedules.php:789 +#: includes/admin/services-list.php:1863 includes/functions.listing.php:508 +#: includes/schedules.php:814 msgid "You did not make any changes..." msgstr "" @@ -3627,11 +3636,11 @@ msgstr "" #: includes/addons/multi-language.php:2108 -#: includes/addons/multi-language.php:2153 includes/custom-texts.php:1283 +#: includes/addons/multi-language.php:2153 includes/custom-texts.php:1289 msgid "Select Language" msgstr "" -#: includes/addons/multi-language.php:2109 includes/constant-data.php:402 +#: includes/addons/multi-language.php:2109 includes/constant-data.php:413 msgid "Default Language" msgstr "" @@ -3640,7 +3649,7 @@ msgstr "" #: includes/addons/multi-language.php:2188 -#: includes/addons/multi-language.php:2461 includes/custom-texts.php:1045 +#: includes/addons/multi-language.php:2461 includes/custom-texts.php:1052 msgid "Language" msgstr "" @@ -3695,16 +3704,16 @@ #: includes/addons/multi-vendor.php:133 includes/addons/multi-vendor.php:142 #: includes/addons/multi-vendor/admin/vendors-list.php:103 #: includes/addons/multi-vendor/admin/vendors-list.php:284 -#: includes/custom-texts.php:1354 +#: includes/custom-texts.php:1360 msgid "Vendors" msgstr "" #: includes/addons/multi-vendor.php:134 -#: includes/addons/multi-vendor/admin/commission-settings.php:127 -#: includes/addons/multi-vendor/admin/commissions-list.php:73 -#: includes/addons/multi-vendor/admin/commissions-list.php:82 -#: includes/addons/multi-vendor/admin/commissions-list.php:228 -#: includes/custom-texts.php:839 +#: includes/addons/multi-vendor/admin/commission-settings.php:139 +#: includes/addons/multi-vendor/admin/commissions-list.php:78 +#: includes/addons/multi-vendor/admin/commissions-list.php:87 +#: includes/addons/multi-vendor/admin/commissions-list.php:235 +#: includes/custom-texts.php:848 msgid "Commissions" msgstr "" @@ -3735,40 +3744,40 @@ "Booking calendar hidden due to \"Hide Non-Vendor Booking Calendars\" setting" msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:142 +#: includes/addons/multi-vendor/admin/commission-settings.php:154 msgid "Do not use secondary commission" msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:143 +#: includes/addons/multi-vendor/admin/commission-settings.php:155 msgid "First Time Customer" msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:144 +#: includes/addons/multi-vendor/admin/commission-settings.php:156 msgid "Repeat Customer" msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:157 -#: includes/custom-texts.php:1353 +#: includes/addons/multi-vendor/admin/commission-settings.php:169 +#: includes/custom-texts.php:1359 msgid "Vendor" msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:176 +#: includes/addons/multi-vendor/admin/commission-settings.php:188 msgid "Commission by Vendor Roles" msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:199 +#: includes/addons/multi-vendor/admin/commission-settings.php:211 msgid "Rates" msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:206 +#: includes/addons/multi-vendor/admin/commission-settings.php:218 msgid "Commission (%)" msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:207 +#: includes/addons/multi-vendor/admin/commission-settings.php:219 msgid "Role of the Vendor" msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:232 +#: includes/addons/multi-vendor/admin/commission-settings.php:244 msgid "" "Enter distinct commissions that will be applied to certain vendor user " "roles. Selecting multiple roles for a particular rate is allowed. If vendor " @@ -3777,26 +3786,26 @@ "commissions for those vendors." msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:234 +#: includes/addons/multi-vendor/admin/commission-settings.php:246 msgid "" "A table where you can define which vendor role will receive how much " "commission will be revealed here after you select and save number of " "commission rates." msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:244 +#: includes/addons/multi-vendor/admin/commission-settings.php:256 msgid "Maximum commission" msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:245 +#: includes/addons/multi-vendor/admin/commission-settings.php:257 msgid "Minimum commission" msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:259 +#: includes/addons/multi-vendor/admin/commission-settings.php:271 msgid "Client Approval" msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:267 +#: includes/addons/multi-vendor/admin/commission-settings.php:279 msgid "" "Enabling Client Approval adds a new status \"Approved\" to the bookings. " "Using this status you can give time to your clients approve or dispute for " @@ -3806,338 +3815,454 @@ "template." msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:268 +#: includes/addons/multi-vendor/admin/commission-settings.php:280 msgid "You can use Approved status to filter bookings for commission payouts." msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:269 +#: includes/addons/multi-vendor/admin/commission-settings.php:281 msgid "" "This will also add another status \"Standby\". You can take disputed " "bookings into this status. Bookings in standby do not reserve any slot or do " "not change their status." msgstr "" -#: includes/addons/multi-vendor/admin/commission-settings.php:287 +#: includes/addons/multi-vendor/admin/commission-settings.php:298 +msgid "Pay Commissions with Stripe Connect" +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:306 +msgid "" +"You can pay vendor commissions using Stripe by the help of Stripe Connect. " +"Using the connection button on the Settings tab of their Account page, " +"vendors should register their business to Stripe and connect to your Stripe " +"account." +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:317 +msgid "Pay Only Manually" +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:318 +msgid "When booking is completed" +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:319 +msgid "When client approves the booking" +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:328 +#: includes/admin/bookings.php:706 includes/admin/clients.php:460 +#: includes/constant-data.php:467 +msgid "Client ID" +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:331 +msgid "" +"Stripe Client ID should be taken from <b>Settings > Connect > Onboarding " +"Options > OAuth</b> page of your Stripe account." +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:336 +msgid "Publishable Key" +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:339 +msgid "" +"Stripe Publishable Key and Secret Key should be taken from <b>Settings > " +"Developers > API Keys</b> page of your Stripe account." +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:344 +msgid "Secret Key" +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:348 +msgid "See Publishable Key" +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:353 +msgid "Redirect" +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:356 +#, php-format +msgid "" +"Add this URL to <b>Redirect</b> field on <b>Settings > Connect > Onboarding " +"Options > OAuth</b> page of your Stripe account: <code>%s</code>" +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:358 +#, php-format +msgid "" +"Create an Account page using <code>[app_account]</code> shortcode. This is " +"required for Stripe Connect. If you already have such a page, set it %s." +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:358 +msgid "in this setting here" +msgstr "" + +#: includes/addons/multi-vendor/admin/commission-settings.php:372 msgid "Save Vendor Settings" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:184 -#: includes/addons/multi-vendor/admin/commissions-list.php:981 -#: includes/addons/multi-vendor/admin/commissions-list.php:1129 -#: includes/custom-texts.php:1109 +#: includes/addons/multi-vendor/admin/commissions-list.php:189 +#: includes/addons/multi-vendor/admin/commissions-list.php:1188 +#: includes/custom-texts.php:1116 msgid "Commission ID" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:186 -#: includes/addons/multi-vendor/admin/commissions-list.php:657 -#: includes/addons/multi-vendor/admin/commissions-list.php:984 -#: includes/addons/multi-vendor/admin/commissions-list.php:1135 +#: includes/addons/multi-vendor/admin/commissions-list.php:191 +#: includes/addons/multi-vendor/admin/commissions-list.php:664 +#: includes/addons/multi-vendor/admin/commissions-list.php:1024 +#: includes/addons/multi-vendor/admin/commissions-list.php:1194 #: includes/addons/online-meetings/zoom/zoom.php:818 #: includes/admin/bookings.php:703 includes/admin/transactions.php:468 -#: includes/custom-texts.php:807 +#: includes/custom-texts.php:816 msgid "Booking ID" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:188 -#: includes/addons/multi-vendor/admin/commissions-list.php:988 +#: includes/addons/multi-vendor/admin/commissions-list.php:193 +#: includes/addons/multi-vendor/admin/commissions-list.php:1028 #: includes/admin/bookings.php:664 msgid "Booking Status" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:190 -#: includes/addons/multi-vendor/admin/commissions-list.php:658 -#: includes/addons/multi-vendor/admin/commissions-list.php:1141 -#: includes/admin/transactions.php:469 includes/custom-texts.php:1214 +#: includes/addons/multi-vendor/admin/commissions-list.php:195 +#: includes/addons/multi-vendor/admin/commissions-list.php:665 +#: includes/addons/multi-vendor/admin/commissions-list.php:1200 +#: includes/admin/transactions.php:469 includes/custom-texts.php:1220 msgid "Payment ID" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:192 -#: includes/custom-texts.php:1110 +#: includes/addons/multi-vendor/admin/commissions-list.php:197 +#: includes/custom-texts.php:1117 msgid "Rate" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:194 -#: includes/addons/multi-vendor/admin/commissions-list.php:994 +#: includes/addons/multi-vendor/admin/commissions-list.php:199 +#: includes/addons/multi-vendor/admin/commissions-list.php:1034 msgid "Provider/Owner" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:229 +#: includes/addons/multi-vendor/admin/commissions-list.php:201 +#: includes/addons/multi-vendor/admin/commissions-list.php:1040 +#: includes/addons/stripe/stripe.php:287 +msgid "Stripe" +msgstr "" + +#: includes/addons/multi-vendor/admin/commissions-list.php:236 #: includes/addons/multi-vendor/admin/vendors-list.php:285 #: includes/addons/seasonal-working-hours.php:707 msgid "Add New" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:256 +#: includes/addons/multi-vendor/admin/commissions-list.php:263 #: includes/functions.internal.php:2323 msgid "Reset" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:301 +#: includes/addons/multi-vendor/admin/commissions-list.php:308 msgid "Generate Payout File" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:307 +#: includes/addons/multi-vendor/admin/commissions-list.php:314 #: includes/freeons/export-import.php:1408 msgid "Choose start date" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:308 +#: includes/addons/multi-vendor/admin/commissions-list.php:315 #: includes/freeons/export-import.php:1409 msgid "Choose end date" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:309 +#: includes/addons/multi-vendor/admin/commissions-list.php:316 #, php-format msgid "Min. payment (%s)" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:311 +#: includes/addons/multi-vendor/admin/commissions-list.php:318 msgid "For Completed bookings" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:318 +#: includes/addons/multi-vendor/admin/commissions-list.php:325 #, php-format msgid "For %s bookings" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:320 +#: includes/addons/multi-vendor/admin/commissions-list.php:327 msgid "For bookings of any status" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:325 +#: includes/addons/multi-vendor/admin/commissions-list.php:332 msgid "Generate File" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:327 +#: includes/addons/multi-vendor/admin/commissions-list.php:334 msgid "" "This will generate a payout file for review. All three limit values are " "optional. Normally commissions are paid only for completed bookings, however " "you can select any booking status." msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:335 +#: includes/addons/multi-vendor/admin/commissions-list.php:342 msgid "Mark as Paid" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:338 +#: includes/addons/multi-vendor/admin/commissions-list.php:345 msgid "This will mark all unpaid commissions in the generated file as paid." msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:342 +#: includes/addons/multi-vendor/admin/commissions-list.php:349 msgid "Done" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:401 +#: includes/addons/multi-vendor/admin/commissions-list.php:408 msgid "Start:" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:402 +#: includes/addons/multi-vendor/admin/commissions-list.php:409 msgid "End:" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:403 +#: includes/addons/multi-vendor/admin/commissions-list.php:410 msgid "Minimum:" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:406 +#: includes/addons/multi-vendor/admin/commissions-list.php:413 msgid "Booking status:" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:408 +#: includes/addons/multi-vendor/admin/commissions-list.php:415 #, php-format msgid "No unpaid commissions found for criteria:%s" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:456 +#: includes/addons/multi-vendor/admin/commissions-list.php:463 #, php-format -msgid "%1$d commissions with IDs %2$s have been changed as paid by user: %3$s." +msgid "" +"%1$d commission records with IDs %2$s have been changed as paid by user: " +"%3$s." msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:462 +#: includes/addons/multi-vendor/admin/commissions-list.php:469 #, php-format msgid "%d records have been changed as paid." msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:464 +#: includes/addons/multi-vendor/admin/commissions-list.php:471 msgid "No records have been changed" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:654 +#: includes/addons/multi-vendor/admin/commissions-list.php:661 #: includes/addons/service-providers/workers-list.php:550 msgid "Provider Name" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:655 +#: includes/addons/multi-vendor/admin/commissions-list.php:662 #: includes/addons/service-providers/workers-list.php:551 msgid "Provider ID" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:656 +#: includes/addons/multi-vendor/admin/commissions-list.php:663 msgid "Provider email" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:657 +#: includes/addons/multi-vendor/admin/commissions-list.php:664 #: includes/admin/bookings.php:703 includes/admin/transactions.php:468 msgid "Multiple IDs separated with comma or space is possible" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:659 +#: includes/addons/multi-vendor/admin/commissions-list.php:666 #: includes/admin/transactions.php:470 msgid "Amount =" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:660 +#: includes/addons/multi-vendor/admin/commissions-list.php:667 #: includes/admin/transactions.php:471 msgid "Amount >" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:661 +#: includes/addons/multi-vendor/admin/commissions-list.php:668 #: includes/admin/transactions.php:472 msgid "Amount <" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:698 +#: includes/addons/multi-vendor/admin/commissions-list.php:705 msgid "Filter by payment month/week" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:712 +#: includes/addons/multi-vendor/admin/commissions-list.php:719 msgid "Filter by service provider" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:714 +#: includes/addons/multi-vendor/admin/commissions-list.php:721 #: includes/admin/bookings.php:828 includes/admin/dashboard.php:1045 msgid "Unassigned" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:729 +#: includes/addons/multi-vendor/admin/commissions-list.php:736 msgid "Filter by booking status" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:752 -#: includes/addons/multi-vendor/admin/vendors-list.php:483 -#: includes/admin/bookings.php:883 includes/admin/clients.php:483 -#: includes/admin/services-list.php:685 -msgid "Bulk status change" +#: includes/addons/multi-vendor/admin/commissions-list.php:760 +msgid "Bulk Actions" +msgstr "" + +#: includes/addons/multi-vendor/admin/commissions-list.php:761 +msgid "Change Status" +msgstr "" + +#: includes/addons/multi-vendor/admin/commissions-list.php:766 +msgid "Pay Commission" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:777 -#: includes/admin/bookings.php:912 includes/admin/services-list.php:662 +#: includes/addons/multi-vendor/admin/commissions-list.php:767 +msgid "Pay" +msgstr "" + +#: includes/addons/multi-vendor/admin/commissions-list.php:790 +#: includes/admin/bookings.php:912 includes/admin/services-list.php:663 #: includes/admin/transactions.php:504 msgid "Sort by" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:778 +#: includes/addons/multi-vendor/admin/commissions-list.php:791 msgid "Payment date (Earliest first)" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:779 +#: includes/addons/multi-vendor/admin/commissions-list.php:792 msgid "Payment date (Latest first)" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:780 +#: includes/addons/multi-vendor/admin/commissions-list.php:793 msgid "ID (Lowest first)" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:781 +#: includes/addons/multi-vendor/admin/commissions-list.php:794 msgid "ID (Highest first)" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:787 -#: includes/admin/bookings.php:925 includes/admin/services-list.php:671 +#: includes/addons/multi-vendor/admin/commissions-list.php:800 +#: includes/admin/bookings.php:925 includes/admin/services-list.php:672 #: includes/admin/transactions.php:513 msgid "Sort" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:814 +#: includes/addons/multi-vendor/admin/commissions-list.php:833 +#, php-format +msgid "%1$d commission records with IDs %2$s deleted by user: %3$s" +msgstr "" + +#: includes/addons/multi-vendor/admin/commissions-list.php:838 +#: includes/admin/services-list.php:758 +#, php-format +msgid "%d records have been deleted" +msgstr "" + +#: includes/addons/multi-vendor/admin/commissions-list.php:853 #, php-format -msgid "%1$d Commissions with IDs %2$s changed to %3$s by user: %4$s" +msgid "%1$d commission records with IDs %2$s changed to %3$s by user: %4$s" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:820 +#: includes/addons/multi-vendor/admin/commissions-list.php:859 #: includes/addons/multi-vendor/admin/vendors-list.php:544 -#: includes/admin/services-list.php:761 +#: includes/admin/services-list.php:762 #, php-format msgid "%d records have been changed" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:856 +#: includes/addons/multi-vendor/admin/commissions-list.php:896 #, php-format msgid "Commission(s) with id(s): %1$s deleted by user %2$s" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:941 +#: includes/addons/multi-vendor/admin/commissions-list.php:981 #: includes/admin/bookings.php:1034 includes/freeons/test-bookings.php:538 msgid "Permanently Delete Selected Records" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:941 +#: includes/addons/multi-vendor/admin/commissions-list.php:981 #: includes/admin/bookings.php:1034 includes/freeons/test-bookings.php:538 msgid "Clicking this button permanently deletes selected records" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:991 -#: includes/addons/multi-vendor/admin/commissions-list.php:1145 +#: includes/addons/multi-vendor/admin/commissions-list.php:1021 +msgid "Comm. ID" +msgstr "" + +#: includes/addons/multi-vendor/admin/commissions-list.php:1031 +#: includes/addons/multi-vendor/admin/commissions-list.php:1204 msgid "Rate (%)" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:997 -#: includes/addons/multi-vendor/admin/commissions-list.php:1149 +#: includes/addons/multi-vendor/admin/commissions-list.php:1037 +#: includes/addons/multi-vendor/admin/commissions-list.php:1208 #, php-format msgid "Amount (%s)" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:1063 +#: includes/addons/multi-vendor/admin/commissions-list.php:1107 msgid "Click to edit commission" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:1064 +#: includes/addons/multi-vendor/admin/commissions-list.php:1108 #: includes/addons/multi-vendor/admin/vendors-list.php:735 #: includes/admin/bookings.php:1299 includes/admin/clients.php:689 -#: includes/admin/transactions.php:857 includes/assets.php:357 -#: includes/custom-texts.php:971 includes/custom-texts.php:973 +#: includes/admin/transactions.php:859 includes/assets.php:327 +#: includes/custom-texts.php:978 includes/custom-texts.php:980 #: sample/sample-appointments-page.php:26 msgid "Edit" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:1131 -#: includes/custom-texts.php:944 +#: includes/addons/multi-vendor/admin/commissions-list.php:1190 +#: includes/custom-texts.php:951 msgid "Created" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:1139 +#: includes/addons/multi-vendor/admin/commissions-list.php:1198 #: includes/addons/sms.php:550 includes/addons/sms.php:583 #: includes/addons/sms.php:674 includes/addons/sms.php:706 -#: includes/admin/bookings.php:1505 includes/custom-texts.php:1241 -#: includes/custom-texts.php:1368 includes/freeons/test-bookings.php:598 -#: includes/schedules.php:415 +#: includes/admin/bookings.php:1505 includes/custom-texts.php:1246 +#: includes/custom-texts.php:1374 includes/freeons/test-bookings.php:598 +#: includes/functions.listing.php:177 includes/schedules.php:430 msgid "Provider" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:1157 -#: includes/addons/multi-vendor/includes/functions.multi-vendor.php:378 -#: includes/custom-texts.php:1195 includes/custom-texts.php:1336 +#: includes/addons/multi-vendor/admin/commissions-list.php:1216 +#: includes/addons/multi-vendor/includes/functions.multi-vendor.php:376 +#: includes/custom-texts.php:1201 includes/custom-texts.php:1342 msgid "Paid" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:1179 +#: includes/addons/multi-vendor/admin/commissions-list.php:1220 +#: includes/freeons/manual-payments/manual-payments.php:108 +msgid "Transaction ID" +msgstr "" + +#: includes/addons/multi-vendor/admin/commissions-list.php:1224 +msgid "Transaction Reference" +msgstr "" + +#: includes/addons/multi-vendor/admin/commissions-list.php:1246 msgid "Add Commission" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:1240 +#: includes/addons/multi-vendor/admin/commissions-list.php:1307 msgid "Provider does not exist!" msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:1303 +#: includes/addons/multi-vendor/admin/commissions-list.php:1378 #: includes/addons/multi-vendor/admin/vendors-list.php:1250 #: includes/addons/multi-vendor/admin/vendors-list.php:1350 -#: includes/admin/bookings.php:2215 includes/schedules.php:794 +#: includes/admin/bookings.php:2215 includes/schedules.php:819 msgid "Email has been sent." msgstr "" -#: includes/addons/multi-vendor/admin/commissions-list.php:1305 +#: includes/addons/multi-vendor/admin/commissions-list.php:1380 #: includes/addons/multi-vendor/admin/vendors-list.php:1252 #: includes/addons/multi-vendor/admin/vendors-list.php:1352 -#: includes/admin/bookings.php:2217 includes/schedules.php:798 +#: includes/admin/bookings.php:2217 includes/schedules.php:823 msgid "Email could NOT be sent!" msgstr "" @@ -4240,7 +4365,7 @@ msgstr "" #: includes/addons/multi-vendor/admin/vendor-settings.php:175 -#: includes/admin/global-settings.php:707 includes/custom-texts.php:813 +#: includes/admin/global-settings.php:841 includes/custom-texts.php:822 #: includes/login-register.php:206 includes/widgets.php:297 msgid "Auto" msgstr "" @@ -4259,7 +4384,7 @@ msgstr "" #: includes/addons/multi-vendor/admin/vendor-settings.php:187 -#: includes/admin/services-list.php:1548 includes/custom-texts.php:1369 +#: includes/admin/services-list.php:1549 includes/custom-texts.php:1375 msgid "Provider Free" msgstr "" @@ -4270,10 +4395,10 @@ #: includes/addons/multi-vendor/admin/vendor-settings.php:557 #: includes/addons/multi-vendor/admin/vendor-settings.php:636 #: includes/addons/multi-vendor/admin/vendor-settings.php:694 -#: includes/admin/global-settings.php:493 -#: includes/admin/global-settings.php:561 -#: includes/admin/global-settings.php:620 -#: includes/admin/global-settings.php:647 includes/wh.php:1386 +#: includes/admin/global-settings.php:578 +#: includes/admin/global-settings.php:683 +#: includes/admin/global-settings.php:754 +#: includes/admin/global-settings.php:781 includes/wh.php:1386 #: includes/wh.php:1417 msgid "Save Everything" msgstr "" @@ -4334,36 +4459,41 @@ msgid "Affiliates Manager (WPAM)" msgstr "" -#: includes/addons/multi-vendor/admin/vendor-settings.php:360 +#: includes/addons/multi-vendor/admin/vendor-settings.php:359 msgid "BuddyPress/BuddyBoss" msgstr "" -#: includes/addons/multi-vendor/admin/vendor-settings.php:361 +#: includes/addons/multi-vendor/admin/vendor-settings.php:360 msgid "GeoDirectory" msgstr "" -#: includes/addons/multi-vendor/admin/vendor-settings.php:362 +#: includes/addons/multi-vendor/admin/vendor-settings.php:361 msgid "Listeo" msgstr "" -#: includes/addons/multi-vendor/admin/vendor-settings.php:363 +#: includes/addons/multi-vendor/admin/vendor-settings.php:362 msgid "Listing Pro" msgstr "" +#: includes/addons/multi-vendor/admin/vendor-settings.php:363 +#: includes/admin/tinymce.php:229 +msgid "Other" +msgstr "" + #: includes/addons/multi-vendor/admin/vendor-settings.php:385 #: includes/addons/multi-vendor/admin/vendors-list.php:881 #: includes/addons/multi-vendor/admin/vendors-list.php:988 #: includes/addons/service-providers/workers-list.php:1053 #: includes/addons/service-providers/workers-list.php:1149 -#: includes/custom-texts.php:821 includes/custom-texts.php:1105 +#: includes/custom-texts.php:830 includes/custom-texts.php:1112 msgid "Bio Page" msgstr "" #: includes/addons/multi-vendor/admin/vendor-settings.php:398 #, php-format msgid "" -"When BuddyPress integration is active, below Bio Page settings have no " -"effect. Instead see %s." +"When BuddyPress integration is active and the only active listing " +"integration plugin, below Bio Page settings have no effect. Instead see %s." msgstr "" #: includes/addons/multi-vendor/admin/vendor-settings.php:398 @@ -4371,7 +4501,7 @@ msgstr "" #: includes/addons/multi-vendor/admin/vendor-settings.php:513 -#: includes/custom-texts.php:1314 +#: includes/custom-texts.php:1319 msgid "Store Page" msgstr "" @@ -4396,12 +4526,12 @@ msgstr "" #: includes/addons/multi-vendor/admin/vendor-settings.php:581 -#: includes/addons/online-meetings/agora/agora.php:672 -#: includes/addons/online-meetings/agora/agora.php:686 +#: includes/addons/online-meetings/agora/agora.php:1002 +#: includes/addons/online-meetings/agora/agora.php:1016 #: includes/addons/online-meetings/jitsi/jitsi.php:784 #: includes/addons/online-meetings/jitsi/jitsi.php:798 #: includes/addons/paypal-standard/paypal-standard.php:234 -#: includes/admin/global-settings.php:412 +#: includes/admin/global-settings.php:460 #: includes/payment-gateway-pay-later.php:89 msgid "Home page" msgstr "" @@ -4557,33 +4687,37 @@ "where <code>[app_account]</code> resides." msgstr "" -#: includes/addons/multi-vendor/admin/vendor-settings.php:848 +#: includes/addons/multi-vendor/admin/vendor-settings.php:851 msgid "Validation" msgstr "" -#: includes/addons/multi-vendor/admin/vendor-settings.php:849 +#: includes/addons/multi-vendor/admin/vendor-settings.php:852 msgid "Vendor Pending" msgstr "" -#: includes/addons/multi-vendor/admin/vendor-settings.php:850 +#: includes/addons/multi-vendor/admin/vendor-settings.php:853 #: includes/addons/multi-vendor/includes/approved.php:57 #: includes/addons/multi-vendor/includes/approved.php:387 #: includes/addons/multi-vendor/includes/functions.multi-vendor.php:31 -#: includes/custom-texts.php:810 +#: includes/custom-texts.php:819 msgid "Approved" msgstr "" -#: includes/addons/multi-vendor/admin/vendor-settings.php:851 +#: includes/addons/multi-vendor/admin/vendor-settings.php:854 #: includes/addons/multi-vendor/includes/functions.multi-vendor.php:32 msgid "Declined" msgstr "" -#: includes/addons/multi-vendor/admin/vendor-settings.php:859 +#: includes/addons/multi-vendor/admin/vendor-settings.php:855 +msgid "Commission Paid" +msgstr "" + +#: includes/addons/multi-vendor/admin/vendor-settings.php:863 #, php-format msgid "Settings for application %s email" msgstr "" -#: includes/addons/multi-vendor/admin/vendor-settings.php:940 +#: includes/addons/multi-vendor/admin/vendor-settings.php:944 #: includes/functions.internal.php:1463 msgid "Custom Posts" msgstr "" @@ -4609,7 +4743,7 @@ #: includes/addons/multi-vendor/admin/vendors-list.php:462 #: includes/addons/service-providers/workers-list.php:552 #: includes/admin/bookings.php:707 includes/admin/clients.php:461 -#: includes/custom-texts.php:891 includes/custom-texts.php:977 +#: includes/custom-texts.php:900 includes/custom-texts.php:986 #: includes/functions.internal.php:2319 msgid "Email" msgstr "" @@ -4617,17 +4751,23 @@ #: includes/addons/multi-vendor/admin/vendors-list.php:463 #: includes/addons/service-providers/workers-list.php:553 #: includes/admin/bookings.php:708 includes/admin/clients.php:462 -#: includes/custom-texts.php:897 includes/custom-texts.php:1222 +#: includes/custom-texts.php:906 includes/custom-texts.php:1228 msgid "Phone" msgstr "" #: includes/addons/multi-vendor/admin/vendors-list.php:465 #: includes/addons/service-providers/workers-list.php:555 #: includes/admin/bookings.php:710 includes/admin/clients.php:464 -#: includes/custom-texts.php:887 includes/custom-texts.php:907 +#: includes/custom-texts.php:896 includes/custom-texts.php:916 msgid "City" msgstr "" +#: includes/addons/multi-vendor/admin/vendors-list.php:483 +#: includes/admin/bookings.php:883 includes/admin/clients.php:483 +#: includes/admin/services-list.php:686 +msgid "Bulk status change" +msgstr "" + #: includes/addons/multi-vendor/admin/vendors-list.php:489 #: includes/admin/clients.php:484 msgid "Remove" @@ -4664,12 +4804,12 @@ #: includes/addons/multi-vendor/admin/vendors-list.php:887 #: includes/addons/service-providers/workers-list.php:1059 #: includes/addons/service-providers/workers-list.php:1714 -#: includes/custom-texts.php:1303 +#: includes/custom-texts.php:1309 msgid "Services Provided" msgstr "" #: includes/addons/multi-vendor/admin/vendors-list.php:893 -#: includes/custom-texts.php:1207 +#: includes/custom-texts.php:1213 msgid "PayPal Email" msgstr "" @@ -4801,7 +4941,7 @@ msgstr "" #: includes/addons/multi-vendor/includes/class.signup.php:554 -#: includes/custom-texts.php:1114 +#: includes/custom-texts.php:1121 msgid "Activation email could not be sent." msgstr "" @@ -4813,9 +4953,66 @@ msgid "You must select a store for new store client" msgstr "" +#: includes/addons/multi-vendor/includes/commissions.php:485 +#, php-format +msgid "Commission could not be paid. Check %s for details." +msgstr "" + +#: includes/addons/multi-vendor/includes/commissions.php:485 +#: includes/addons/multi-vendor/includes/commissions.php:668 +#: includes/constant-data.php:510 includes/constant-data.php:511 +#: includes/constant-data.php:512 includes/constant-data.php:585 +msgid "log file" +msgstr "" + +#: includes/addons/multi-vendor/includes/commissions.php:517 +#, php-format +msgid "Payout for booking #%d" +msgstr "" + +#: includes/addons/multi-vendor/includes/commissions.php:549 +#, php-format +msgid "" +"Commission of %1$s with ID %2$d could not be paid to vendor #%3$s. Reason: " +msgstr "" + +#: includes/addons/multi-vendor/includes/commissions.php:636 +#, php-format +msgid "Total %s has been transferred." +msgstr "" + +#: includes/addons/multi-vendor/includes/commissions.php:651 +#, php-format +msgid "%1$s commission paid to vendor %2$s. Notification email sent to %3$s" +msgstr "" + +#: includes/addons/multi-vendor/includes/commissions.php:654 +#, php-format +msgid "" +"%1$s commission paid to vendor %2$s. However, notification email could not " +"be sent to %3$s" +msgstr "" + +#: includes/addons/multi-vendor/includes/commissions.php:664 +#, php-format +msgid "%d notification email sent." +msgstr "" + +#: includes/addons/multi-vendor/includes/commissions.php:668 +#, php-format +msgid "" +"However there was %1$d notification email sending error. Check %2$s for " +"details." +msgstr "" + +#: includes/addons/multi-vendor/includes/commissions.php:671 +#, php-format +msgid "%d commissions paid. " +msgstr "" + #: includes/addons/multi-vendor/includes/dashboard.php:82 #: includes/admin/dashboard.php:59 includes/admin/toolbar.php:126 -#: includes/custom-texts.php:841 +#: includes/custom-texts.php:850 msgid "Dashboard" msgstr "" @@ -4889,73 +5086,20 @@ msgid "To Pax" msgstr "" -#: includes/addons/multi-vendor/includes/front-store.php:121 +#: includes/addons/multi-vendor/includes/front-store.php:120 msgid "You don't have any stores" msgstr "" -#: includes/addons/multi-vendor/includes/front-store.php:122 +#: includes/addons/multi-vendor/includes/front-store.php:121 #: includes/admin/toolbar.php:226 msgid "Store Management" msgstr "" -#: includes/addons/multi-vendor/includes/front-store.php:270 -msgid "" -"Creates a store management page to control bookings, clients, services, " -"providers related to the store. Only store manager can view this page. Store " -"managers act like admin for their stores." -msgstr "" - -#: includes/addons/multi-vendor/includes/front-store.php:272 -#: includes/constant-data.php:1565 -msgid "" -"Text that will be displayed to the users who are logged in or you don't " -"require a login. Default: \"\"" -msgstr "" - -#: includes/addons/multi-vendor/includes/front-store.php:273 -#: includes/constant-data.php:1566 -msgid "" -"Text that will be displayed to the users who are not logged in and you " -"require a login. LOGIN_PAGE and REGISTRATION_PAGE placeholders will be " -"replaced with your website's login and registration links respectively. " -"Default: \"You need to login to make an appointment. Click here to login: " -"LOGIN_PAGE OR click here to register: REGISTRATION_PAGE\"" -msgstr "" - -#: includes/addons/multi-vendor/includes/front-store.php:274 -msgid "" -"Title tag above the tabs. Enter 0 for no title. Default: Store Management " -"(No title)" -msgstr "" - -#: includes/addons/multi-vendor/includes/front-store.php:275 -msgid "" -"Name of the tabs to be excluded. Multiple entries separated with commas can " -"be set. Allowed values: dashboard, manage, schedules, clients, stores, " -"store_settings, services, working_hours, holidays, seasonal, payments, " -"commissions, gcal. Default: empty" -msgstr "" - -#: includes/addons/multi-vendor/includes/front-store.php:276 -#: includes/constant-data.php:1596 -msgid "" -"Requires Front End Management addon. Status of bookings to be displayed in " -"Manage Bookings tab. See status attribute of Front End Management " -"(app_manage) shortcode" -msgstr "" - -#: includes/addons/multi-vendor/includes/front-store.php:277 -#: includes/constant-data.php:1597 -msgid "" -"Requires both Front End Management and Export/Import addons. Whether add " -"Export CSV options in Manage Bookings tab. Set 0 to disable." -msgstr "" - #: includes/addons/multi-vendor/includes/functions.multi-vendor.php:30 #: includes/addons/sms.php:588 includes/admin/bookings.php:1795 -#: includes/admin/dashboard.php:667 includes/admin/global-settings.php:757 -#: includes/admin/global-settings.php:865 includes/custom-texts.php:1137 -#: includes/custom-texts.php:1218 +#: includes/admin/dashboard.php:667 includes/admin/global-settings.php:891 +#: includes/admin/global-settings.php:999 includes/custom-texts.php:1144 +#: includes/custom-texts.php:1224 msgid "Pending" msgstr "" @@ -4963,28 +5107,24 @@ msgid "Suspended" msgstr "" -#: includes/addons/multi-vendor/includes/functions.multi-vendor.php:136 +#: includes/addons/multi-vendor/includes/functions.multi-vendor.php:134 #, php-format msgid "Sending %s email to %s was success" msgstr "" -#: includes/addons/multi-vendor/includes/functions.multi-vendor.php:139 +#: includes/addons/multi-vendor/includes/functions.multi-vendor.php:137 #, php-format msgid "Sending %s email to %s failed" msgstr "" -#: includes/addons/multi-vendor/includes/functions.multi-vendor.php:379 +#: includes/addons/multi-vendor/includes/functions.multi-vendor.php:377 msgid "Unpaid" msgstr "" -#: includes/addons/multi-vendor/includes/functions.multi-vendor.php:380 +#: includes/addons/multi-vendor/includes/functions.multi-vendor.php:378 msgid "On hold" msgstr "" -#: includes/addons/multi-vendor/includes/functions.multi-vendor.php:527 -msgid "No services to list" -msgstr "" - #: includes/addons/multi-vendor/includes/install.php:25 msgid "WP BASE Vendor" msgstr "" @@ -5045,7 +5185,7 @@ msgstr "" #: includes/addons/multi-vendor/includes/shortcodes.php:68 -#: includes/addons/multi-vendor/includes/shortcodes.php:121 +#: includes/addons/multi-vendor/includes/shortcodes.php:124 msgid "Not a vendor" msgstr "" @@ -5053,13 +5193,22 @@ msgid "Check \"key\" attribute in app_vendor_meta shortcode" msgstr "" -#: includes/addons/multi-vendor/includes/shortcodes.php:137 +#: includes/addons/multi-vendor/includes/shortcodes.php:103 +#: includes/functions.front.php:1281 +msgid "My Services" +msgstr "" + +#: includes/addons/multi-vendor/includes/shortcodes.php:130 +msgid "No services to list" +msgstr "" + +#: includes/addons/multi-vendor/includes/shortcodes.php:152 msgid "" "Displays vendor information on their bio page, posts loop, BP Book Me page " "or BP Members Directory." msgstr "" -#: includes/addons/multi-vendor/includes/shortcodes.php:139 +#: includes/addons/multi-vendor/includes/shortcodes.php:154 msgid "" "Vendor information to be displayed. Allowed values: display_name, " "first_name, last_name, email, image_html, start_date, page_permalink (url), " @@ -5067,48 +5216,58 @@ "Default: \"\"" msgstr "" -#: includes/addons/multi-vendor/includes/shortcodes.php:140 +#: includes/addons/multi-vendor/includes/shortcodes.php:155 msgid "" "Parameter for certain variables. For image_html, image size in px. For " "page_link it is the link text, e.g \"Book Me\"; if left empty name of the " "vendor." msgstr "" -#: includes/addons/multi-vendor/includes/shortcodes.php:142 +#: includes/addons/multi-vendor/includes/shortcodes.php:157 msgid "" "<code>[app_vendor_meta key=\"page_link\" par=\"Book Me\"]</code> creates a " "link with text \"Book Me\" to vendor's bio page." msgstr "" -#: includes/addons/multi-vendor/includes/shortcodes.php:147 +#: includes/addons/multi-vendor/includes/shortcodes.php:162 msgid "" "Displays list of services provided by vendor with clickable links on their " "bio page, posts loop, BP Book Me page or BP Members Directory." msgstr "" -#: includes/addons/multi-vendor/includes/shortcodes.php:149 +#: includes/addons/multi-vendor/includes/shortcodes.php:164 msgid "" -"HTML element for the list. Set \"ul\" for unordered list, \"ol\" for ordered " -"list, leave empty for comma separated list (no HTML). Default: Comma " -"separated" +"HTML element for the list. Set \"grid\" for CSS grid view, \"ul\" for " +"unordered list, \"ol\" for ordered list, \"none\" for comma separated text " +"(no HTML). Default: \"grid\"" msgstr "" -#: includes/addons/multi-vendor/includes/shortcodes.php:150 -msgid "Optional title. Only for ul and ol elements. Default: empty" +#: includes/addons/multi-vendor/includes/shortcodes.php:165 +msgid "" +"Title. Not diplayed for comma separated text. Enter 0 to disable. Default: " +"\"My Services\"" msgstr "" -#: includes/addons/multi-vendor/includes/shortcodes.php:151 +#: includes/addons/multi-vendor/includes/shortcodes.php:166 msgid "Limit for number of services to display. Default: No limit" msgstr "" -#: includes/addons/multi-vendor/includes/shortcodes.php:152 +#: includes/addons/multi-vendor/includes/shortcodes.php:167 msgid "" "\"target\" hyperlink attribute for service page links. Set \"_blank\" to " "open the link in a new browser tab. Default: empty (link opened in the same " "tab)" msgstr "" -#: includes/addons/multi-vendor/includes/shortcodes.php:154 +#: includes/addons/multi-vendor/includes/shortcodes.php:168 +msgid "" +"Only when elm is \"grid\". Number of columns of grid element for desktop " +"devices (Width > 1024px). For devices with smaller screens, displayed " +"columns will be automatically reduced based on screen size. Allowed values: " +"1, 2, 3, 4. Default: 3" +msgstr "" + +#: includes/addons/multi-vendor/includes/shortcodes.php:170 msgid "" "<code>[app_vendor_services elm=\"ul\" title=\"My Services\" limit=\"5\" " "target=\"_blank\"]</code> creates an unordered list of services provided by " @@ -5116,6 +5275,60 @@ "link opens the post in a new browser tab." msgstr "" +#: includes/addons/multi-vendor/includes/shortcodes.php:176 +msgid "" +"Only when Multi Store mode is selected. Creates a store management page to " +"control bookings, clients, services, providers related to the store. Only " +"store manager can view this page. Store managers act like admin for their " +"stores." +msgstr "" + +#: includes/addons/multi-vendor/includes/shortcodes.php:178 +#: includes/constant-data.php:1585 +msgid "" +"Text that will be displayed to the users who are logged in or you don't " +"require a login. Default: \"\"" +msgstr "" + +#: includes/addons/multi-vendor/includes/shortcodes.php:179 +#: includes/constant-data.php:1586 +msgid "" +"Text that will be displayed to the users who are not logged in and you " +"require a login. LOGIN_PAGE and REGISTRATION_PAGE placeholders will be " +"replaced with your website's login and registration links respectively. " +"Default: \"You need to login to make an appointment. Click here to login: " +"LOGIN_PAGE OR click here to register: REGISTRATION_PAGE\"" +msgstr "" + +#: includes/addons/multi-vendor/includes/shortcodes.php:180 +msgid "" +"Title tag above the tabs. Enter 0 for no title. Default: Store Management " +"(No title)" +msgstr "" + +#: includes/addons/multi-vendor/includes/shortcodes.php:181 +msgid "" +"Name of the tabs to be excluded. Multiple entries separated with commas can " +"be set. Allowed values: dashboard, manage, schedules, clients, stores, " +"services, workers, working_hours, holidays, seasonal, payments, commissions, " +"gcal, store_settings. Default: empty" +msgstr "" + +#: includes/addons/multi-vendor/includes/shortcodes.php:182 +#: includes/constant-data.php:1616 +msgid "" +"Requires Front End Management addon. Status of bookings to be displayed in " +"Manage Bookings tab. See status attribute of Front End Management " +"(app_manage) shortcode" +msgstr "" + +#: includes/addons/multi-vendor/includes/shortcodes.php:183 +#: includes/constant-data.php:1617 +msgid "" +"Requires both Front End Management and Export/Import addons. Whether add " +"Export CSV options in Manage Bookings tab. Set 0 to disable." +msgstr "" + #: includes/addons/multi-vendor/includes/store-settings.php:83 msgid "All of your stores will be using these settings." msgstr "" @@ -5170,28 +5383,593 @@ msgstr "" #: includes/addons/multi-vendor/includes/store-settings.php:165 -#: includes/admin/global-settings.php:498 includes/admin/toolbar.php:129 -#: includes/custom-texts.php:864 includes/notices.php:335 -#: includes/schedules.php:103 includes/schedules.php:1033 +#: includes/admin/global-settings.php:583 includes/admin/toolbar.php:129 +#: includes/custom-texts.php:873 includes/notices.php:335 +#: includes/schedules.php:151 includes/schedules.php:1245 msgid "Schedules" msgstr "" -#: includes/addons/multi-vendor/includes/user.php:340 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:287 +#, php-format +msgid "Could not retrieve platform data: %s" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:349 +#, php-format +msgid "Could not retrieve country spec: %s" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:419 +msgid "Albania" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:420 +msgid "Algeria" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:421 +msgid "Angola" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:422 +msgid "Antigua and Barbuda" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:423 +msgid "Argentina" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:424 +msgid "Armenia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:425 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:554 +msgid "Australia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:426 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:555 +msgid "Austria" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:427 +msgid "Azerbaijan" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:428 +msgid "Bahamas" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:429 +msgid "Bahrain" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:430 +msgid "Bangladesh" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:431 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:556 +msgid "Belgium" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:432 +msgid "Benin" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:433 +msgid "Bhutan" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:434 +msgid "Bolivia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:435 +msgid "Bosnia and Herzegovina" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:436 +msgid "Botswana" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:437 +msgid "Brunei" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:438 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:557 +msgid "Bulgaria" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:439 +msgid "Cambodia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:440 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:558 +msgid "Canada" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:441 +msgid "Chile" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:442 +msgid "Colombia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:443 +msgid "Costa Rica" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:444 +msgid "Ivory Coast" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:445 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:559 +msgid "Croatia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:446 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:560 +msgid "Cyprus" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:447 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:561 +msgid "Czech Republic" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:448 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:562 +msgid "Denmark" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:449 +msgid "Dominican Republic" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:450 +msgid "Ecuador" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:451 +msgid "Egypt" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:452 +msgid "El Salvador" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:453 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:563 +msgid "Estonia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:454 +msgid "Ethiopia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:455 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:564 +msgid "Finland" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:456 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:565 +msgid "France" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:457 +msgid "Gabon" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:458 +msgid "Gambia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:459 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:566 +msgid "Germany" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:460 +msgid "Ghana" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:461 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:568 +msgid "Greece" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:462 +msgid "Guatemala" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:463 +msgid "Guyana" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:464 +msgid "Hong Kong" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:465 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:570 +msgid "Hungary" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:466 +msgid "Iceland" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:467 +msgid "India" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:468 +msgid "Indonesia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:469 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:571 +msgid "Ireland" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:470 +msgid "Israel" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:471 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:572 +msgid "Italy" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:472 +msgid "Jamaica" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:473 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:573 +msgid "Japan" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:474 +msgid "Jordan" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:475 +msgid "Kazakhstan" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:476 +msgid "Kenya" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:477 +msgid "Kuwait" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:478 +msgid "Laos" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:479 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:574 +msgid "Latvia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:480 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:575 +msgid "Liechtenstein" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:481 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:576 +msgid "Lithuania" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:482 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:577 +msgid "Luxembourg" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:483 +msgid "Macao" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:484 +msgid "Madagascar" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:485 +msgid "Malaysia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:486 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:578 +msgid "Malta" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:487 +msgid "Mauritius" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:488 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:579 +msgid "Mexico" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:489 +msgid "Moldova" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:490 +msgid "Monaco" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:491 +msgid "Mongolia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:492 +msgid "Morocco" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:493 +msgid "Mozambique" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:494 +msgid "Namibia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:495 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:580 +msgid "Netherlands" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:496 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:581 +msgid "New Zealand" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:497 +msgid "Niger" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:498 +msgid "Nigeria" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:499 +msgid "North Macedonia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:500 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:582 +msgid "Norway" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:501 +msgid "Oman" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:502 +msgid "Pakistan" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:503 +msgid "Panama" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:504 +msgid "Paraguay" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:505 +msgid "Peru" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:506 +msgid "Philippines" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:507 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:583 +msgid "Poland" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:508 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:584 +msgid "Portugal" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:509 +msgid "Qatar" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:510 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:585 +msgid "Romania" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:511 +msgid "Rwanda" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:512 +msgid "San Marino" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:513 +msgid "Saudi Arabia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:514 +msgid "Senegal" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:515 +msgid "Serbia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:516 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:586 +msgid "Singapore" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:517 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:587 +msgid "Slovakia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:518 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:588 +msgid "Slovenia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:519 +msgid "South Africa" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:520 +msgid "South Korea" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:521 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:589 +msgid "Spain" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:522 +msgid "Sri Lanka" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:523 +msgid "Saint Lucia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:524 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:590 +msgid "Sweden" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:525 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:591 +msgid "Switzerland" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:526 +msgid "Taiwan" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:527 +msgid "Tanzania" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:528 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:592 +msgid "Thailand" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:529 +msgid "Trinidad and Tobago" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:530 +msgid "Tunisia" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:531 +msgid "Turkey" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:532 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:593 +msgid "United Arab Emirates" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:533 +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:594 +msgid "United Kingdom" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:534 +msgid "Uruguay" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:535 +msgid "Uzbekistan" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:536 +msgid "Vietnam" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:567 +msgid "Gibraltar" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:569 +msgid "Hong Kong SAR China" +msgstr "" + +#: includes/addons/multi-vendor/includes/stripe-connect-client.php:595 +msgid "United States" +msgstr "" + +#: includes/addons/multi-vendor/includes/user.php:357 msgid "For display purposes only." msgstr "" -#: includes/addons/multi-vendor/includes/user.php:343 -#: includes/addons/multi-vendor/includes/user.php:398 +#: includes/addons/multi-vendor/includes/user.php:360 +#: includes/addons/multi-vendor/includes/user.php:415 #, php-format msgid "Min: %s" msgstr "" -#: includes/addons/multi-vendor/includes/user.php:346 -#: includes/addons/multi-vendor/includes/user.php:401 +#: includes/addons/multi-vendor/includes/user.php:363 +#: includes/addons/multi-vendor/includes/user.php:418 #, php-format msgid "Max: %s" msgstr "" +#: includes/addons/multi-vendor/includes/user.php:564 +msgid "You are connected with stripe." +msgstr "" + +#: includes/addons/multi-vendor/includes/user.php:566 +msgid "Disconnect Stripe Account" +msgstr "" + +#: includes/addons/multi-vendor/includes/user.php:569 +msgid "You are not connected with stripe." +msgstr "" + +#: includes/addons/multi-vendor/includes/user.php:574 +msgid "Connect with Stripe" +msgstr "" + +#: includes/addons/multi-vendor/includes/user.php:580 +msgid "Stripe Connect" +msgstr "" + +#: includes/addons/multi-vendor/includes/user.php:592 +msgid "" +"With Stripe Connect your business will be connected to Stripe account of the " +"website and you will be able to receive payouts via Stripe." +msgstr "" + +#: includes/addons/multi-vendor/includes/user.php:640 +msgid "" +"Please select your country, as this will be used to configure your Stripe " +"payment settings." +msgstr "" + #: includes/addons/multi-vendor/includes/workers-by-store.php:236 msgid "Select the store provider will be assigned to." msgstr "" @@ -5280,46 +6058,38 @@ "Jitsi." msgstr "" -#: includes/addons/online-meetings/agora/agora.php:617 -#: includes/addons/online-meetings/agora/agora.php:666 +#: includes/addons/online-meetings/agora/agora.php:948 +#: includes/addons/online-meetings/agora/agora.php:996 #: includes/addons/online-meetings/jitsi/jitsi.php:725 #: includes/addons/online-meetings/jitsi/jitsi.php:778 msgid "Meeting Room" msgstr "" -#: includes/addons/online-meetings/agora/agora.php:618 -#: includes/addons/online-meetings/agora/agora.php:680 +#: includes/addons/online-meetings/agora/agora.php:949 +#: includes/addons/online-meetings/agora/agora.php:1010 #: includes/addons/online-meetings/jitsi/jitsi.php:726 #: includes/addons/online-meetings/jitsi/jitsi.php:792 msgid "Waiting Room" msgstr "" -#: includes/addons/online-meetings/agora/agora.php:656 +#: includes/addons/online-meetings/agora/agora.php:986 msgid "Online Meetings - Agora" msgstr "" -#: includes/addons/online-meetings/agora/agora.php:675 +#: includes/addons/online-meetings/agora/agora.php:1005 #: includes/addons/online-meetings/jitsi/jitsi.php:787 msgid "" "Meeting Room Page where <code>[app_meeting_room]</code> resides. This page " "is required for meetings to take place." msgstr "" -#: includes/addons/online-meetings/agora/agora.php:689 +#: includes/addons/online-meetings/agora/agora.php:1019 #: includes/addons/online-meetings/jitsi/jitsi.php:801 msgid "" "Waiting Room Page where <code>[app_waiting_room]</code> resides. This page " "is required for early clients to wait until meeting time." msgstr "" -#: includes/addons/online-meetings/agora/agora.php:708 -msgid "Grid" -msgstr "" - -#: includes/addons/online-meetings/agora/agora.php:709 -msgid "Pinned" -msgstr "" - #: includes/addons/online-meetings/functions.om.php:123 #, php-format msgid "Online as of %s" @@ -5425,7 +6195,7 @@ msgstr "" #: includes/addons/online-meetings/zoom/zoom.php:542 -#: includes/custom-texts.php:1377 +#: includes/custom-texts.php:1382 msgid "Zoom ID" msgstr "" @@ -5439,12 +6209,12 @@ msgstr "" #: includes/addons/online-meetings/zoom/zoom.php:565 -#: includes/constant-data.php:671 +#: includes/constant-data.php:689 msgid "Zoom Host" msgstr "" #: includes/addons/online-meetings/zoom/zoom.php:574 -#: includes/constant-data.php:676 +#: includes/constant-data.php:694 msgid "Zoom Password" msgstr "" @@ -5456,12 +6226,6 @@ msgid "Zoom Join URL" msgstr "" -#: includes/addons/online-meetings/zoom/zoom.php:593 -#: includes/addons/online-meetings/zoom/zoom.php:693 -#: includes/custom-texts.php:1019 includes/custom-texts.php:1378 -msgid "Join" -msgstr "" - #: includes/addons/online-meetings/zoom/zoom.php:748 msgid "Online Meetings - Zoom" msgstr "" @@ -5491,7 +6255,7 @@ msgstr "" #: includes/addons/online-meetings/zoom/zoom.php:909 -#: includes/constant-data.php:478 includes/custom-texts.php:1376 +#: includes/constant-data.php:489 includes/custom-texts.php:1381 msgid "Zoom" msgstr "" @@ -5815,7 +6579,7 @@ msgstr "" #: includes/addons/reminder-follow-up-emails.php:552 -#: includes/constant-data.php:714 +#: includes/constant-data.php:734 msgid "Due Payment Reminder" msgstr "" @@ -5843,19 +6607,19 @@ msgstr "" #: includes/addons/seasonal-working-hours.php:252 -#: includes/addons/user-defined-fields.php:1389 -#: includes/freeons/categories/categories.php:382 +#: includes/addons/user-defined-fields.php:1404 +#: includes/freeons/categories/categories.php:375 msgid "Name*" msgstr "" #: includes/addons/seasonal-working-hours.php:253 -#: includes/admin/bookings.php:1321 includes/admin/services-list.php:1172 -#: includes/admin/services-list.php:1182 includes/custom-texts.php:1192 +#: includes/admin/bookings.php:1321 includes/admin/services-list.php:1173 +#: includes/admin/services-list.php:1183 includes/custom-texts.php:1198 msgid "Owner" msgstr "" #: includes/addons/seasonal-working-hours.php:255 -#: includes/freeons/categories/categories.php:384 +#: includes/freeons/categories/categories.php:377 msgid "Used by" msgstr "" @@ -5907,7 +6671,7 @@ msgstr "" #: includes/addons/seasonal-working-hours.php:718 -#: includes/admin/services-list.php:1365 includes/admin/services-list.php:1389 +#: includes/admin/services-list.php:1366 includes/admin/services-list.php:1390 msgid "None defined" msgstr "" @@ -6014,8 +6778,8 @@ #: includes/addons/service-bundles.php:1176 #: includes/addons/service-bundles.php:1264 -#: includes/admin/global-settings.php:379 includes/admin/setup.php:760 -#: includes/custom-texts.php:956 +#: includes/admin/global-settings.php:427 includes/admin/setup.php:760 +#: includes/custom-texts.php:963 msgid "Day" msgstr "" @@ -6066,8 +6830,9 @@ msgstr "" #: includes/addons/service-bundles.php:1255 includes/admin/bookings.php:1490 -#: includes/custom-texts.php:1297 includes/custom-texts.php:1300 -#: includes/freeons/test-bookings.php:577 includes/schedules.php:400 +#: includes/custom-texts.php:1303 includes/custom-texts.php:1306 +#: includes/freeons/test-bookings.php:577 includes/functions.listing.php:162 +#: includes/schedules.php:415 msgid "Service" msgstr "" @@ -6111,7 +6876,7 @@ #: includes/addons/service-providers.php:95 #: includes/addons/service-providers/workers-list.php:98 -#: includes/custom-texts.php:1242 +#: includes/custom-texts.php:1247 msgid "Providers" msgstr "" @@ -6158,19 +6923,19 @@ #: includes/addons/service-providers/workers-list.php:488 #: includes/admin/bookings.php:788 includes/admin/dashboard.php:996 -#: includes/admin/services-list.php:578 includes/admin/transactions.php:582 +#: includes/admin/services-list.php:579 includes/admin/transactions.php:582 msgid "Filter by store" msgstr "" #: includes/addons/service-providers/workers-list.php:488 #: includes/admin/bookings.php:788 includes/admin/dashboard.php:996 -#: includes/admin/services-list.php:578 includes/admin/transactions.php:582 +#: includes/admin/services-list.php:579 includes/admin/transactions.php:582 msgid "Filter by location" msgstr "" #: includes/addons/service-providers/workers-list.php:556 -#: includes/admin/clients.php:465 includes/custom-texts.php:899 -#: includes/custom-texts.php:1374 +#: includes/admin/clients.php:465 includes/custom-texts.php:908 +#: includes/custom-texts.php:1380 msgid "Postcode" msgstr "" @@ -6190,7 +6955,7 @@ #: includes/addons/service-providers/workers-list.php:726 #: includes/addons/service-providers/workers-list.php:1042 -#: includes/custom-texts.php:968 +#: includes/custom-texts.php:975 msgid "Dummy" msgstr "" @@ -6234,8 +6999,8 @@ #: includes/addons/service-providers/workers-list.php:1151 #: includes/admin/bookings.php:111 includes/admin/bookings.php:112 #: includes/admin/clients.php:923 includes/admin/dashboard.php:627 -#: includes/admin/toolbar.php:127 includes/custom-texts.php:867 -#: includes/custom-texts.php:1160 +#: includes/admin/toolbar.php:127 includes/custom-texts.php:876 +#: includes/custom-texts.php:1166 msgid "Bookings" msgstr "" @@ -6330,7 +7095,7 @@ msgid "Send a Test SMS" msgstr "" -#: includes/addons/sms.php:522 includes/admin/global-settings.php:821 +#: includes/addons/sms.php:522 includes/admin/global-settings.php:955 msgid "Send Now" msgstr "" @@ -6345,14 +7110,14 @@ #: includes/addons/sms.php:550 includes/addons/sms.php:583 #: includes/addons/sms.php:674 includes/addons/sms.php:706 #: includes/admin/bookings.php:1887 includes/admin/bookings.php:1902 -#: includes/admin/clients.php:622 includes/custom-texts.php:915 -#: includes/freeons/test-bookings.php:560 includes/schedules.php:468 +#: includes/admin/clients.php:622 includes/custom-texts.php:923 +#: includes/freeons/test-bookings.php:560 includes/schedules.php:483 msgid "Client" msgstr "" #: includes/addons/sms.php:550 includes/addons/sms.php:583 #: includes/addons/sms.php:674 includes/addons/sms.php:706 -#: includes/admin/services-list.php:561 includes/custom-texts.php:787 +#: includes/admin/services-list.php:562 includes/custom-texts.php:787 msgid "Admin" msgstr "" @@ -6360,7 +7125,7 @@ msgid "SMS messages sent when status is Confirmed or Paid" msgstr "" -#: includes/addons/sms.php:555 includes/admin/global-settings.php:837 +#: includes/addons/sms.php:555 includes/admin/global-settings.php:971 msgid "Confirmation" msgstr "" @@ -6393,8 +7158,8 @@ msgstr "" #: includes/addons/sms.php:679 includes/admin/bookings.php:1801 -#: includes/admin/dashboard.php:683 includes/admin/global-settings.php:896 -#: includes/custom-texts.php:922 +#: includes/admin/dashboard.php:683 includes/admin/global-settings.php:1030 +#: includes/custom-texts.php:930 msgid "Completed" msgstr "" @@ -6404,7 +7169,7 @@ "Removed." msgstr "" -#: includes/addons/sms.php:711 includes/admin/global-settings.php:924 +#: includes/addons/sms.php:711 includes/admin/global-settings.php:1058 msgid "Cancellation" msgstr "" @@ -6432,10 +7197,6 @@ msgid "%1$sPaid with %2$s card. Cardholder name: %3$s." msgstr "" -#: includes/addons/stripe/stripe.php:287 -msgid "Stripe" -msgstr "" - #: includes/addons/stripe/stripe.php:289 msgid "" "Accept Visa, MasterCard, American Express, Discover, JCB, and Diners Club " @@ -7077,7 +7838,7 @@ msgid "Checkbox" msgstr "" -#: includes/addons/user-defined-fields.php:132 includes/custom-texts.php:952 +#: includes/addons/user-defined-fields.php:132 includes/custom-texts.php:959 msgid "Date" msgstr "" @@ -7094,52 +7855,52 @@ msgid "Test: " msgstr "" -#: includes/addons/user-defined-fields.php:851 includes/custom-texts.php:1134 +#: includes/addons/user-defined-fields.php:851 includes/custom-texts.php:1141 #, php-format msgid "%s is a required field" msgstr "" -#: includes/addons/user-defined-fields.php:1238 +#: includes/addons/user-defined-fields.php:1253 msgid "UDFs" msgstr "" -#: includes/addons/user-defined-fields.php:1374 +#: includes/addons/user-defined-fields.php:1389 msgid "Add New UDF" msgstr "" -#: includes/addons/user-defined-fields.php:1390 +#: includes/addons/user-defined-fields.php:1405 msgid "Type" msgstr "" -#: includes/addons/user-defined-fields.php:1391 +#: includes/addons/user-defined-fields.php:1406 msgid "Front End?" msgstr "" -#: includes/addons/user-defined-fields.php:1392 +#: includes/addons/user-defined-fields.php:1407 msgid "Required?" msgstr "" -#: includes/addons/user-defined-fields.php:1393 +#: includes/addons/user-defined-fields.php:1408 msgid "Editable?" msgstr "" -#: includes/addons/user-defined-fields.php:1395 +#: includes/addons/user-defined-fields.php:1410 msgid "Register?" msgstr "" -#: includes/addons/user-defined-fields.php:1397 +#: includes/addons/user-defined-fields.php:1412 msgid "Options" msgstr "" -#: includes/addons/user-defined-fields.php:1408 +#: includes/addons/user-defined-fields.php:1423 msgid "No UDFs defined" msgstr "" -#: includes/addons/user-defined-fields.php:1419 +#: includes/addons/user-defined-fields.php:1434 msgid "Save UDFs" msgstr "" -#: includes/addons/user-defined-fields.php:1421 +#: includes/addons/user-defined-fields.php:1436 msgid "<i>Tip: To delete a UDF, just clear its name and save.</i>" msgstr "" @@ -7282,8 +8043,8 @@ msgstr "" #: includes/addons/variable-durations/time-variant-durations.php:350 -#: includes/admin/services-list.php:1198 includes/custom-texts.php:969 -#: includes/custom-texts.php:1282 +#: includes/admin/services-list.php:1199 includes/custom-texts.php:976 +#: includes/custom-texts.php:1288 msgid "Duration" msgstr "" @@ -7312,7 +8073,7 @@ msgstr "" #: includes/addons/waiting-list.php:99 includes/addons/waiting-list.php:729 -#: includes/addons/waiting-list.php:905 includes/custom-texts.php:1355 +#: includes/addons/waiting-list.php:905 includes/custom-texts.php:1361 msgid "Waiting List" msgstr "" @@ -7406,14 +8167,14 @@ msgid "Paid in total %1$s in WooCommerce order %2$s" msgstr "" -#: includes/addons/woocommerce.php:1360 +#: includes/addons/woocommerce.php:1362 #, php-format msgid "" "WooCommerce cancellation for booking with ID %1$d of client %2$s could not " "be processed." msgstr "" -#: includes/addons/woocommerce.php:1369 +#: includes/addons/woocommerce.php:1371 #, php-format msgid "Client %1$s cancelled their booking with ID %2$d in WooCommerce." msgstr "" @@ -7504,7 +8265,7 @@ msgstr "" #: includes/addons/woocommerce/deposits.php:126 -#: includes/admin/bookings.php:1588 includes/custom-texts.php:960 +#: includes/admin/bookings.php:1588 includes/custom-texts.php:967 msgid "Deposit" msgstr "" @@ -7576,7 +8337,7 @@ msgid "Business Settings" msgstr "" -#: includes/addons/woocommerce/wc-admin.php:334 includes/custom-texts.php:825 +#: includes/addons/woocommerce/wc-admin.php:334 includes/custom-texts.php:834 #: includes/freeons/edd.php:1301 msgid "Booking" msgstr "" @@ -7585,7 +8346,7 @@ msgid "WooCommerce Order ID" msgstr "" -#: includes/addons/woocommerce/wc-admin.php:418 includes/custom-texts.php:1367 +#: includes/addons/woocommerce/wc-admin.php:418 includes/custom-texts.php:1373 #: includes/freeons/edd.php:1387 msgid "Order ID" msgstr "" @@ -7741,7 +8502,7 @@ msgstr "" #: includes/admin/base-admin.php:660 includes/admin/global-settings.php:42 -#: includes/admin/global-settings.php:335 includes/functions.internal.php:2326 +#: includes/admin/global-settings.php:383 includes/functions.internal.php:2326 msgid "Global Settings" msgstr "" @@ -7824,11 +8585,6 @@ msgid "Client Name" msgstr "" -#: includes/admin/bookings.php:706 includes/admin/clients.php:460 -#: includes/constant-data.php:456 -msgid "Client ID" -msgstr "" - #: includes/admin/bookings.php:712 includes/admin/bookings.php:1728 msgid "Admin Note" msgstr "" @@ -7854,7 +8610,7 @@ msgstr "" #: includes/admin/bookings.php:826 includes/admin/dashboard.php:1042 -#: includes/admin/services-list.php:605 +#: includes/admin/services-list.php:606 msgid "Filter by provider" msgstr "" @@ -7901,7 +8657,7 @@ msgid "Click to edit booking" msgstr "" -#: includes/admin/bookings.php:1297 includes/custom-texts.php:963 +#: includes/admin/bookings.php:1297 includes/custom-texts.php:970 msgid "Details" msgstr "" @@ -7913,12 +8669,12 @@ msgid "CLIENT" msgstr "" -#: includes/admin/bookings.php:1415 includes/custom-texts.php:1293 +#: includes/admin/bookings.php:1415 includes/custom-texts.php:1299 msgid "User" msgstr "" #: includes/admin/bookings.php:1418 includes/front.php:364 -#: includes/schedules.php:471 +#: includes/schedules.php:486 msgid "Not registered user" msgstr "" @@ -7946,7 +8702,8 @@ msgid "LOCATION - SERVICE - PROVIDER" msgstr "" -#: includes/admin/bookings.php:1490 includes/schedules.php:400 +#: includes/admin/bookings.php:1490 includes/functions.listing.php:162 +#: includes/schedules.php:415 msgid "Event" msgstr "" @@ -7955,7 +8712,7 @@ msgid "PRICING - PAYMENT (%s)" msgstr "" -#: includes/admin/bookings.php:1564 includes/custom-texts.php:1078 +#: includes/admin/bookings.php:1564 includes/custom-texts.php:1084 msgid "Method" msgstr "" @@ -7986,7 +8743,7 @@ msgid "Payment" msgstr "" -#: includes/admin/bookings.php:1622 includes/custom-texts.php:820 +#: includes/admin/bookings.php:1622 includes/custom-texts.php:829 msgid "Balance" msgstr "" @@ -7995,7 +8752,7 @@ msgid "BOOKING (%d)" msgstr "" -#: includes/admin/bookings.php:1640 includes/schedules.php:386 +#: includes/admin/bookings.php:1640 includes/schedules.php:401 msgid "NEW BOOKING" msgstr "" @@ -8008,7 +8765,7 @@ msgid "starting at <b>%s</b>" msgstr "" -#: includes/admin/bookings.php:1665 includes/custom-texts.php:945 +#: includes/admin/bookings.php:1665 includes/custom-texts.php:952 msgid "Created by" msgstr "" @@ -8036,16 +8793,18 @@ msgid "ACTIONS" msgstr "" -#: includes/admin/bookings.php:1770 includes/schedules.php:546 +#: includes/admin/bookings.php:1770 includes/functions.listing.php:257 +#: includes/schedules.php:561 msgid "Reserved bookings cannot be edited here. Edit them in your GCal." msgstr "" -#: includes/admin/bookings.php:1773 includes/schedules.php:549 +#: includes/admin/bookings.php:1773 includes/functions.listing.php:260 +#: includes/schedules.php:564 msgid "Click to save or update" msgstr "" -#: includes/admin/bookings.php:1775 includes/custom-texts.php:1263 -#: includes/schedules.php:553 +#: includes/admin/bookings.php:1775 includes/custom-texts.php:1269 +#: includes/functions.listing.php:264 includes/schedules.php:568 msgid "Save" msgstr "" @@ -8057,8 +8816,8 @@ msgid "Send email:" msgstr "" -#: includes/admin/bookings.php:1789 includes/admin/global-settings.php:762 -#: includes/custom-texts.php:931 +#: includes/admin/bookings.php:1789 includes/admin/global-settings.php:896 +#: includes/custom-texts.php:939 msgid "Confirmed" msgstr "" @@ -8067,12 +8826,12 @@ msgstr "" #: includes/admin/bookings.php:1842 includes/front-ajax.php:1250 -#: includes/front-listing.php:324 +#: includes/front-listing.php:465 msgid "Unexpected error" msgstr "" #: includes/admin/bookings.php:1887 includes/admin/bookings.php:1902 -#: includes/admin/bookings.php:1952 includes/custom-texts.php:1013 +#: includes/admin/bookings.php:1952 includes/custom-texts.php:1020 msgid "GCal" msgstr "" @@ -8085,30 +8844,33 @@ msgid "%s by %s" msgstr "" -#: includes/admin/bookings.php:2034 includes/admin/functions-admin.php:647 -#: includes/schedules.php:639 +#: includes/admin/bookings.php:2034 includes/admin/functions-admin.php:653 +#: includes/schedules.php:662 msgid "Service does not exist!" msgstr "" -#: includes/admin/bookings.php:2048 includes/schedules.php:653 +#: includes/admin/bookings.php:2048 includes/functions.listing.php:369 +#: includes/schedules.php:676 msgid "You are not owner of this service" msgstr "" -#: includes/admin/bookings.php:2052 includes/schedules.php:657 +#: includes/admin/bookings.php:2052 includes/functions.listing.php:373 +#: includes/schedules.php:680 msgid "You are not allowed to edit other provider's booking" msgstr "" -#: includes/admin/bookings.php:2061 includes/admin/services-list.php:1666 -#: includes/schedules.php:667 +#: includes/admin/bookings.php:2061 includes/admin/services-list.php:1669 +#: includes/functions.listing.php:384 includes/schedules.php:690 #, php-format msgid "Record has been taken over by %s. It could not be saved." msgstr "" -#: includes/admin/bookings.php:2072 includes/schedules.php:678 +#: includes/admin/bookings.php:2072 includes/schedules.php:701 msgid "A valid email is required to create a new user" msgstr "" -#: includes/admin/bookings.php:2118 includes/schedules.php:720 +#: includes/admin/bookings.php:2118 includes/functions.listing.php:419 +#: includes/schedules.php:743 msgid "Booking start time cannot be later than end time!" msgstr "" @@ -8116,12 +8878,12 @@ msgid "New booking successfully saved." msgstr "" -#: includes/admin/bookings.php:2295 includes/admin/transactions.php:776 +#: includes/admin/bookings.php:2295 includes/admin/transactions.php:778 msgid "None yet" msgstr "" #: includes/admin/clients.php:255 includes/admin/clients.php:629 -#: includes/admin/dashboard.php:628 includes/custom-texts.php:1257 +#: includes/admin/dashboard.php:628 includes/custom-texts.php:1263 msgid "Revenue" msgstr "" @@ -8238,7 +9000,7 @@ msgid "Yesterday" msgstr "" -#: includes/admin/dashboard.php:902 includes/custom-texts.php:1333 +#: includes/admin/dashboard.php:902 includes/custom-texts.php:1338 msgid "Today" msgstr "" @@ -8254,7 +9016,7 @@ msgid "This Week" msgstr "" -#: includes/admin/dashboard.php:906 includes/custom-texts.php:1157 +#: includes/admin/dashboard.php:906 includes/custom-texts.php:1163 msgid "Next Week" msgstr "" @@ -8270,7 +9032,7 @@ msgid "This Month" msgstr "" -#: includes/admin/dashboard.php:910 includes/custom-texts.php:1155 +#: includes/admin/dashboard.php:910 includes/custom-texts.php:1161 msgid "Next Month" msgstr "" @@ -8443,158 +9205,167 @@ "only." msgstr "" -#: includes/admin/functions-admin.php:520 +#: includes/admin/functions-admin.php:526 #, php-format msgid "Status changed from %1$s to %2$s by %3$s for booking ID:%4$d" msgstr "" -#: includes/admin/functions-admin.php:530 +#: includes/admin/functions-admin.php:536 #, php-format msgid "" "Start time of the booking changed from %1$s to %2$s by %3$s for booking ID:" "%4$d" msgstr "" -#: includes/admin/functions-admin.php:645 +#: includes/admin/functions-admin.php:651 msgid "" "This booking is created by Google Calendar. Edit it in your Google Calendar " "account" msgstr "" -#: includes/admin/functions-admin.php:649 +#: includes/admin/functions-admin.php:655 msgid "Booking start time is later than end time" msgstr "" -#: includes/admin/functions-admin.php:651 +#: includes/admin/functions-admin.php:657 msgid "" "Selected date is a past date. Only Removed, Completed and Test statuses are " "allowed" msgstr "" -#: includes/admin/functions-admin.php:655 +#: includes/admin/functions-admin.php:661 msgid "Changes are not saved in DEMO mode" msgstr "" -#: includes/admin/global-settings.php:211 +#: includes/admin/global-settings.php:214 +msgid "Schedules cache cleared" +msgstr "" + +#: includes/admin/global-settings.php:247 msgid "This is a test email of WP BASE" msgstr "" -#: includes/admin/global-settings.php:270 includes/functions.internal.php:2933 +#: includes/admin/global-settings.php:318 includes/functions.internal.php:2968 msgid "Book a Service" msgstr "" -#: includes/admin/global-settings.php:270 includes/admin/setup.php:237 -#: includes/admin/setup.php:360 includes/functions.internal.php:2933 +#: includes/admin/global-settings.php:318 includes/admin/setup.php:237 +#: includes/admin/setup.php:360 includes/functions.internal.php:2968 msgid "Make an Appointment" msgstr "" -#: includes/admin/global-settings.php:363 +#: includes/admin/global-settings.php:411 msgid "Time Settings" msgstr "" -#: includes/admin/global-settings.php:380 includes/admin/setup.php:761 +#: includes/admin/global-settings.php:428 includes/admin/setup.php:761 msgid "Month" msgstr "" -#: includes/admin/global-settings.php:394 -#: includes/admin/global-settings.php:431 +#: includes/admin/global-settings.php:442 +#: includes/admin/global-settings.php:474 +#: includes/admin/global-settings.php:516 msgid "Save All Basic Settings" msgstr "" -#: includes/admin/global-settings.php:399 +#: includes/admin/global-settings.php:447 msgid "Booking & Cancelling" msgstr "" -#: includes/admin/global-settings.php:415 includes/widgets.php:288 +#: includes/admin/global-settings.php:463 includes/widgets.php:288 msgid "There are no pages!" msgstr "" -#: includes/admin/global-settings.php:435 -#: includes/admin/global-settings.php:651 +#: includes/admin/global-settings.php:481 +msgid "Editing & Rescheduling" +msgstr "" + +#: includes/admin/global-settings.php:520 +#: includes/admin/global-settings.php:785 msgid "Link for export/import of settings" msgstr "" -#: includes/admin/global-settings.php:435 -#: includes/admin/global-settings.php:651 +#: includes/admin/global-settings.php:520 +#: includes/admin/global-settings.php:785 msgid "Export/Import Settings" msgstr "" -#: includes/admin/global-settings.php:458 +#: includes/admin/global-settings.php:543 msgid "Misc. Booking Settings" msgstr "" -#: includes/admin/global-settings.php:566 +#: includes/admin/global-settings.php:688 msgid "Setup" msgstr "" -#: includes/admin/global-settings.php:625 +#: includes/admin/global-settings.php:759 msgid "Admin Preferences" msgstr "" -#: includes/admin/global-settings.php:702 +#: includes/admin/global-settings.php:836 msgid "Not possible to calculate. 60 mins is in effect." msgstr "" -#: includes/admin/global-settings.php:717 +#: includes/admin/global-settings.php:851 msgid "Calculated value: " msgstr "" -#: includes/admin/global-settings.php:739 +#: includes/admin/global-settings.php:873 msgid "" "To display the table summarizing effect of different settings please click " "the \"i\" icon:" msgstr "" -#: includes/admin/global-settings.php:747 +#: includes/admin/global-settings.php:881 msgid "Setting of Auto Confirm" msgstr "" -#: includes/admin/global-settings.php:748 +#: includes/admin/global-settings.php:882 msgid "Resulting Status When..." msgstr "" -#: includes/admin/global-settings.php:752 +#: includes/admin/global-settings.php:886 msgid "Payment Required = NO OR Price = 0" msgstr "" -#: includes/admin/global-settings.php:753 +#: includes/admin/global-settings.php:887 msgid "Payment Required = YES AND Price > 0" msgstr "" -#: includes/admin/global-settings.php:758 -#: includes/admin/global-settings.php:763 +#: includes/admin/global-settings.php:892 +#: includes/admin/global-settings.php:897 msgid "Pending→{Payment}→Paid" msgstr "" -#: includes/admin/global-settings.php:782 +#: includes/admin/global-settings.php:916 msgid "Location > Service > Provider" msgstr "" -#: includes/admin/global-settings.php:783 +#: includes/admin/global-settings.php:917 msgid "Location > Provider > Service" msgstr "" -#: includes/admin/global-settings.php:784 +#: includes/admin/global-settings.php:918 msgid "Service > Location > Provider" msgstr "" -#: includes/admin/global-settings.php:785 +#: includes/admin/global-settings.php:919 msgid "Service > Provider > Location" msgstr "" -#: includes/admin/global-settings.php:786 +#: includes/admin/global-settings.php:920 msgid "Provider > Location > Service" msgstr "" -#: includes/admin/global-settings.php:787 +#: includes/admin/global-settings.php:921 msgid "Provider > Service > Location" msgstr "" -#: includes/admin/global-settings.php:819 +#: includes/admin/global-settings.php:953 msgid "Send a Test email" msgstr "" -#: includes/admin/global-settings.php:823 +#: includes/admin/global-settings.php:957 msgid "" "Clicking this button will IMMEDIATELY try to send a test email to the admin " "email(s) above using confirmation message template below. Most email " @@ -8603,37 +9374,37 @@ "This may help to figure out if you have such a problem in the first place." msgstr "" -#: includes/admin/global-settings.php:836 +#: includes/admin/global-settings.php:970 msgid "Emails sent when status is confirmed." msgstr "" -#: includes/admin/global-settings.php:864 +#: includes/admin/global-settings.php:998 msgid "Settings for email messages when appointment status is Pending." msgstr "" -#: includes/admin/global-settings.php:895 +#: includes/admin/global-settings.php:1029 msgid "" "Settings for email messages when appointment has just completed or its " "status is Completed." msgstr "" -#: includes/admin/global-settings.php:923 +#: includes/admin/global-settings.php:1057 msgid "" "Settings for email messages when appointment is cancelled or its status is " "Removed." msgstr "" -#: includes/admin/global-settings.php:954 +#: includes/admin/global-settings.php:1088 msgid "Save Email Settings" msgstr "" -#: includes/admin/global-settings.php:989 +#: includes/admin/global-settings.php:1123 msgid "" "Some business models may need advanced settings. Here you can adjust them. " "These settings are enabled by Addons." msgstr "" -#: includes/admin/global-settings.php:1004 +#: includes/admin/global-settings.php:1138 msgid "Save Addon Settings" msgstr "" @@ -8924,8 +9695,8 @@ msgstr "" #: includes/admin/help.php:564 includes/admin/tinymce.php:244 -#: includes/constant-data.php:381 includes/constant-data.php:1555 -#: includes/functions.internal.php:2969 +#: includes/constant-data.php:392 includes/constant-data.php:1575 +#: includes/functions.internal.php:3004 msgid "demo website" msgstr "" @@ -9204,253 +9975,264 @@ msgid "No Payment Addon Found" msgstr "" -#: includes/admin/services-list.php:352 +#: includes/admin/service-rte.php:52 +msgid "Content" +msgstr "" + +#: includes/admin/service-rte.php:56 +msgid "View/Edit Content" +msgstr "" + +#: includes/admin/service-rte.php:57 +msgid "HTML tags not displayed. To view in full, click View/Edit." +msgstr "" + +#: includes/admin/service-rte.php:206 +msgid "Submit and Close" +msgstr "" + +#: includes/admin/services-list.php:353 #, php-format msgid "%s Services" msgstr "" -#: includes/admin/services-list.php:355 includes/admin/services-list.php:1308 +#: includes/admin/services-list.php:356 includes/admin/services-list.php:1309 msgid "Add New Service" msgstr "" -#: includes/admin/services-list.php:531 includes/admin/setup.php:837 +#: includes/admin/services-list.php:532 includes/admin/setup.php:837 msgid "Service Name" msgstr "" -#: includes/admin/services-list.php:532 includes/custom-texts.php:1299 +#: includes/admin/services-list.php:533 includes/custom-texts.php:1305 msgid "Service ID" msgstr "" -#: includes/admin/services-list.php:559 +#: includes/admin/services-list.php:560 msgid "Filter by owner" msgstr "" -#: includes/admin/services-list.php:591 +#: includes/admin/services-list.php:592 msgid "Filter by category" msgstr "" -#: includes/admin/services-list.php:620 +#: includes/admin/services-list.php:621 msgid "Filter by duration" msgstr "" -#: includes/admin/services-list.php:663 +#: includes/admin/services-list.php:664 msgid "Default order" msgstr "" -#: includes/admin/services-list.php:664 +#: includes/admin/services-list.php:665 msgid "Reverse order" msgstr "" -#: includes/admin/services-list.php:665 +#: includes/admin/services-list.php:666 msgid "ID (1 → 99)" msgstr "" -#: includes/admin/services-list.php:666 +#: includes/admin/services-list.php:667 msgid "ID (99 → 1)" msgstr "" -#: includes/admin/services-list.php:667 +#: includes/admin/services-list.php:668 msgid "Name (A → Z)" msgstr "" -#: includes/admin/services-list.php:668 +#: includes/admin/services-list.php:669 msgid "Name (Z → A)" msgstr "" -#: includes/admin/services-list.php:686 +#: includes/admin/services-list.php:687 msgid "Set as Internal (private)" msgstr "" -#: includes/admin/services-list.php:687 +#: includes/admin/services-list.php:688 msgid "Set as public" msgstr "" -#: includes/admin/services-list.php:688 +#: includes/admin/services-list.php:689 msgid "Delete permanently" msgstr "" -#: includes/admin/services-list.php:719 -#: includes/freeons/categories/categories.php:513 +#: includes/admin/services-list.php:720 +#: includes/freeons/categories/categories.php:506 msgid "Deletion is turned off by admin." msgstr "" -#: includes/admin/services-list.php:757 -#, php-format -msgid "%d records have been deleted" -msgstr "" - -#: includes/admin/services-list.php:1028 +#: includes/admin/services-list.php:1029 msgid "Click to edit service" msgstr "" -#: includes/admin/services-list.php:1172 +#: includes/admin/services-list.php:1173 msgid "Owner can edit the service. Only admin can change owners." msgstr "" -#: includes/admin/services-list.php:1178 +#: includes/admin/services-list.php:1179 msgid "Another service provider" msgstr "" -#: includes/admin/services-list.php:1186 includes/custom-texts.php:1316 +#: includes/admin/services-list.php:1187 includes/custom-texts.php:1321 msgid "Stores" msgstr "" -#: includes/admin/services-list.php:1189 -#: includes/freeons/categories/categories.php:71 +#: includes/admin/services-list.php:1190 +#: includes/freeons/categories/categories.php:70 #: includes/freeons/extended-service-features.php:307 msgid "Categories" msgstr "" -#: includes/admin/services-list.php:1194 +#: includes/admin/services-list.php:1195 msgid "" "You can enter a value to increase number of time slots that can booked for " "any given time. If not set, or set lower than providers of the service, " "capacity is determined by the number of providers giving this service." msgstr "" -#: includes/admin/services-list.php:1201 includes/custom-texts.php:1194 +#: includes/admin/services-list.php:1202 includes/custom-texts.php:1200 msgid "Padding Before" msgstr "" -#: includes/admin/services-list.php:1203 +#: includes/admin/services-list.php:1204 msgid "Time needed to pass before another booking can be made for the service." msgstr "" -#: includes/admin/services-list.php:1207 includes/custom-texts.php:1193 +#: includes/admin/services-list.php:1208 includes/custom-texts.php:1199 msgid "Padding After" msgstr "" -#: includes/admin/services-list.php:1209 +#: includes/admin/services-list.php:1210 msgid "Time needed to pass after another booking can be made for the service." msgstr "" -#: includes/admin/services-list.php:1215 +#: includes/admin/services-list.php:1216 msgid "Price for the service per time slot per person." msgstr "" -#: includes/admin/services-list.php:1219 +#: includes/admin/services-list.php:1220 #, php-format msgid "Security Deposit (%s)" msgstr "" -#: includes/admin/services-list.php:1222 +#: includes/admin/services-list.php:1223 msgid "" "Refundable security deposit. Not to be confused with advance payment/down " "payment which is deducted from the price." msgstr "" -#: includes/admin/services-list.php:1227 +#: includes/admin/services-list.php:1228 #, php-format msgid "Fee (%s)" msgstr "" -#: includes/admin/services-list.php:1230 +#: includes/admin/services-list.php:1231 msgid "booking" msgstr "" -#: includes/admin/services-list.php:1231 includes/custom-texts.php:1023 +#: includes/admin/services-list.php:1232 includes/custom-texts.php:1030 msgid "hour" msgstr "" -#: includes/admin/services-list.php:1232 includes/custom-texts.php:954 +#: includes/admin/services-list.php:1233 includes/custom-texts.php:961 msgid "day" msgstr "" -#: includes/admin/services-list.php:1233 includes/custom-texts.php:1361 +#: includes/admin/services-list.php:1234 includes/custom-texts.php:1367 msgid "week" msgstr "" -#: includes/admin/services-list.php:1234 includes/custom-texts.php:1088 +#: includes/admin/services-list.php:1235 includes/custom-texts.php:1095 msgid "month" msgstr "" -#: includes/admin/services-list.php:1236 +#: includes/admin/services-list.php:1237 msgid "" "Fee and unit for basis to calculate fee. For example, $10/hour setting will " "result in $5 fee for a booking of 30 minutes." msgstr "" -#: includes/admin/services-list.php:1242 +#: includes/admin/services-list.php:1243 msgid "" "If selected, booking views on this post will be fixed with this service. " "Also description and feature image will be taken from the post." msgstr "" -#: includes/admin/services-list.php:1248 includes/custom-texts.php:1077 +#: includes/admin/services-list.php:1249 includes/custom-texts.php:1083 msgid "Online Meeting" msgstr "" -#: includes/admin/services-list.php:1253 +#: includes/admin/services-list.php:1254 msgid "" "Booking for this service will create an online meeting session in the active " "meeting platform (Google Meet, Zoom, Jitsi, Agora)." msgstr "" -#: includes/admin/services-list.php:1307 +#: includes/admin/services-list.php:1308 msgid "Cannot Update" msgstr "" -#: includes/admin/services-list.php:1408 includes/admin/setup.php:91 +#: includes/admin/services-list.php:1409 includes/admin/setup.php:91 #: includes/functions.internal.php:1506 msgid "All day" msgstr "" -#: includes/admin/services-list.php:1497 +#: includes/admin/services-list.php:1498 msgid "NEW SERVICE" msgstr "" -#: includes/admin/services-list.php:1517 +#: includes/admin/services-list.php:1518 msgid "" "Background color in Schedules. Text color will be auto picked based on this " "color." msgstr "" -#: includes/admin/services-list.php:1520 includes/custom-texts.php:1028 +#: includes/admin/services-list.php:1521 includes/custom-texts.php:1035 msgid "Internal" msgstr "" -#: includes/admin/services-list.php:1523 +#: includes/admin/services-list.php:1524 msgid "" "Similar to WordPress private posts. Internal services will not be displayed " "in service selection menu element on the front end." msgstr "" -#: includes/admin/services-list.php:1543 +#: includes/admin/services-list.php:1544 msgid "" "Readonly value showing providers giving this service. To edit, use Providers " "page instead." msgstr "" -#: includes/admin/services-list.php:1551 +#: includes/admin/services-list.php:1552 msgid "" "Makes service independent of provider availability, e.g. for events, room " "and rental bookings." msgstr "" -#: includes/admin/services-list.php:1560 +#: includes/admin/services-list.php:1561 msgid "Optional description text for the service." msgstr "" -#: includes/admin/services-list.php:1618 +#: includes/admin/services-list.php:1621 msgid "" "Optional Main Image for the service which will be used in service selection " "slider." msgstr "" -#: includes/admin/services-list.php:1679 +#: includes/admin/services-list.php:1682 msgid "Service must be assigned to a store" msgstr "" -#: includes/admin/services-list.php:1683 +#: includes/admin/services-list.php:1686 msgid "You must select a store that you are assigned" msgstr "" -#: includes/admin/services-list.php:1745 +#: includes/admin/services-list.php:1748 #, php-format msgid "Service %d" msgstr "" -#: includes/admin/services-list.php:1850 +#: includes/admin/services-list.php:1859 msgid "New service successfully saved." msgstr "" @@ -9500,7 +10282,7 @@ msgstr "" #: includes/admin/setup.php:700 includes/admin/setup.php:795 -#: includes/admin/setup.php:1002 includes/custom-texts.php:870 +#: includes/admin/setup.php:1002 includes/custom-texts.php:879 #: includes/wh.php:76 msgid "Working Hours" msgstr "" @@ -9525,8 +10307,8 @@ msgid "Adjust Basic Settings" msgstr "" -#: includes/admin/setup.php:736 includes/constant-data.php:506 -#: includes/constant-data.php:645 +#: includes/admin/setup.php:736 includes/constant-data.php:517 +#: includes/constant-data.php:663 msgid "Time Base" msgstr "" @@ -9545,7 +10327,7 @@ msgid "How many hours in advance can clients make a booking?" msgstr "" -#: includes/admin/setup.php:756 includes/constant-data.php:339 +#: includes/admin/setup.php:756 includes/constant-data.php:350 msgid "Booking Upper Limit" msgstr "" @@ -9553,7 +10335,7 @@ msgid "How far in advance clients can make a booking?" msgstr "" -#: includes/admin/setup.php:768 includes/constant-data.php:358 +#: includes/admin/setup.php:768 includes/constant-data.php:369 msgid "Auto Confirm" msgstr "" @@ -9565,7 +10347,7 @@ msgid "Set Working Hours" msgstr "" -#: includes/admin/setup.php:785 includes/constant-data.php:382 +#: includes/admin/setup.php:785 includes/constant-data.php:393 msgid "Table Start" msgstr "" @@ -9579,7 +10361,7 @@ "depends on Time Base set at the first step" msgstr "" -#: includes/admin/setup.php:804 includes/constant-data.php:382 +#: includes/admin/setup.php:804 includes/constant-data.php:393 msgid "Table End" msgstr "" @@ -9674,7 +10456,7 @@ "You can see a comparison of the two cases on our demo website %s." msgstr "" -#: includes/admin/setup.php:922 includes/constant-data.php:381 +#: includes/admin/setup.php:922 includes/constant-data.php:392 msgid "Calendar Design" msgstr "" @@ -9834,10 +10616,6 @@ msgid "Most Used" msgstr "" -#: includes/admin/tinymce.php:229 -msgid "Other" -msgstr "" - #: includes/admin/tinymce.php:240 msgid "" "From the above pulldown menu, select shortcode you want to use, fill in the " @@ -9880,7 +10658,7 @@ msgstr "" #: includes/admin/toolbar.php:130 includes/admin/transactions.php:60 -#: includes/admin/transactions.php:61 includes/custom-texts.php:863 +#: includes/admin/transactions.php:61 includes/custom-texts.php:872 msgid "Payment History" msgstr "" @@ -9896,7 +10674,7 @@ msgid "Global" msgstr "" -#: includes/admin/toolbar.php:166 includes/user.php:1021 +#: includes/admin/toolbar.php:166 includes/user.php:1023 msgid "Your Bookings" msgstr "" @@ -9912,7 +10690,7 @@ msgid "List of Bookings" msgstr "" -#: includes/admin/toolbar.php:228 includes/custom-texts.php:846 +#: includes/admin/toolbar.php:228 includes/custom-texts.php:855 #: includes/freeons/front-end-booking-management.php:204 #: includes/freeons/front-end-booking-management.php:209 msgid "Manage Bookings" @@ -9939,86 +10717,90 @@ msgid "Payment date (31/12 → 01/01)" msgstr "" -#: includes/admin/transactions.php:795 +#: includes/admin/transactions.php:797 msgid "No payments have been found." msgstr "" -#: includes/admin/transactions.php:820 includes/admin/transactions.php:849 +#: includes/admin/transactions.php:822 includes/admin/transactions.php:851 msgid "Click to edit manual payment" msgstr "" -#: includes/admin/transactions.php:827 includes/admin/transactions.php:860 +#: includes/admin/transactions.php:829 includes/admin/transactions.php:862 msgid "Payments coming from payment processors cannot be edited" msgstr "" -#: includes/admin/transactions.php:852 +#: includes/admin/transactions.php:854 msgid "Manual Payments gateway is not active" msgstr "" -#: includes/admin/transactions.php:860 +#: includes/admin/transactions.php:862 msgid "Cannot be edited" msgstr "" -#: includes/assets.php:272 includes/custom-texts.php:950 +#: includes/assets.php:241 includes/custom-texts.php:957 msgid "Daily" msgstr "" -#: includes/assets.php:347 +#: includes/assets.php:316 msgid "Are you sure to clear the log file?" msgstr "" -#: includes/assets.php:348 +#: includes/assets.php:317 msgid "You are about to delete at least one record. Are you sure to do this?" msgstr "" -#: includes/assets.php:349 +#: includes/assets.php:318 +msgid "Do you want to pay commission to the selected records?" +msgstr "" + +#: includes/assets.php:319 msgid "" "WARNING!! This action will clear all existing database records (bookings, " "transactions, locations, services, service providers, working hours). Are " "you sure to do this?" msgstr "" -#: includes/assets.php:350 +#: includes/assets.php:320 msgid "Are you REALLY SURE TO DELETE the database records?" msgstr "" -#: includes/assets.php:351 +#: includes/assets.php:321 msgid "" "This action will restore all WP BASE settings to the defaults. Database " "records (bookings, transactions, locations, services, service providers, " "working hours) will not be changed. Are you sure to do this?" msgstr "" -#: includes/assets.php:352 +#: includes/assets.php:322 msgid "" "Creating of test appointments may take several minutes. Do you want to " "continue?" msgstr "" -#: includes/assets.php:353 +#: includes/assets.php:323 msgid "" "You are about to change status of an approved vendor as pending or declined. " "This action will suspend the vendor." msgstr "" -#: includes/assets.php:355 +#: includes/assets.php:325 msgid "Booking #" msgstr "" -#: includes/assets.php:356 +#: includes/assets.php:326 msgid "You did not save the changes you have made. Are you sure?" msgstr "" -#: includes/assets.php:358 +#: includes/assets.php:328 #: includes/freeons/manual-payments/manual-payments.php:80 msgid "Add Manual Payment" msgstr "" -#: includes/assets.php:359 +#: includes/assets.php:329 msgid "Record #" msgstr "" -#: includes/assets.php:361 +#: includes/assets.php:331 msgid "" "WP BASE SERVICE TABLE records will be cleared! Existing WP BASE SERVICE " "PROVIDER TABLE records will be replaced with Appointments+ values. Non-" @@ -10026,7 +10808,7 @@ "sure to do this?" msgstr "" -#: includes/assets.php:362 +#: includes/assets.php:332 msgid "" "WARNING!! This action will clear all existing database records (booked " "appointments, transactions, locations, services, service providers, working " @@ -10034,15 +10816,15 @@ "this?" msgstr "" -#: includes/assets.php:363 +#: includes/assets.php:333 msgid "Please select at least one column" msgstr "" -#: includes/assets.php:364 +#: includes/assets.php:334 msgid "First select file to be imported" msgstr "" -#: includes/assets.php:365 +#: includes/assets.php:335 msgid "" "This action will replace all existing settings with those inside the " "imported file. Database records (bookings, transactions, locations, " @@ -10050,7 +10832,7 @@ "sure to do this?" msgstr "" -#: includes/assets.php:366 +#: includes/assets.php:336 msgid "" "WP BASE requires your one time consent to access to your calendar account in " "order to read and write events offline (even when you are not available). " @@ -10059,19 +10841,19 @@ "this page." msgstr "" -#: includes/assets.php:371 +#: includes/assets.php:341 msgid "Less" msgstr "" -#: includes/assets.php:372 +#: includes/assets.php:342 msgid "Log file cleared..." msgstr "" -#: includes/assets.php:374 +#: includes/assets.php:344 msgid "More" msgstr "" -#: includes/assets.php:378 +#: includes/assets.php:348 msgid "" "As an attachment to your message, your current settings and plugin related " "database tables, plus data of the posts and users who are related to the " @@ -10080,35 +10862,35 @@ "proceed." msgstr "" -#: includes/assets.php:379 +#: includes/assets.php:349 msgid "" "This record is currently being edited by another user. If you take over, his " "work may be lost. Are you sure to take over?" msgstr "" -#: includes/assets.php:380 +#: includes/assets.php:350 msgid "" "You have selected a timezone other than server timezone. Are you sure to " "save working hours using this timezone?" msgstr "" -#: includes/assets.php:383 +#: includes/assets.php:353 msgid "Copied - Click to release" msgstr "" -#: includes/assets.php:384 includes/wh.php:1012 +#: includes/assets.php:354 includes/wh.php:1012 msgid "Copy to clipboard" msgstr "" -#: includes/assets.php:385 +#: includes/assets.php:355 msgid "Paste data of WHOSE" msgstr "" -#: includes/assets.php:386 +#: includes/assets.php:356 msgid "Undo" msgstr "" -#: includes/assets.php:387 +#: includes/assets.php:357 msgid "copied table" msgstr "" @@ -10197,7 +10979,7 @@ "Provider with user ID #%s is not correct. Check if the user is a provider." msgstr "" -#: includes/constant-data.php:258 +#: includes/constant-data.php:269 msgid "" "We collect information about you during the checkout process on our website. " "This information may include, but is not limited to, your name, email " @@ -10222,7 +11004,7 @@ "will be used to populate the checkout for future orders." msgstr "" -#: includes/constant-data.php:272 +#: includes/constant-data.php:283 msgid "" "Client Name: CLIENT\n" "Client email: EMAIL\n" @@ -10231,37 +11013,48 @@ "Service Provider Name: WORKER" msgstr "" -#: includes/constant-data.php:280 +#: includes/constant-data.php:291 msgid "" "Service Name: SERVICE\n" "Service Provider Name: WORKER" msgstr "" -#: includes/constant-data.php:305 +#: includes/constant-data.php:316 +msgid "Account Page" +msgstr "" + +#: includes/constant-data.php:316 +msgid "" +"The page where <code>[app_account]</code> resides. Normally WP BASE " +"automatically locates this page and sets this setting, however in some cases " +"you may need to set it yourself." +msgstr "" + +#: includes/constant-data.php:317 msgid "Additional css Rules (Front end)" msgstr "" -#: includes/constant-data.php:305 +#: includes/constant-data.php:317 msgid "" "You can add css rules to customize styling. These will be added to the front " "end appointment page(s) only." msgstr "" -#: includes/constant-data.php:306 +#: includes/constant-data.php:318 msgid "Additional css Rules (Admin side)" msgstr "" -#: includes/constant-data.php:306 +#: includes/constant-data.php:318 msgid "" "You can add css rules to customize styling. These will be added to the admin " "side only, e.g. to user profile page." msgstr "" -#: includes/constant-data.php:307 +#: includes/constant-data.php:319 msgid "Additional Time Base (minutes)" msgstr "" -#: includes/constant-data.php:307 +#: includes/constant-data.php:319 msgid "" "If selectable time bases do not fit your business, you can add a new one, " "e.g. 90. Note: 1) After you save this additional time base, you must select " @@ -10270,119 +11063,111 @@ "allowed and it will be rounded to 25." msgstr "" -#: includes/constant-data.php:308 +#: includes/constant-data.php:320 msgid "Add Security Deposit to Total Amount" msgstr "" -#: includes/constant-data.php:308 +#: includes/constant-data.php:320 msgid "" "By default (setting No), security deposits are not collected using payment " "gateways due to difficulties in refunding. If you select Yes, deposit will " "be added to the amount that the client will pay through the payment gateway." msgstr "" -#: includes/constant-data.php:309 +#: includes/constant-data.php:321 msgid "Adjust Font Color" msgstr "" -#: includes/constant-data.php:309 +#: includes/constant-data.php:321 msgid "" "Automatically set calendar font color as white or black according to " "selected background color." msgstr "" -#: includes/constant-data.php:310 +#: includes/constant-data.php:322 msgid "Collapse Record after Successful Update" msgstr "" -#: includes/constant-data.php:310 +#: includes/constant-data.php:322 msgid "" "If this option is selected as Yes, successfully updated record will be " "automatically collapsed in admin bookings page. If selected as No, clicking " "Cancel button is required for the same process." msgstr "" -#: includes/constant-data.php:311 +#: includes/constant-data.php:323 msgid "Admin email(s)" msgstr "" -#: includes/constant-data.php:311 +#: includes/constant-data.php:323 msgid "" "You can enter a special admin email here. Multiple emails separated with " "comma is possible. If left empty, WordPress admin email setting will be used." msgstr "" -#: includes/constant-data.php:312 +#: includes/constant-data.php:324 msgid "Admin phone" msgstr "" -#: includes/constant-data.php:312 +#: includes/constant-data.php:324 msgid "Enter admin phone that will receive notification messages." msgstr "" -#: includes/constant-data.php:313 +#: includes/constant-data.php:325 msgid "Admin Theme" msgstr "" -#: includes/constant-data.php:313 +#: includes/constant-data.php:325 msgid "" "jQuery UI theme that will be used in calendar, table, datepicker, dialog, " "multi select, tooltip and button elements on the Admin side." msgstr "" -#: includes/constant-data.php:314 +#: includes/constant-data.php:326 msgid "Add WP BASE links to Admin Toolbar" msgstr "" -#: includes/constant-data.php:314 +#: includes/constant-data.php:326 msgid "" "If this option is selected as Yes, WP BASE menu items and pages with WP BASE " "shortcodes can be selected from admin toolbar." msgstr "" -#: includes/constant-data.php:315 +#: includes/constant-data.php:327 msgid "App ID" msgstr "" -#: includes/constant-data.php:315 +#: includes/constant-data.php:327 #, php-format msgid "Get this value from your %s." msgstr "" -#: includes/constant-data.php:315 includes/constant-data.php:316 +#: includes/constant-data.php:327 includes/constant-data.php:328 msgid "Agora account" msgstr "" -#: includes/constant-data.php:316 +#: includes/constant-data.php:328 msgid "App Certificate" msgstr "" -#: includes/constant-data.php:316 +#: includes/constant-data.php:328 #, php-format msgid "Primary certificate from your %s." msgstr "" -#: includes/constant-data.php:317 +#: includes/constant-data.php:329 msgid "Enable Agora" msgstr "" -#: includes/constant-data.php:317 +#: includes/constant-data.php:329 msgid "Enables integration with Agora Online Meetings." msgstr "" -#: includes/constant-data.php:318 -msgid "Layout" -msgstr "" - -#: includes/constant-data.php:318 -msgid "Layout of the participant screens" -msgstr "" - -#: includes/constant-data.php:319 +#: includes/constant-data.php:330 msgid "Agora Subject" msgstr "" -#: includes/constant-data.php:319 includes/constant-data.php:494 +#: includes/constant-data.php:330 includes/constant-data.php:505 #, php-format msgid "" "Meeting subject (title). <abbr title=\"%s\">Booking placeholders</abbr> can " @@ -10390,11 +11175,11 @@ "their real values." msgstr "" -#: includes/constant-data.php:320 +#: includes/constant-data.php:331 msgid "Allow Client Cancel Own Bookings" msgstr "" -#: includes/constant-data.php:320 +#: includes/constant-data.php:331 msgid "" "Whether to allow clients cancel their bookings using the link in " "confirmation and reminder emails or using Booking List table or for logged " @@ -10402,67 +11187,63 @@ "will also need to add CANCEL placeholder to the email message content." msgstr "" -#: includes/constant-data.php:321 +#: includes/constant-data.php:332 msgid "Allow Clients Select Own Timezone" msgstr "" -#: includes/constant-data.php:321 +#: includes/constant-data.php:332 msgid "" "If selected as \"Yes\", clients can manually select their timezone in their " "profile page. This setting overrides automatic dedection." msgstr "" -#: includes/constant-data.php:322 +#: includes/constant-data.php:333 msgid "Allow Client Confirm Bookings by Email" msgstr "" -#: includes/constant-data.php:322 +#: includes/constant-data.php:333 msgid "" "Whether to allow clients confirm their bookings using the link in any email " "they receive. This link is added by using CONFIRM placeholder in email " "bodies." msgstr "" -#: includes/constant-data.php:323 +#: includes/constant-data.php:334 msgid "Allow Client Edit Own Bookings" msgstr "" -#: includes/constant-data.php:323 +#: includes/constant-data.php:334 msgid "" -"Whether you let client edit own appointments on the front end. Client can " -"activate editing popup form by one of the following methods: 1) Clicking " -"Edit button in WordPress user page, 2) Clicking Edit button in List Of " -"Bookings, 4) Clicking Edit button in Bookings tab of Account page, 4) " -"Clicking the link in emails. This link is created by inserting EDIT " -"placeholder to the email body." +"Whether you let client edit own bookings on List of Bookings or Schedules " +"tab of Account page." msgstr "" -#: includes/constant-data.php:324 +#: includes/constant-data.php:335 msgid "Allow Late Booking" msgstr "" -#: includes/constant-data.php:324 +#: includes/constant-data.php:335 msgid "" "Setting this as Yes will allow booking of a time slot when current time is " "within selected time slot, i.e. appointment start time has passed, but it " "has not ended yet." msgstr "" -#: includes/constant-data.php:325 +#: includes/constant-data.php:336 msgid "Allow Registration at Checkout" msgstr "" -#: includes/constant-data.php:325 +#: includes/constant-data.php:336 msgid "" "Whether add registration fields at checkout. \"Auto\" follows WordPress " "\"Anyone can register\" setting." msgstr "" -#: includes/constant-data.php:326 +#: includes/constant-data.php:337 msgid "Set Own Seasonal Schedules" msgstr "" -#: includes/constant-data.php:326 +#: includes/constant-data.php:337 msgid "" "Requires Seasonal Working Hours Addon. Whether you let service providers to " "set their annual schedules using their navigation tab in BuddyPress " @@ -10470,33 +11251,33 @@ "are also allowed to add new custom schedules, but not to delete them." msgstr "" -#: includes/constant-data.php:327 +#: includes/constant-data.php:338 msgid "Cancel Own Bookings" msgstr "" -#: includes/constant-data.php:327 +#: includes/constant-data.php:338 msgid "" "Whether to allow providers cancel their appointments using Booking List " "table or using check boxes in their profile pages. Cancellation lead time is " "still valid." msgstr "" -#: includes/constant-data.php:328 +#: includes/constant-data.php:339 msgid "Confirm Own Bookings" msgstr "" -#: includes/constant-data.php:328 +#: includes/constant-data.php:339 msgid "" "Whether you let service providers to confirm pending appointments assigned " "to them using their navigation tab in BuddyPress (Requires BuddyPress addon) " "or their profile page in regular WordPress." msgstr "" -#: includes/constant-data.php:329 +#: includes/constant-data.php:340 msgid "Create/View/Edit Services" msgstr "" -#: includes/constant-data.php:329 +#: includes/constant-data.php:340 msgid "" "Whether allow providers create and edit own services, view other's services " "on their account pages. Provider will be automatically assigned to services " @@ -10504,11 +11285,11 @@ "services." msgstr "" -#: includes/constant-data.php:330 +#: includes/constant-data.php:341 msgid "Delete Own Services" msgstr "" -#: includes/constant-data.php:330 +#: includes/constant-data.php:341 msgid "" "If you select yes, providers can delete any service created by themselves " "using their profile pages. If you select No, deletion by service provider is " @@ -10517,63 +11298,63 @@ "appointments)." msgstr "" -#: includes/constant-data.php:331 +#: includes/constant-data.php:342 msgid "Select Services to Work for" msgstr "" -#: includes/constant-data.php:331 +#: includes/constant-data.php:342 msgid "" "If you select yes, providers can select which services they are working for " "using their profile pages. In any case, they have to pick at least one " "service." msgstr "" -#: includes/constant-data.php:332 +#: includes/constant-data.php:343 msgid "Edit Own Bookings" msgstr "" -#: includes/constant-data.php:332 +#: includes/constant-data.php:343 msgid "" "Whether you let service providers to manage own bookings. With the last " "option, they can also edit bookings on the admin side, provided that they " "are allowed admin access." msgstr "" -#: includes/constant-data.php:333 +#: includes/constant-data.php:344 msgid "Register Users" msgstr "" -#: includes/constant-data.php:333 +#: includes/constant-data.php:344 msgid "" "Whether you let service providers to register users at Schedules or Manage " "Bookings." msgstr "" -#: includes/constant-data.php:334 +#: includes/constant-data.php:345 msgid "Allow Service Providers Select Own Timezone" msgstr "" -#: includes/constant-data.php:334 +#: includes/constant-data.php:345 msgid "" "If selected as \"Yes\", service providers can manually select their timezone " "in their profile page. This setting overrides automatic dedection." msgstr "" -#: includes/constant-data.php:335 +#: includes/constant-data.php:346 msgid "View Payments" msgstr "" -#: includes/constant-data.php:335 +#: includes/constant-data.php:346 msgid "" "Whether you let service providers view payments for bookings that they were " "booked for." msgstr "" -#: includes/constant-data.php:336 +#: includes/constant-data.php:347 msgid "Set Own Working Hours" msgstr "" -#: includes/constant-data.php:336 +#: includes/constant-data.php:347 msgid "" "Whether you let service providers to set their working hours and holidays " "using their navigation tab in BuddyPress (Requires BuddyPress addon) or " @@ -10581,11 +11362,11 @@ "of self created services." msgstr "" -#: includes/constant-data.php:337 +#: includes/constant-data.php:348 msgid "Apply Only One Coupon per Booking" msgstr "" -#: includes/constant-data.php:337 +#: includes/constant-data.php:348 msgid "" "Valid only when Shopping Cart is active. By default (setting \"No\"), coupon " "discounts are applied to each applicable booking in the shopping cart. If " @@ -10594,25 +11375,25 @@ "applying maximum net discount will be used." msgstr "" -#: includes/constant-data.php:338 +#: includes/constant-data.php:349 msgid "Apply Coupons also to Extras" msgstr "" -#: includes/constant-data.php:338 +#: includes/constant-data.php:349 msgid "If selected as yes, coupon discounts will also be applied to extras." msgstr "" -#: includes/constant-data.php:339 +#: includes/constant-data.php:350 msgid "" "Maximum number of days or months from current day that a client can make a " "booking." msgstr "" -#: includes/constant-data.php:341 +#: includes/constant-data.php:352 msgid "Booking Lower Limit - Lead Time (hours)" msgstr "" -#: includes/constant-data.php:341 +#: includes/constant-data.php:352 msgid "" "This setting will block time slots to prevent them be booked too close to " "the appointment time. For example, if you need 2 days to evaluate and accept " @@ -10620,11 +11401,11 @@ "can be made if start time has not passed)" msgstr "" -#: includes/constant-data.php:343 +#: includes/constant-data.php:354 msgid "Max Number of Time Slots" msgstr "" -#: includes/constant-data.php:343 +#: includes/constant-data.php:354 msgid "" "Only valid with Shopping Cart, Recurring Appointments, Service Bundles and " "WooCommerce addons. Maximum number of selectable time slots for a single " @@ -10632,26 +11413,26 @@ "exceeding this limit. Enter 0 for no limitation." msgstr "" -#: includes/constant-data.php:344 +#: includes/constant-data.php:355 msgid "Min Number of Time Slots" msgstr "" -#: includes/constant-data.php:344 +#: includes/constant-data.php:355 msgid "" "Only valid with Shopping Cart, Recurring Appointments, Service Bundles and " "WooCommerce addons. Minimum accepted number of time slots for a single " "checkout. Different than maximum limit, check is commenced at checkout stage." msgstr "" -#: includes/constant-data.php:355 +#: includes/constant-data.php:366 msgid "Whether to enable terms and conditions checkbox on confirmation form." msgstr "" -#: includes/constant-data.php:357 +#: includes/constant-data.php:368 msgid "Assignment Method of Provider" msgstr "" -#: includes/constant-data.php:357 +#: includes/constant-data.php:368 msgid "" "How service provider is assigned to the service if not selected by client. " "If selected as First Available or Random, first available or a random " @@ -10660,7 +11441,7 @@ "provider among those giving that service will be picked)." msgstr "" -#: includes/constant-data.php:358 +#: includes/constant-data.php:369 #, php-format msgid "" "Setting this as Yes will automatically confirm all booking submissions if " @@ -10670,15 +11451,15 @@ "determine booking status." msgstr "" -#: includes/constant-data.php:358 +#: includes/constant-data.php:369 msgid "Payment required at booking instance" msgstr "" -#: includes/constant-data.php:359 +#: includes/constant-data.php:370 msgid "Auto Delete Expired Appointments" msgstr "" -#: includes/constant-data.php:359 +#: includes/constant-data.php:370 msgid "" "As default (setting as \"No\"), expired appointments (those did not realise " "because of cancellation or no confirmation) are marked as \"removed\" and " @@ -10686,22 +11467,22 @@ "as Yes, such appointments will be automatically deleted." msgstr "" -#: includes/constant-data.php:360 +#: includes/constant-data.php:371 msgid "Auto Delete Lead Time (Hours)" msgstr "" -#: includes/constant-data.php:360 +#: includes/constant-data.php:371 msgid "" "Waiting time for expired appointments to be permanently deleted after their " "expiration. If you set 0, they will be directly deleted before they are " "marked as removed." msgstr "" -#: includes/constant-data.php:361 +#: includes/constant-data.php:372 msgid "Auto Register Client" msgstr "" -#: includes/constant-data.php:361 +#: includes/constant-data.php:372 msgid "" "When registration fields at checkout are not provided, whether register " "client as WP user upon submission of booking. Only effective if client " @@ -10709,155 +11490,155 @@ "case client is asked to login first)." msgstr "" -#: includes/constant-data.php:362 +#: includes/constant-data.php:373 msgid "Notify User about Auto Register" msgstr "" -#: includes/constant-data.php:362 +#: includes/constant-data.php:373 msgid "" "Whether auto registered client will get an email informing their login " "credentials. Admin will always get a notification." msgstr "" -#: includes/constant-data.php:363 +#: includes/constant-data.php:374 msgid "Auto Register Auto Login" msgstr "" -#: includes/constant-data.php:363 +#: includes/constant-data.php:374 msgid "" "Whether auto registered client will be automatically logged in. This is " "always assumed \"Yes\" with WooCommerce integration." msgstr "" -#: includes/constant-data.php:364 +#: includes/constant-data.php:375 msgid "Country Business Based in" msgstr "" -#: includes/constant-data.php:365 +#: includes/constant-data.php:376 msgid "Post Types for Bio Pages" msgstr "" -#: includes/constant-data.php:365 +#: includes/constant-data.php:376 msgid "" "Post types that can be used for service provider bio pages. Default: \"page\"" msgstr "" -#: includes/constant-data.php:366 +#: includes/constant-data.php:377 msgid "Also Assign Existing Members" msgstr "" -#: includes/constant-data.php:366 +#: includes/constant-data.php:377 msgid "" "Whether existing members who are in the selected member type will be " "assigned as service provider when these settings saved." msgstr "" -#: includes/constant-data.php:367 +#: includes/constant-data.php:378 msgid "Book Me Tab Content" msgstr "" -#: includes/constant-data.php:367 +#: includes/constant-data.php:378 msgid "" "Add shortcodes and other text that will make the content of the book me tab. " "During booking, service provider whose profile is being displayed will be " "automatically selected (Client cannot select another provider)." msgstr "" -#: includes/constant-data.php:368 +#: includes/constant-data.php:379 msgid "Book Us Tab Content" msgstr "" -#: includes/constant-data.php:368 +#: includes/constant-data.php:379 msgid "" "Add shortcodes and other text that will make the content of the book us tab. " "Only services of the group assigned to the related location is selectable " "from this booking calendar. Tip: You can use <code>[app_book]</code>" msgstr "" -#: includes/constant-data.php:369 +#: includes/constant-data.php:380 msgid "Provider can Edit Book Me Content" msgstr "" -#: includes/constant-data.php:369 +#: includes/constant-data.php:380 msgid "" "Whether provider can edit book me content with WP editor in their profile " "settings tab." msgstr "" -#: includes/constant-data.php:370 +#: includes/constant-data.php:381 msgid "Book Me Page Slug" msgstr "" -#: includes/constant-data.php:370 +#: includes/constant-data.php:381 msgid "" "WP slug used to create Book Me url. Lowercase alphanumeric characters, " "dashes, and underscores are allowed." msgstr "" -#: includes/constant-data.php:371 +#: includes/constant-data.php:382 msgid "Book Us Page Slug" msgstr "" -#: includes/constant-data.php:371 +#: includes/constant-data.php:382 msgid "" "WP slug used to create Book Us url. Lowercase alphanumeric characters, " "dashes, and underscores are allowed." msgstr "" -#: includes/constant-data.php:372 +#: includes/constant-data.php:383 msgid "Integrate Locations with BuddyPress Groups" msgstr "" -#: includes/constant-data.php:372 +#: includes/constant-data.php:383 msgid "" "Requires Locations addon. When you select this option, each group can be " "related to a WP BASE location. Locations should be defined separately." msgstr "" -#: includes/constant-data.php:373 +#: includes/constant-data.php:384 msgid "Member Types to Assign as Provider" msgstr "" -#: includes/constant-data.php:373 +#: includes/constant-data.php:384 msgid "" "Members of selected types will be automatically assigned as service provider " "when they register, login or activate their accounts" msgstr "" -#: includes/constant-data.php:374 +#: includes/constant-data.php:385 msgid "Also Notify Client" msgstr "" -#: includes/constant-data.php:374 +#: includes/constant-data.php:385 msgid "" "Whether client of the booking will also be notified about selected events." msgstr "" -#: includes/constant-data.php:375 +#: includes/constant-data.php:386 msgid "Events to be Notified" msgstr "" -#: includes/constant-data.php:375 +#: includes/constant-data.php:386 msgid "" "When these booking related events happen, provider will be notified by " "BuddyPress notification system. Clear all to disable booking notifications." msgstr "" -#: includes/constant-data.php:376 +#: includes/constant-data.php:387 msgid "Bookings Tab Slug" msgstr "" -#: includes/constant-data.php:376 +#: includes/constant-data.php:387 msgid "" "WP slug used to create bookings control and settings tab url. Lowercase " "alphanumeric characters, dashes, and underscores are allowed." msgstr "" -#: includes/constant-data.php:377 +#: includes/constant-data.php:388 msgid "Create a Book Me Tab in User Profile" msgstr "" -#: includes/constant-data.php:377 +#: includes/constant-data.php:388 msgid "" "Whether a functional make a booking page will be added to profile tab of " "service providers. If \"Service Provider Selects\" is selected, provider can " @@ -10866,37 +11647,37 @@ "displayed." msgstr "" -#: includes/constant-data.php:378 +#: includes/constant-data.php:389 msgid "Create a Book Us Tab in Group Page" msgstr "" -#: includes/constant-data.php:378 +#: includes/constant-data.php:389 msgid "" "Whether a functional make a booking tab will be added to group page. Only " "services of the group are bookable from this booking calendar." msgstr "" -#: includes/constant-data.php:379 +#: includes/constant-data.php:390 msgid "Show Dashboard" msgstr "" -#: includes/constant-data.php:379 +#: includes/constant-data.php:390 msgid "Whether provider can view dashboard in their profile page." msgstr "" -#: includes/constant-data.php:381 +#: includes/constant-data.php:392 #, php-format msgid "" "With selection \"compact\", next/previous links are shown on top of the " "calendar. For samples see our %s." msgstr "" -#: includes/constant-data.php:382 includes/constant-data.php:667 -#: includes/constant-data.php:668 +#: includes/constant-data.php:393 includes/constant-data.php:685 +#: includes/constant-data.php:686 msgid "Calendar Time Slot Display" msgstr "" -#: includes/constant-data.php:382 +#: includes/constant-data.php:393 #, php-format msgid "" "Only in Monthly and Weekly Calendar views, determines which time slots are " @@ -10907,86 +11688,86 @@ "another time zone, full range is displayed." msgstr "" -#: includes/constant-data.php:382 +#: includes/constant-data.php:393 msgid "Click to access Working Hours page" msgstr "" -#: includes/constant-data.php:383 includes/constant-data.php:393 -#: includes/constant-data.php:394 includes/constant-data.php:407 -#: includes/constant-data.php:439 includes/constant-data.php:555 -#: includes/constant-data.php:566 +#: includes/constant-data.php:394 includes/constant-data.php:404 +#: includes/constant-data.php:405 includes/constant-data.php:418 +#: includes/constant-data.php:450 includes/constant-data.php:568 +#: includes/constant-data.php:579 msgid "Create and Attach pdf File" msgstr "" -#: includes/constant-data.php:383 includes/constant-data.php:393 -#: includes/constant-data.php:394 includes/constant-data.php:407 -#: includes/constant-data.php:439 includes/constant-data.php:555 -#: includes/constant-data.php:566 +#: includes/constant-data.php:394 includes/constant-data.php:404 +#: includes/constant-data.php:405 includes/constant-data.php:418 +#: includes/constant-data.php:450 includes/constant-data.php:568 +#: includes/constant-data.php:579 msgid "" "Whether to attach a pdf file that will be created from the below fields. If " "attachment field is empty, file will not be attached (empty file will not be " "sent)." msgstr "" -#: includes/constant-data.php:384 +#: includes/constant-data.php:395 msgid "Cancellation Limit (hours)" msgstr "" -#: includes/constant-data.php:384 +#: includes/constant-data.php:395 msgid "" "Number of hours upto which client can cancel the appointment relative to the " "appointment start time. For example, entering 24 will disable cancellations " "one day before the appointment is due." msgstr "" -#: includes/constant-data.php:385 +#: includes/constant-data.php:396 msgid "Booking Cancelled Page" msgstr "" -#: includes/constant-data.php:385 +#: includes/constant-data.php:396 msgid "" "In case they are cancelling using the email link, the page that the clients " "will be redirected after cancellation." msgstr "" -#: includes/constant-data.php:386 +#: includes/constant-data.php:397 msgid "Cancel Return Page" msgstr "" -#: includes/constant-data.php:386 +#: includes/constant-data.php:397 msgid "" "The page that client will be returned when he clicks the cancel link on " "Paypal website." msgstr "" -#: includes/constant-data.php:387 +#: includes/constant-data.php:398 msgid "Calendar Caption Color" msgstr "" -#: includes/constant-data.php:387 includes/constant-data.php:388 +#: includes/constant-data.php:398 includes/constant-data.php:399 msgid "Only effective when calendar design is \"compact\"" msgstr "" -#: includes/constant-data.php:388 +#: includes/constant-data.php:399 msgid "Calendar Caption Font Color" msgstr "" -#: includes/constant-data.php:389 +#: includes/constant-data.php:400 msgid "Pending Approval bookings auto removal time (hours)" msgstr "" -#: includes/constant-data.php:389 +#: includes/constant-data.php:400 msgid "" "Pending bookings that require manual approval will be automatically removed " "and time slot will be freed when this period of time has passed counting " "from booking submission. Enter 0 to disable. Default: 24." msgstr "" -#: includes/constant-data.php:390 +#: includes/constant-data.php:401 msgid "Pending Payment bookings auto removal time (minutes)" msgstr "" -#: includes/constant-data.php:390 +#: includes/constant-data.php:401 msgid "" "Same as above, but applies to bookings that has a payment method other than " "Manual Payments. If left empty or set to 0, the above \"Pending Approval " @@ -10994,11 +11775,11 @@ "0, then auto removal of pending bookings will be disabled. Default: 15" msgstr "" -#: includes/constant-data.php:391 +#: includes/constant-data.php:402 msgid "Client Selects Provider" msgstr "" -#: includes/constant-data.php:391 +#: includes/constant-data.php:402 msgid "" "Whether service provider pulldown menu is displayed so that client can pick " "a service provider giving the service. If \"forced to pick one\", \"No " @@ -11007,32 +11788,32 @@ "\"Assignment Method of Service Provider\" setting." msgstr "" -#: includes/constant-data.php:392 +#: includes/constant-data.php:403 msgid "Time Slot Colors" msgstr "" -#: includes/constant-data.php:392 +#: includes/constant-data.php:403 msgid "" "There are suggested color sets here which will match with the theme, but you " "can select any other set too or you can enter your custom colors using color " "picker, settings of which are visible after you select \"Custom\"." msgstr "" -#: includes/constant-data.php:395 +#: includes/constant-data.php:406 msgid "Hidden Fields on Booking Info" msgstr "" -#: includes/constant-data.php:395 +#: includes/constant-data.php:406 msgid "" "Selected fields will not be displayed on checkout. Fields with empty values " "may not be displayed as well." msgstr "" -#: includes/constant-data.php:396 +#: includes/constant-data.php:407 msgid "Maximum Allowed Checkout Time (minutes)" msgstr "" -#: includes/constant-data.php:396 +#: includes/constant-data.php:407 msgid "" "Only valid with Shopping Cart, Recurring Appointments, Service Bundles and " "WooCommerce addons that use WP BASE Cart. This is the countdown time which " @@ -11040,54 +11821,54 @@ "disable. Default: 12" msgstr "" -#: includes/constant-data.php:397 +#: includes/constant-data.php:408 msgid "Website Currency - Symbol" msgstr "" -#: includes/constant-data.php:398 +#: includes/constant-data.php:409 msgid "Show Decimal in Prices" msgstr "" -#: includes/constant-data.php:399 +#: includes/constant-data.php:410 msgid "Currency Symbol Position" msgstr "" -#: includes/constant-data.php:400 +#: includes/constant-data.php:411 msgid "Debug Mode" msgstr "" -#: includes/constant-data.php:400 +#: includes/constant-data.php:411 msgid "" "Displays information about configuration errors and time slots (why they are " "not available) in tooltips and on the page. These texts are only visible to " "admins." msgstr "" -#: includes/constant-data.php:401 +#: includes/constant-data.php:412 msgid "Decimal Separator" msgstr "" -#: includes/constant-data.php:402 +#: includes/constant-data.php:413 msgid "" "This is the default language of your website. In paranthesis WordPress " "locale codes are given." msgstr "" -#: includes/constant-data.php:403 +#: includes/constant-data.php:414 msgid "Business Rep." msgstr "" -#: includes/constant-data.php:403 +#: includes/constant-data.php:414 msgid "" "If no providers defined, bookings will be assigned to this user. Also his " "working hours will be used as template for new providers and services." msgstr "" -#: includes/constant-data.php:404 +#: includes/constant-data.php:415 msgid "Cumulative Security Deposit" msgstr "" -#: includes/constant-data.php:404 +#: includes/constant-data.php:415 msgid "" "Only valid with Shopping Cart addon. By default (setting \"No\") deposit is " "calculated as maximum among all selected services in the cart, e.g. $30 from " @@ -11095,31 +11876,31 @@ "total amount will be asked from the client; in this example, $60." msgstr "" -#: includes/constant-data.php:405 +#: includes/constant-data.php:416 msgid "Post Types for Service Connected Posts" msgstr "" -#: includes/constant-data.php:405 +#: includes/constant-data.php:416 msgid "" "Post types that can be used to relate service to a post. Default: \"page\"" msgstr "" -#: includes/constant-data.php:406 +#: includes/constant-data.php:417 msgid "Disable Tooltips in Booking Calendars" msgstr "" -#: includes/constant-data.php:406 +#: includes/constant-data.php:417 msgid "" "Selecting \"No\" will disable tooltips like \"Click to pick date\", etc. " "Note: In Debug mode, tooltips are displayed." msgstr "" -#: includes/constant-data.php:408 +#: includes/constant-data.php:419 #, php-format msgid "Due Payment Reminder Sending Limit of Balance (%s)" msgstr "" -#: includes/constant-data.php:408 +#: includes/constant-data.php:419 msgid "" "Due payment reminder is only sent if balance is negative and absolute value " "of balance for the appointment is greater than this amount. For example, if " @@ -11128,30 +11909,30 @@ "case of any negative balance." msgstr "" -#: includes/constant-data.php:409 includes/constant-data.php:713 -msgid "Due Payment Reminder email Message" +#: includes/constant-data.php:420 includes/constant-data.php:733 +msgid "Due Payment Reminder Email Message" msgstr "" -#: includes/constant-data.php:410 +#: includes/constant-data.php:421 msgid "Booking Statuses Due Payment emails Applied to" msgstr "" -#: includes/constant-data.php:410 +#: includes/constant-data.php:421 msgid "" "Only clients having appointments with selected status(es) will receive due " "payment reminder email. If none selected, due payment emails will not be " "sent at all." msgstr "" -#: includes/constant-data.php:411 includes/constant-data.php:714 -msgid "Due Payment Reminder email Subject" +#: includes/constant-data.php:422 includes/constant-data.php:734 +msgid "Due Payment Reminder Email Subject" msgstr "" -#: includes/constant-data.php:412 +#: includes/constant-data.php:423 msgid "Due Payment Reminder email Sending Time (hours)" msgstr "" -#: includes/constant-data.php:412 +#: includes/constant-data.php:423 msgid "" "Defines the time in hours that reminder email will be sent after the " "appointment has been booked (creation time). Note that this is different " @@ -11160,11 +11941,11 @@ "separated with a comma, e.g. 48,72." msgstr "" -#: includes/constant-data.php:413 +#: includes/constant-data.php:424 msgid "Assign Dummy Providers to" msgstr "" -#: includes/constant-data.php:413 +#: includes/constant-data.php:424 msgid "" "You can define \"Dummy\" service providers to enrich your service provider " "alternatives and variate your working schedules. Their availability and " @@ -11172,21 +11953,21 @@ "they are supposed to receive will be forwarded to the user you select here." msgstr "" -#: includes/constant-data.php:414 +#: includes/constant-data.php:425 msgid "Service Duration Display Format" msgstr "" -#: includes/constant-data.php:414 +#: includes/constant-data.php:425 msgid "" "With this setting, you can select display format of durations on the front " "end (minutes, hours, hours+minutes)." msgstr "" -#: includes/constant-data.php:415 +#: includes/constant-data.php:426 msgid "Direct Checkout after Confirming Form" msgstr "" -#: includes/constant-data.php:415 +#: includes/constant-data.php:426 msgid "" "By default (setting \"No\"), after client confirms the form, booking is " "added to WC cart and client stays on booking page so that they can add more " @@ -11194,82 +11975,82 @@ "\"Yes\". Then they will be redirected to WC checkout page after confirm." msgstr "" -#: includes/constant-data.php:416 includes/constant-data.php:661 +#: includes/constant-data.php:427 includes/constant-data.php:679 msgid "Enable Integration" msgstr "" -#: includes/constant-data.php:416 +#: includes/constant-data.php:427 #, php-format msgid "" "Enables integration with EDD e-commerce plugin. That is, WP BASE services " "can be sold as EDD products. Also see %s." msgstr "" -#: includes/constant-data.php:416 +#: includes/constant-data.php:427 msgid "EDD demo website" msgstr "" -#: includes/constant-data.php:417 +#: includes/constant-data.php:428 msgid "Booking Info" msgstr "" -#: includes/constant-data.php:417 +#: includes/constant-data.php:428 #, php-format msgid "" "Short information about the booking, for example date, time, provider. All " "<abbr title=\"%s\">booking placeholders</abbr> can be used." msgstr "" -#: includes/constant-data.php:418 includes/custom-texts.php:830 +#: includes/constant-data.php:429 includes/custom-texts.php:839 msgid "Booking Details" msgstr "" -#: includes/constant-data.php:418 +#: includes/constant-data.php:429 #, php-format msgid "" "Details of booking that will be added below product name. All <abbr " "title=\"%s\">booking placeholders</abbr> can be used." msgstr "" -#: includes/constant-data.php:419 +#: includes/constant-data.php:430 msgid "Booking Title" msgstr "" -#: includes/constant-data.php:419 +#: includes/constant-data.php:430 #, php-format msgid "" "Defines how the selected booking will be displayed in the cart and receipt. " "All <abbr title=\"%s\">booking placeholders</abbr> can be used." msgstr "" -#: includes/constant-data.php:420 +#: includes/constant-data.php:431 msgid "Editable Booking Fields" msgstr "" -#: includes/constant-data.php:420 +#: includes/constant-data.php:431 #, php-format msgid "" "Select which booking fields can be edited. Note: UDF fields can be limited " "using \"Editable\" column on %s page. " msgstr "" -#: includes/constant-data.php:420 +#: includes/constant-data.php:431 msgid "UDF settings" msgstr "" -#: includes/constant-data.php:421 +#: includes/constant-data.php:432 msgid "Allow Price Display and Change" msgstr "" -#: includes/constant-data.php:421 +#: includes/constant-data.php:432 msgid "Whether change in selections will affect price." msgstr "" -#: includes/constant-data.php:422 +#: includes/constant-data.php:433 msgid "Editing Lower Limit (hours)" msgstr "" -#: includes/constant-data.php:422 +#: includes/constant-data.php:433 msgid "" "Number of hours from appointment start time until which client can edit " "their appointment. For example, entering 24 will disable editing one day " @@ -11278,32 +12059,32 @@ "editing capability with \"cap\" attribute are not limited with this setting." msgstr "" -#: includes/constant-data.php:423 +#: includes/constant-data.php:434 msgid "Editing Upper Limit (days)" msgstr "" -#: includes/constant-data.php:423 +#: includes/constant-data.php:434 msgid "" "Only bookings whose start date is earlier than this setting can be edited. " "If left empty, global Upper Limit will be used." msgstr "" -#: includes/constant-data.php:424 +#: includes/constant-data.php:435 msgid "Enable Timezones" msgstr "" -#: includes/constant-data.php:424 +#: includes/constant-data.php:435 msgid "" "If selected as \"Yes\", timezone of the client is taken into account during " "display of booking UI's, list of bookings and emails. Admin side and " "database records are not affected." msgstr "" -#: includes/constant-data.php:425 +#: includes/constant-data.php:436 msgid "Show End Date Based on Venue Bookings" msgstr "" -#: includes/constant-data.php:425 +#: includes/constant-data.php:436 msgid "" "For bookings that last one day and longer, whether display end date " "according to venue bookings. By default (Setting \"No\"), end date is " @@ -11315,142 +12096,142 @@ "displayed on the front end." msgstr "" -#: includes/constant-data.php:426 +#: includes/constant-data.php:437 msgid "Price to Apply upon Multiple Rule Match" msgstr "" -#: includes/constant-data.php:426 +#: includes/constant-data.php:437 msgid "" "If there are several matching rules, price returned can be selected among " "minimum, maximum or average of the non-zero prices calculated by matching " "rules." msgstr "" -#: includes/constant-data.php:427 +#: includes/constant-data.php:438 msgid "Add Caption on Thumbnails" msgstr "" -#: includes/constant-data.php:427 +#: includes/constant-data.php:438 msgid "" "Whether to add a caption of event date and location on product thumbnails." msgstr "" -#: includes/constant-data.php:428 includes/constant-data.php:508 +#: includes/constant-data.php:439 includes/constant-data.php:519 msgid "Supported Post Types" msgstr "" -#: includes/constant-data.php:428 +#: includes/constant-data.php:439 msgid "" "Select post types Event Bookings will be used for. Setting metabox will be " "added to post edit pages of the selected post types." msgstr "" -#: includes/constant-data.php:429 +#: includes/constant-data.php:440 msgid "Event Calendar Small Tooltips" msgstr "" -#: includes/constant-data.php:429 +#: includes/constant-data.php:440 msgid "Whether to use small tooltips in the event calendar." msgstr "" -#: includes/constant-data.php:430 +#: includes/constant-data.php:441 msgid "Event Calendar Items Inline" msgstr "" -#: includes/constant-data.php:430 +#: includes/constant-data.php:441 msgid "" "Whether show item details in event calendar inline (with their thumbnail " "images) or as simple lines (details displayed on mouse hover)." msgstr "" -#: includes/constant-data.php:431 +#: includes/constant-data.php:442 msgid "Extras Multiplied with Pax" msgstr "" -#: includes/constant-data.php:431 +#: includes/constant-data.php:442 msgid "" "Only effective when Group Bookings addon is active. Selected extras are " "multiplied by selected number of guests and price adjusted accordingly." msgstr "" -#: includes/constant-data.php:432 +#: includes/constant-data.php:443 msgid "Selection Required" msgstr "" -#: includes/constant-data.php:432 +#: includes/constant-data.php:443 msgid "" "Whether client will be forced to pick an option in order to finalize booking " "submission." msgstr "" -#: includes/constant-data.php:433 +#: includes/constant-data.php:444 msgid "Facebook App ID" msgstr "" -#: includes/constant-data.php:433 +#: includes/constant-data.php:444 #, php-format msgid "" "Enter your App ID number here. If you don't have a Facebook App yet, you " "will need to create one <a href='%s' target='_blank'>here</a>" msgstr "" -#: includes/constant-data.php:434 +#: includes/constant-data.php:445 msgid "My website already uses Facebook" msgstr "" -#: includes/constant-data.php:434 +#: includes/constant-data.php:445 msgid "" "By default, Facebook script will be loaded by the plugin. If you are already " "running Facebook scripts, to prevent any conflict, check this option." msgstr "" -#: includes/constant-data.php:435 +#: includes/constant-data.php:446 msgid "Fee (%)" msgstr "" -#: includes/constant-data.php:435 +#: includes/constant-data.php:446 msgid "" "Fee in percent that will be added to the total amount in case this method is " "picked" msgstr "" -#: includes/constant-data.php:436 +#: includes/constant-data.php:447 msgid "Fee (fixed)" msgstr "" -#: includes/constant-data.php:436 +#: includes/constant-data.php:447 msgid "" "Similar to percentage fee, but a fixed amount will be added to the total " "amount in case this method is picked. If both fields are filled BOTH fees " "will be applied: First percentage, then fixed amount." msgstr "" -#: includes/constant-data.php:437 +#: includes/constant-data.php:448 msgid "Additional css Rules" msgstr "" -#: includes/constant-data.php:437 +#: includes/constant-data.php:448 msgid "" "You can add css rules to customize styling of Front End Booking Management " "table. These will be added to the front end appointment management page only." msgstr "" -#: includes/constant-data.php:438 +#: includes/constant-data.php:449 msgid "Prepayment (fixed)" msgstr "" -#: includes/constant-data.php:438 +#: includes/constant-data.php:449 msgid "" "Similar to percent prepayment, but a fixed amount will be asked from the " "client per appointment. If both fields are filled, only the fixed down " "payment will be taken into account." msgstr "" -#: includes/constant-data.php:440 +#: includes/constant-data.php:451 msgid "Follow-up email Sending Time (days)" msgstr "" -#: includes/constant-data.php:440 +#: includes/constant-data.php:451 msgid "" "Defines how many days after no client activity an email will be sent, " "counting from their latest finalised booking end time (in completed or " @@ -11458,31 +12239,31 @@ "enter desired delay days separated with a comma, e.g. 30,60." msgstr "" -#: includes/constant-data.php:442 +#: includes/constant-data.php:453 msgid "From email" msgstr "" -#: includes/constant-data.php:442 +#: includes/constant-data.php:453 msgid "" "Email address that will be used in \"from\" field of outgoing emails. If " "left empty, no-reply@yourdomain will be used." msgstr "" -#: includes/constant-data.php:443 +#: includes/constant-data.php:454 msgid "From name" msgstr "" -#: includes/constant-data.php:443 +#: includes/constant-data.php:454 msgid "" "Name that will be used in \"from name\" field of outgoing emails. If left " "empty, blog name will be used." msgstr "" -#: includes/constant-data.php:444 +#: includes/constant-data.php:455 msgid "Allow Clients for Google Calendar API Integration" msgstr "" -#: includes/constant-data.php:444 +#: includes/constant-data.php:455 msgid "" "Whether you let registered clients (WordPress members) to integrate with " "their own Google Calendar account using their profile page. They will just " @@ -11491,11 +12272,11 @@ "user roles that can use GCal integration." msgstr "" -#: includes/constant-data.php:445 +#: includes/constant-data.php:456 msgid "Allow Clients to Send Copies of their Bookings to Additional Calendars " msgstr "" -#: includes/constant-data.php:445 +#: includes/constant-data.php:456 msgid "" "Whether clients can add calendars of other people (e.g. family members) to " "send a copy of each of their bookings as read-only. For clients, number of " @@ -11503,11 +12284,11 @@ "profile page." msgstr "" -#: includes/constant-data.php:446 +#: includes/constant-data.php:457 msgid "Each Location has its Own Calendar" msgstr "" -#: includes/constant-data.php:446 +#: includes/constant-data.php:457 #, php-format msgid "" "Whether each location has its own calendar in GCal account of the website. " @@ -11515,22 +12296,22 @@ "selecting as Yes, you can set calendar for each location on %s page." msgstr "" -#: includes/constant-data.php:447 +#: includes/constant-data.php:458 msgid "Allow Service Providers for Google Calendar API Integration" msgstr "" -#: includes/constant-data.php:447 +#: includes/constant-data.php:458 msgid "" "Whether you let your service providers to integrate with their own Google " "Calendar account using their profile page. They will just need to give " "authorization and select calendar in their profile pages." msgstr "" -#: includes/constant-data.php:448 +#: includes/constant-data.php:459 msgid "Allow Service Providers for Event Summary and Description" msgstr "" -#: includes/constant-data.php:448 +#: includes/constant-data.php:459 msgid "" "Whether you let your service providers to enter own event summary and " "descriptions using their profile page. If you select \"No\" (not allowed) " @@ -11538,26 +12319,26 @@ "description for them. " msgstr "" -#: includes/constant-data.php:449 +#: includes/constant-data.php:460 msgid "Google API Key" msgstr "" -#: includes/constant-data.php:449 +#: includes/constant-data.php:460 #, php-format msgid "" "Enter your Google API Key which can be taken from %s and common for all " "Google platforms or follow the instructions." msgstr "" -#: includes/constant-data.php:449 includes/constant-data.php:475 +#: includes/constant-data.php:460 includes/constant-data.php:486 msgid "Google Cloud Platform Console" msgstr "" -#: includes/constant-data.php:450 includes/constant-data.php:462 +#: includes/constant-data.php:461 includes/constant-data.php:473 msgid "Integration Mode" msgstr "" -#: includes/constant-data.php:450 +#: includes/constant-data.php:461 msgid "" "Selects method of communication of WP BASE with GCal. WP BASE → GCal " "setting sends/exports bookings to your selected Google calendar, but events " @@ -11570,11 +12351,11 @@ "too." msgstr "" -#: includes/constant-data.php:451 +#: includes/constant-data.php:462 msgid "Bookings will be sent to Google Calendar for" msgstr "" -#: includes/constant-data.php:451 +#: includes/constant-data.php:462 msgid "" "If you select \"All bookings\", any booking made from this website will be " "sent to the selected calendar. If you select \"Unassigned bookings\", only " @@ -11584,11 +12365,11 @@ "for that service or existing ones are unavailable." msgstr "" -#: includes/constant-data.php:452 +#: includes/constant-data.php:463 msgid "Additional Calendars to Receive Copies of your Bookings" msgstr "" -#: includes/constant-data.php:452 +#: includes/constant-data.php:463 msgid "" "You can add calendars of other people (e.g. co-workers) to send a copy of " "each booking as read-only (they will have new bookings and updates as events " @@ -11599,28 +12380,28 @@ "format). You can add multiple calendars/emails separated by comma. " msgstr "" -#: includes/constant-data.php:453 +#: includes/constant-data.php:464 msgid "" "Background color of Google Calendar events in Schedules. Text color will be " "automatically adjusted." msgstr "" -#: includes/constant-data.php:454 +#: includes/constant-data.php:465 msgid "Google Calendar Button Settings" msgstr "" -#: includes/constant-data.php:454 +#: includes/constant-data.php:465 msgid "" "Whether to let client access his Google Calendar account using Google " "Calendar button. Button is inserted in List of Bookings shortcode and user " "page/tab if applicable." msgstr "" -#: includes/constant-data.php:455 +#: includes/constant-data.php:466 msgid "Event Description for Clients" msgstr "" -#: includes/constant-data.php:455 +#: includes/constant-data.php:466 #, php-format msgid "" "Same as \"Event Summary for Client\" setting. For the above two fields, " @@ -11628,45 +12409,45 @@ "GCal, these placeholders will be replaced by their real values." msgstr "" -#: includes/constant-data.php:456 +#: includes/constant-data.php:467 msgid "To get your Google Client ID follow instructions" msgstr "" -#: includes/constant-data.php:457 +#: includes/constant-data.php:468 msgid "Client Secret" msgstr "" -#: includes/constant-data.php:457 +#: includes/constant-data.php:468 msgid "To get your Google Client Secret follow instructions" msgstr "" -#: includes/constant-data.php:458 +#: includes/constant-data.php:469 msgid "Event Summary for Clients" msgstr "" -#: includes/constant-data.php:458 +#: includes/constant-data.php:469 msgid "" "Clients are not allowed to enter their event summary and description " "settings. The values you enter here will be used as their Event summary and " "description templates." msgstr "" -#: includes/constant-data.php:459 +#: includes/constant-data.php:470 msgid "Enable Google Meet" msgstr "" -#: includes/constant-data.php:459 +#: includes/constant-data.php:470 msgid "" "Whether a Google Meet will be created for each GCal event where provider and " "client are participants. You can use GOOGLE_MEET placeholder to add video " "conference link to the emails." msgstr "" -#: includes/constant-data.php:460 includes/constant-data.php:463 +#: includes/constant-data.php:471 includes/constant-data.php:474 msgid "Event Description" msgstr "" -#: includes/constant-data.php:460 +#: includes/constant-data.php:471 #, php-format msgid "" "Each booking exported to GCal creates a calendar \"event\". This template " @@ -11676,11 +12457,11 @@ "values." msgstr "" -#: includes/constant-data.php:461 +#: includes/constant-data.php:472 msgid "Google Calendar Location" msgstr "" -#: includes/constant-data.php:461 +#: includes/constant-data.php:472 msgid "" "Enter the address or text that will be used as location field in Google " "Calendar. If you are using Locations addon and entered a location address " @@ -11688,7 +12469,7 @@ "address field empty, then your website description is sent." msgstr "" -#: includes/constant-data.php:462 +#: includes/constant-data.php:473 msgid "" "Selects method of communication of WP BASE with GCal for locations. WP BASE " "→ GCal setting sends/exports bookings to your selected Google calendar, " @@ -11701,7 +12482,7 @@ "too." msgstr "" -#: includes/constant-data.php:463 +#: includes/constant-data.php:474 #, php-format msgid "" "Each booking exported to GCal creates a calendar \"event\". This template " @@ -11711,31 +12492,31 @@ "replaced by their real values." msgstr "" -#: includes/constant-data.php:464 includes/constant-data.php:471 +#: includes/constant-data.php:475 includes/constant-data.php:482 msgid "Event Summary (Name)" msgstr "" -#: includes/constant-data.php:464 +#: includes/constant-data.php:475 msgid "" "This template defines name of the event (also known as event summary) for " "the location." msgstr "" -#: includes/constant-data.php:465 +#: includes/constant-data.php:476 msgid "User Roles Allowed for GCal Integration and Additional Calendars" msgstr "" -#: includes/constant-data.php:465 +#: includes/constant-data.php:476 msgid "" "If above permission settings are set as \"Only allowed user roles\", then " "you can select those role(s) here. Multiple selections are allowed." msgstr "" -#: includes/constant-data.php:466 +#: includes/constant-data.php:477 msgid "Enable Push Notifications" msgstr "" -#: includes/constant-data.php:466 +#: includes/constant-data.php:477 #, php-format msgid "" "Enabling Push Notifications allows any change in Google Calendar events to " @@ -11743,15 +12524,15 @@ "must verify your domain in Google Admin console to use this feature. %s" msgstr "" -#: includes/constant-data.php:466 +#: includes/constant-data.php:477 msgid "Click for help" msgstr "" -#: includes/constant-data.php:467 +#: includes/constant-data.php:478 msgid "Calendar to be used" msgstr "" -#: includes/constant-data.php:467 +#: includes/constant-data.php:478 msgid "" "Select the Google calendar in which your bookings will be saved. Your email " "address represents your primary calendar. If you added a calendar after " @@ -11759,11 +12540,11 @@ "make it visible here." msgstr "" -#: includes/constant-data.php:468 +#: includes/constant-data.php:479 msgid "Service Name (Internal only)" msgstr "" -#: includes/constant-data.php:468 +#: includes/constant-data.php:479 msgid "" "Imported Google Calendar events are saved as WP BASE bookings, so that they " "can reserve working hours of the providers. A virtual, uneditable, " @@ -11771,11 +12552,11 @@ "change the name of this service." msgstr "" -#: includes/constant-data.php:469 +#: includes/constant-data.php:480 msgid "Statuses to Delete Events" msgstr "" -#: includes/constant-data.php:469 +#: includes/constant-data.php:480 msgid "" "Booking statuses for which corresponding event will be deleted from Google " "Calendar. If you want to keep even your past events, uncheck all. Note: If " @@ -11784,11 +12565,11 @@ "new provider." msgstr "" -#: includes/constant-data.php:470 +#: includes/constant-data.php:481 msgid "Statuses to Create Events" msgstr "" -#: includes/constant-data.php:470 +#: includes/constant-data.php:481 msgid "" "Booking statuses for which a corresponding event will be created/updated in " "Google Calendar. If none selected, no events will be created. Tip: If you " @@ -11796,17 +12577,17 @@ "uncheck all." msgstr "" -#: includes/constant-data.php:471 +#: includes/constant-data.php:482 msgid "" "Each booking exported to GCal creates a calendar \"event\". This template " "defines name of the event (also known as event summary)." msgstr "" -#: includes/constant-data.php:472 +#: includes/constant-data.php:483 msgid "Use wpautop in Event Descriptions" msgstr "" -#: includes/constant-data.php:472 +#: includes/constant-data.php:483 msgid "" "WordPress uses autoP function to format content easily and quickly by " "replacing double line breaks with paragraphs. In event descriptions, such a " @@ -11814,11 +12595,11 @@ "event descriptions." msgstr "" -#: includes/constant-data.php:473 +#: includes/constant-data.php:484 msgid "Event Description for Providers" msgstr "" -#: includes/constant-data.php:473 +#: includes/constant-data.php:484 #, php-format msgid "" "Same as \"Event Summary for Providers\" setting. For the above two fields, " @@ -11826,51 +12607,51 @@ "GCal, these placeholders will be replaced by their real values." msgstr "" -#: includes/constant-data.php:474 +#: includes/constant-data.php:485 msgid "Event Summary for Providers" msgstr "" -#: includes/constant-data.php:474 +#: includes/constant-data.php:485 msgid "" "If you do not allow providers to enter their event summary and description, " "values you enter here will be used as their Event summary and description " "templates." msgstr "" -#: includes/constant-data.php:475 +#: includes/constant-data.php:486 msgid "Google Maps API key" msgstr "" -#: includes/constant-data.php:475 +#: includes/constant-data.php:486 #, php-format msgid "Enter API key. API key can be taken from your %s account" msgstr "" -#: includes/constant-data.php:476 +#: includes/constant-data.php:487 msgid "Map Height (px)" msgstr "" -#: includes/constant-data.php:476 +#: includes/constant-data.php:487 msgid "Map height in pixels" msgstr "" -#: includes/constant-data.php:477 +#: includes/constant-data.php:488 msgid "Map Width (px)" msgstr "" -#: includes/constant-data.php:477 +#: includes/constant-data.php:488 msgid "Map width in pixels" msgstr "" -#: includes/constant-data.php:478 +#: includes/constant-data.php:489 msgid "Higher means closer (1-21)" msgstr "" -#: includes/constant-data.php:479 includes/constant-data.php:627 +#: includes/constant-data.php:490 includes/constant-data.php:645 msgid "Google Client ID" msgstr "" -#: includes/constant-data.php:479 +#: includes/constant-data.php:490 #, php-format msgid "" "Enter your Google Client ID here (OAuth 2.0 client ID). If you don't have " @@ -11878,38 +12659,38 @@ "target=\"_blank\">here</a>" msgstr "" -#: includes/constant-data.php:481 +#: includes/constant-data.php:492 msgid "Hide Busy Status" msgstr "" -#: includes/constant-data.php:481 +#: includes/constant-data.php:492 msgid "" "If you select \"Yes\", busy slots will be shown as unavailable instead of " "having a separate color." msgstr "" -#: includes/constant-data.php:482 +#: includes/constant-data.php:493 msgid "Effect When Closing Dialogs" msgstr "" -#: includes/constant-data.php:482 +#: includes/constant-data.php:493 #, php-format msgid "jQuery UI %s when closing a jQuery UI dialog." msgstr "" -#: includes/constant-data.php:482 includes/constant-data.php:614 +#: includes/constant-data.php:493 includes/constant-data.php:632 msgid "effect" msgstr "" -#: includes/constant-data.php:484 +#: includes/constant-data.php:495 msgid "Booking #APP_ID on DATE_TIME for SERVICE" msgstr "" -#: includes/constant-data.php:484 +#: includes/constant-data.php:495 msgid "Item Description" msgstr "" -#: includes/constant-data.php:484 +#: includes/constant-data.php:495 #, php-format msgid "" "Description of item shown in your account. <abbr title=\"%s\">Email " @@ -11917,153 +12698,148 @@ "DATE_TIME</code>" msgstr "" -#: includes/constant-data.php:485 +#: includes/constant-data.php:496 msgid "Payment for SERVICE" msgstr "" -#: includes/constant-data.php:485 +#: includes/constant-data.php:496 msgid "Item Name" msgstr "" -#: includes/constant-data.php:485 +#: includes/constant-data.php:496 #, php-format msgid "" "Name of item shown in your account. <abbr title=\"%s\">Email placeholders</" "abbr> can be used. For example, <code>Payment for SERVICE</code>" msgstr "" -#: includes/constant-data.php:486 +#: includes/constant-data.php:497 msgid "JaaS Api ID" msgstr "" -#: includes/constant-data.php:486 includes/constant-data.php:487 +#: includes/constant-data.php:497 includes/constant-data.php:498 #, php-format msgid "Only required for JaaS. Get this value from your %s." msgstr "" -#: includes/constant-data.php:486 includes/constant-data.php:487 -#: includes/constant-data.php:488 includes/constant-data.php:489 +#: includes/constant-data.php:497 includes/constant-data.php:498 +#: includes/constant-data.php:499 includes/constant-data.php:500 msgid "JaaS account" msgstr "" -#: includes/constant-data.php:487 +#: includes/constant-data.php:498 msgid "JaaS Api Key" msgstr "" -#: includes/constant-data.php:488 +#: includes/constant-data.php:499 msgid "JaaS Public Key" msgstr "" -#: includes/constant-data.php:488 includes/constant-data.php:489 +#: includes/constant-data.php:499 includes/constant-data.php:500 #, php-format msgid "" "Only required for JaaS. Get this value from your %s. Copy the contents of " "the file and paste here" msgstr "" -#: includes/constant-data.php:489 +#: includes/constant-data.php:500 msgid "JaaS Private Key" msgstr "" -#: includes/constant-data.php:490 +#: includes/constant-data.php:501 msgid "Enable Jitsi" msgstr "" -#: includes/constant-data.php:490 +#: includes/constant-data.php:501 msgid "Enables integration with Jitsi Online Meetings." msgstr "" -#: includes/constant-data.php:491 +#: includes/constant-data.php:502 msgid "Jitsi Domain" msgstr "" -#: includes/constant-data.php:491 +#: includes/constant-data.php:502 msgid "Domain of Jitsi server. This is only required for custom service type." msgstr "" -#: includes/constant-data.php:492 +#: includes/constant-data.php:503 msgid "Jitsi Privileged Users" msgstr "" -#: includes/constant-data.php:492 +#: includes/constant-data.php:503 msgid "Users having these WordPress roles can live stream and record videos." msgstr "" -#: includes/constant-data.php:493 +#: includes/constant-data.php:504 msgid "Jitsi Service Type" msgstr "" -#: includes/constant-data.php:493 +#: includes/constant-data.php:504 msgid "" "Jitsi Meet is the open source meeting service, but limited to 5 minutes for " "demo purposes. JaaS is a commercial service with Jitsi as a Service " "(formerly \"8X8\"). \"Custom\" is for installing Jitsi on your own server." msgstr "" -#: includes/constant-data.php:494 +#: includes/constant-data.php:505 msgid "Jitsi Subject" msgstr "" -#: includes/constant-data.php:495 +#: includes/constant-data.php:506 msgid "Late Booking Permission Time (mins)" msgstr "" -#: includes/constant-data.php:495 +#: includes/constant-data.php:506 msgid "" "If late booking is allowed, defines number of minutes that booking can still " "be made counting from start of the time slot. Leaving empty means booking is " "accepted until the last minute before time slot ends." msgstr "" -#: includes/constant-data.php:496 +#: includes/constant-data.php:507 msgid "Post Type for Location Connected Posts" msgstr "" -#: includes/constant-data.php:496 +#: includes/constant-data.php:507 msgid "" "Post type that will be used to relate location to a post. Default: \"page\"" msgstr "" -#: includes/constant-data.php:497 +#: includes/constant-data.php:508 msgid "Separate Working Hour Schedule for every Location" msgstr "" -#: includes/constant-data.php:497 +#: includes/constant-data.php:508 msgid "" "Not to be used in Multi Store Marketplace. If you set this setting as Yes, " "every service and provider can have separate working hour schedule for each " "location." msgstr "" -#: includes/constant-data.php:498 +#: includes/constant-data.php:509 msgid "Login Required" msgstr "" -#: includes/constant-data.php:498 +#: includes/constant-data.php:509 msgid "Whether you require the client to login the website to make a booking." msgstr "" -#: includes/constant-data.php:499 +#: includes/constant-data.php:510 msgid "Log Sent email Records" msgstr "" -#: includes/constant-data.php:499 +#: includes/constant-data.php:510 #, php-format msgid "" "Whether to log confirmation and reminder email records in the %s (Not the " "content of the emails)." msgstr "" -#: includes/constant-data.php:499 includes/constant-data.php:500 -#: includes/constant-data.php:501 includes/constant-data.php:572 -msgid "log file" -msgstr "" - -#: includes/constant-data.php:500 +#: includes/constant-data.php:511 msgid "Log Setting Changes" msgstr "" -#: includes/constant-data.php:500 +#: includes/constant-data.php:511 #, php-format msgid "" "Whether any change in global settings will be recorded in the %s. If " @@ -12071,54 +12847,54 @@ "values are also saved." msgstr "" -#: includes/constant-data.php:501 +#: includes/constant-data.php:512 msgid "Log Sent SMS Records" msgstr "" -#: includes/constant-data.php:501 +#: includes/constant-data.php:512 #, php-format msgid "" "Whether to log confirmation and reminder SMS records in the %s (Not the " "content of the messages)." msgstr "" -#: includes/constant-data.php:502 +#: includes/constant-data.php:513 msgid "Location/Service/Provider Hierarchy" msgstr "" -#: includes/constant-data.php:502 +#: includes/constant-data.php:513 msgid "" "Determines the hierarchy among Location, Service and Provider when Locations " "and/or Service Providers are active. Less priority variables will follow " "higher ones." msgstr "" -#: includes/constant-data.php:503 +#: includes/constant-data.php:514 msgid "Privileged User Roles" msgstr "" -#: includes/constant-data.php:503 +#: includes/constant-data.php:514 msgid "" "Selected role(s) will not be asked advance payment, depending on the above " "selection." msgstr "" -#: includes/constant-data.php:504 +#: includes/constant-data.php:515 msgid "Discount for Privileged User Roles (%)" msgstr "" -#: includes/constant-data.php:504 +#: includes/constant-data.php:515 msgid "" "Selected role(s) will get a discount given in percent, e.g. 20. Leave this " "field empty for no discount. Tip: If you enter 100, service will be free of " "charge for these members." msgstr "" -#: includes/constant-data.php:505 +#: includes/constant-data.php:516 msgid "Don't ask Prepayment from Privileged User Roles" msgstr "" -#: includes/constant-data.php:505 +#: includes/constant-data.php:516 msgid "" "Below selected role(s) will not be asked for a down payment. This does not " "necessarily mean that service will be free of charge for them. Such member " @@ -12128,39 +12904,39 @@ "Pricing addon." msgstr "" -#: includes/constant-data.php:506 +#: includes/constant-data.php:517 msgid "" "Time selection precision for all settings. For example, if you have a 15 " "minute service or if you work from 9:15, select 15. \"Auto\" setting will " "try to find the optimum value. Default: 1 hour" msgstr "" -#: includes/constant-data.php:507 +#: includes/constant-data.php:518 msgid "Use Effect for Select Element" msgstr "" -#: includes/constant-data.php:507 +#: includes/constant-data.php:518 #, php-format msgid "" "Experimental. Use with caution. For location, service, provider and other " "front end HTML select elements, use %s effect" msgstr "" -#: includes/constant-data.php:507 +#: includes/constant-data.php:518 msgid "blind" msgstr "" -#: includes/constant-data.php:508 +#: includes/constant-data.php:519 msgid "" "Select post types Multi Language will be used for. Setting metabox will be " "added to post edit pages of the selected post types." msgstr "" -#: includes/constant-data.php:509 +#: includes/constant-data.php:520 msgid "Multitasking Business Rep." msgstr "" -#: includes/constant-data.php:509 +#: includes/constant-data.php:520 msgid "" "Only effective when no providers are defined. By default (Setting \"No\") " "business representative can serve only one service at a time. If you select " @@ -12169,22 +12945,22 @@ "itself." msgstr "" -#: includes/constant-data.php:510 +#: includes/constant-data.php:521 msgid "Affiliate Plugin Integration" msgstr "" -#: includes/constant-data.php:510 +#: includes/constant-data.php:521 msgid "" "When user becomes vendor, they also become affiliate of the selected " "marketing program and receive commissions over other vendors' bookings " "according to the rules of the affiliate program." msgstr "" -#: includes/constant-data.php:511 +#: includes/constant-data.php:522 msgid "Allow Vendors Without Services" msgstr "" -#: includes/constant-data.php:511 +#: includes/constant-data.php:522 msgid "" "By default (setting \"No\"), vendors must have at least one service. " "Therefore even if they did not select any service, the first service is " @@ -12192,11 +12968,11 @@ "any assigned service during registration and editing their accounts." msgstr "" -#: includes/constant-data.php:512 +#: includes/constant-data.php:523 msgid "Vendor can Set Own Price" msgstr "" -#: includes/constant-data.php:512 +#: includes/constant-data.php:523 msgid "" "If selected as \"No\" (default), booking price is determined by service + " "provider prices entered by admin. If \"Yes, fixed per booking\" is selected, " @@ -12207,11 +12983,11 @@ "provider price for each service on their profile settings." msgstr "" -#: includes/constant-data.php:515 +#: includes/constant-data.php:526 msgid "Auto Approve Vendor" msgstr "" -#: includes/constant-data.php:515 +#: includes/constant-data.php:526 msgid "" "If selected as \"No\" admin needs to approve vendor submissions manually. If " "selected as \"Yes\" approval is automatic. If selected as \"Auto\" and bio " @@ -12219,21 +12995,21 @@ "should be approved manually." msgstr "" -#: includes/constant-data.php:516 +#: includes/constant-data.php:527 msgid "Add Become a Vendor Button" msgstr "" -#: includes/constant-data.php:516 +#: includes/constant-data.php:527 msgid "" "Whether to add a button on Profile Page of logged in user by which they can " "apply to become a vendor." msgstr "" -#: includes/constant-data.php:517 +#: includes/constant-data.php:528 msgid "Use Better Messages on" msgstr "" -#: includes/constant-data.php:517 +#: includes/constant-data.php:528 #, php-format msgid "" "Private Messaging of %s can be used on 1) bio, service description, waiting " @@ -12243,26 +13019,26 @@ "in Better Messages settings." msgstr "" -#: includes/constant-data.php:517 +#: includes/constant-data.php:528 msgid "Better Messages plugin" msgstr "" -#: includes/constant-data.php:518 +#: includes/constant-data.php:529 msgid "Allow Vendor Edit Own Bio Page" msgstr "" -#: includes/constant-data.php:518 +#: includes/constant-data.php:529 msgid "" "Whether vendor can edit bio page. If selected as \"No\", bio page will use " "Default Page Title and Content settings. If selected as \"Yes\" vendor can " "edit Title and Content in their account page." msgstr "" -#: includes/constant-data.php:519 includes/constant-data.php:544 +#: includes/constant-data.php:530 includes/constant-data.php:558 msgid "Default Page Content" msgstr "" -#: includes/constant-data.php:519 +#: includes/constant-data.php:530 msgid "" "Content of the bio page, typically including <code>[app_book]</code> " "shortcode in order to let clients book their services. Only vendor and their " @@ -12271,194 +13047,222 @@ "account page." msgstr "" -#: includes/constant-data.php:520 includes/constant-data.php:545 +#: includes/constant-data.php:531 includes/constant-data.php:559 msgid "Default Page Title" msgstr "" -#: includes/constant-data.php:520 +#: includes/constant-data.php:531 msgid "" "Title of the bio page. If vendors are allowed to edit their bio page, they " "can overwrite this value by the setting in their account page. Placeholder " "VENDOR_NAME will be replaced by the display name of the vendor. " msgstr "" -#: includes/constant-data.php:521 +#: includes/constant-data.php:532 msgid "Post Type of the Page" msgstr "" -#: includes/constant-data.php:521 +#: includes/constant-data.php:532 msgid "" "Bio page post type. Multiple selection is allowed. Clear all if you do not " "want to relate bio page to any CPT, e.g. a Multi Store Marketplace or a pure " "provider free website." msgstr "" -#: includes/constant-data.php:522 +#: includes/constant-data.php:533 msgid "Auto Approval Time (days)" msgstr "" -#: includes/constant-data.php:522 +#: includes/constant-data.php:533 msgid "" "After this time, even if client did not approve, completed bookings will be " "automatically approved. Leaving empty means 3 days." msgstr "" -#: includes/constant-data.php:523 +#: includes/constant-data.php:534 msgid "Commission to Apply upon Multiple Role Match" msgstr "" -#: includes/constant-data.php:523 +#: includes/constant-data.php:534 msgid "" "If vendor has several matching roles, commission rate to be applied can be " "selected among minimum or maximum of the commissions of matching roles." msgstr "" -#: includes/constant-data.php:524 +#: includes/constant-data.php:535 msgid "Number of Commission Rates" msgstr "" -#: includes/constant-data.php:524 +#: includes/constant-data.php:535 msgid "" "You can define commission percentage based on WordPress user role of the " "vendor, e.g. to give better commission to certain membership levels. If you " "will use them, select number of commission rates." msgstr "" -#: includes/constant-data.php:525 +#: includes/constant-data.php:536 +msgid "Commission Payment Method" +msgstr "" + +#: includes/constant-data.php:536 +msgid "" +"Commissions can be paid to vendors automatically when booking is completed " +"or booking is approved by the client or manually at any desired time. Note: " +"When automatic payment is selected, you can also pay manually on Commissions " +"page." +msgstr "" + +#: includes/constant-data.php:537 msgid "Commission Rate (%)" msgstr "" -#: includes/constant-data.php:525 +#: includes/constant-data.php:537 msgid "Percentage of the booking revenue that will be received by the vendor." msgstr "" -#: includes/constant-data.php:526 +#: includes/constant-data.php:538 +msgid "Enable Approved Status" +msgstr "" + +#: includes/constant-data.php:538 +msgid "Whether to use Approved status." +msgstr "" + +#: includes/constant-data.php:539 +msgid "Enable Stripe Connect" +msgstr "" + +#: includes/constant-data.php:539 +msgid "Whether to use Stripe Connect to pay commissions to vendors." +msgstr "" + +#: includes/constant-data.php:540 msgid "Fees Covered By" msgstr "" -#: includes/constant-data.php:526 +#: includes/constant-data.php:540 msgid "" "Who will cover the transaction fees. If covered by vendor, fees are deducted " "from client payment and vendor's earning will be lower." msgstr "" -#: includes/constant-data.php:527 +#: includes/constant-data.php:541 msgid "Give Commission for Own Sales" msgstr "" -#: includes/constant-data.php:527 +#: includes/constant-data.php:541 msgid "Whether to give commission if client is the vendor themselves." msgstr "" -#: includes/constant-data.php:528 +#: includes/constant-data.php:542 msgid "Hide Non-Vendor Booking Calendars" msgstr "" -#: includes/constant-data.php:528 +#: includes/constant-data.php:542 msgid "" "Whether to hide booking calendars on pages of non-vendors. Setting this to " "\"Yes\" will mean: For the above bio page CPTs, booking is only allowed on " "approved vendor bio pages." msgstr "" -#: includes/constant-data.php:529 +#: includes/constant-data.php:543 msgid "Services Provided Description" msgstr "" -#: includes/constant-data.php:529 +#: includes/constant-data.php:543 msgid "" "Description of Services Provided field that will be displayed on Add Listing " "form." msgstr "" -#: includes/constant-data.php:530 +#: includes/constant-data.php:544 msgid "Listing Integration" msgstr "" -#: includes/constant-data.php:530 +#: includes/constant-data.php:544 msgid "" "Select the listing/directory theme or plugin that you want to integrate from " "the list." msgstr "" -#: includes/constant-data.php:531 +#: includes/constant-data.php:545 msgid "Terms (Category) of the Page" msgstr "" -#: includes/constant-data.php:531 +#: includes/constant-data.php:545 msgid "" "Enter slug or ID of the term/category that vendor pages will belong to. " "Multiple categories separated with comma is possible." msgstr "" -#: includes/constant-data.php:532 +#: includes/constant-data.php:546 msgid "Geodirectory Category" msgstr "" -#: includes/constant-data.php:532 +#: includes/constant-data.php:546 msgid "" "Select category of the GeoDirectory listing post when listing is added " "manually." msgstr "" -#: includes/constant-data.php:533 +#: includes/constant-data.php:547 msgid "GD Pricing Manager Packages" msgstr "" -#: includes/constant-data.php:533 +#: includes/constant-data.php:547 msgid "" "Geodirectory Pricing Manager Package IDs that will create vendors. Enter " "multiple package IDs separated with comma. Clear to create vendors for all " "packages." msgstr "" -#: includes/constant-data.php:534 +#: includes/constant-data.php:548 msgid "Listeo Category" msgstr "" -#: includes/constant-data.php:534 +#: includes/constant-data.php:548 msgid "" "Select category of the Listeo listing post when listing is added manually." msgstr "" -#: includes/constant-data.php:535 +#: includes/constant-data.php:549 msgid "Create Post for Pending Vendors" msgstr "" -#: includes/constant-data.php:535 +#: includes/constant-data.php:549 msgid "" "If selected \"Yes\", pending submissions will create new listing post. " "Otherwise, post will be automatically created only when admin approves " "application." msgstr "" -#: includes/constant-data.php:536 +#: includes/constant-data.php:550 #, php-format msgid "Minimum Price (%s)" msgstr "" -#: includes/constant-data.php:536 +#: includes/constant-data.php:550 msgid "" "If vendor can set own price, minimum amount they can enter. Leave empty for " "no limitation." msgstr "" -#: includes/constant-data.php:537 +#: includes/constant-data.php:551 #, php-format msgid "Maximum Price (%s)" msgstr "" -#: includes/constant-data.php:537 +#: includes/constant-data.php:551 msgid "" "If vendor can set own price, maximum amount they can enter. Leave empty for " "no limitation." msgstr "" -#: includes/constant-data.php:538 +#: includes/constant-data.php:552 msgid "Membership Plugin Integration" msgstr "" -#: includes/constant-data.php:538 +#: includes/constant-data.php:552 msgid "" "Select the membership plugin you want to integrate from the list. Vendors " "assigned by a membership plugin gets status of approved or pending depending " @@ -12466,11 +13270,11 @@ "Provided setting in the Registration setting box." msgstr "" -#: includes/constant-data.php:539 +#: includes/constant-data.php:553 msgid "Multi Store" msgstr "" -#: includes/constant-data.php:539 +#: includes/constant-data.php:553 msgid "" "In Multi Store Marketplace a location is allocated to each vendor as " "<b>store</b> and vendor is assigned as <b>store manager</b>. In their " @@ -12479,21 +13283,21 @@ "code> shortcode." msgstr "" -#: includes/constant-data.php:540 +#: includes/constant-data.php:554 msgid "Remove Availability Filter" msgstr "" -#: includes/constant-data.php:540 +#: includes/constant-data.php:554 msgid "" "Availability filter which is connected to the search function of the listing " "can be removed." msgstr "" -#: includes/constant-data.php:541 +#: includes/constant-data.php:555 msgid "Remove Provider When Vendor Removed" msgstr "" -#: includes/constant-data.php:541 +#: includes/constant-data.php:555 msgid "" "All vendors are service providers. However not all providers are necessarily " "vendors. This setting determines whether user will also be unassigned being " @@ -12502,70 +13306,62 @@ "removed if they have no past or future bookings." msgstr "" -#: includes/constant-data.php:542 +#: includes/constant-data.php:556 msgid "Secondary Commission Usage Condition" msgstr "" -#: includes/constant-data.php:542 +#: includes/constant-data.php:556 msgid "" "Condition that makes secondary commission rate to be used instead of the " "main rate." msgstr "" -#: includes/constant-data.php:543 +#: includes/constant-data.php:557 msgid "Secondary Commission Rate (%)" msgstr "" -#: includes/constant-data.php:543 +#: includes/constant-data.php:557 msgid "Rate that will be used when usage condition is met." msgstr "" -#: includes/constant-data.php:544 +#: includes/constant-data.php:558 msgid "" "Content of the store page, typically including <code>[app_book]</code> " "shortcode in order to let clients book their services. Only services of this " "store are selectable from this shortcode." msgstr "" -#: includes/constant-data.php:545 +#: includes/constant-data.php:559 msgid "" "Title of the store page. Placeholders COMPANY_NAME and VENDOR_NAME will be " "replaced by vendor data." msgstr "" -#: includes/constant-data.php:546 +#: includes/constant-data.php:560 msgid "Post Type for Store Pages" msgstr "" -#: includes/constant-data.php:546 +#: includes/constant-data.php:560 msgid "" "Post type that will be used for stores. A CPT is recommended, e.g. Place" msgstr "" -#: includes/constant-data.php:547 -msgid "Enable Approved Status" -msgstr "" - -#: includes/constant-data.php:547 -msgid "Whether to use Approved status." -msgstr "" - -#: includes/constant-data.php:548 +#: includes/constant-data.php:561 msgid "Account Page (only for UM)" msgstr "" -#: includes/constant-data.php:548 +#: includes/constant-data.php:561 msgid "" "UM Account Page may have a Bookings item to redirect to WP BASE Account " "page. The page which includes <code>[app_account]</code> should be selected " "here." msgstr "" -#: includes/constant-data.php:549 +#: includes/constant-data.php:562 msgid "Use WooCommerce Cart for Payment" msgstr "" -#: includes/constant-data.php:549 +#: includes/constant-data.php:562 #, php-format msgid "" "When you enable WooCommerce cart, payments will be handled with WooCommerce " @@ -12574,26 +13370,26 @@ "activated. Also see %s." msgstr "" -#: includes/constant-data.php:549 +#: includes/constant-data.php:562 msgid "WooCommerce settings" msgstr "" -#: includes/constant-data.php:550 +#: includes/constant-data.php:563 msgid "User Profile Plugin Integration" msgstr "" -#: includes/constant-data.php:550 +#: includes/constant-data.php:563 msgid "" "Select the user profile plugin you want to integrate from the list. With " "this integration, vendor can be directly booked from profile page of the " "user profile plugin." msgstr "" -#: includes/constant-data.php:551 +#: includes/constant-data.php:564 msgid "Allow Setting Services as Provider Free" msgstr "" -#: includes/constant-data.php:551 +#: includes/constant-data.php:564 msgid "" "Provider Free services are independent from service provider availability, " "e.g. events, room bookings, rentals. If you set this setting as \"Yes\", " @@ -12602,19 +13398,19 @@ "taking part." msgstr "" -#: includes/constant-data.php:552 +#: includes/constant-data.php:565 msgid "Default Value for Provider Free Services" msgstr "" -#: includes/constant-data.php:552 +#: includes/constant-data.php:565 msgid "When no selection is made, default dependence value of the service." msgstr "" -#: includes/constant-data.php:554 +#: includes/constant-data.php:567 msgid "Payment Required" msgstr "" -#: includes/constant-data.php:554 +#: includes/constant-data.php:567 #, php-format msgid "" "If selected as Yes, payment is collected with one of the payment methods in " @@ -12622,30 +13418,30 @@ "booking. Also see %s setting." msgstr "" -#: includes/constant-data.php:554 includes/functions.internal.php:2307 +#: includes/constant-data.php:567 includes/functions.internal.php:2307 msgid "Payment Methods" msgstr "" -#: includes/constant-data.php:554 +#: includes/constant-data.php:567 msgid "Auto confirm" msgstr "" -#: includes/constant-data.php:556 +#: includes/constant-data.php:569 msgid "Prepayment (%)" msgstr "" -#: includes/constant-data.php:556 +#: includes/constant-data.php:569 msgid "" "You may want to ask a certain percentage of the service price as prepayment " "(Also called down payment or advance payment - not to be confused with " "security deposit), e.g. 25. Leave this field empty to ask for full price." msgstr "" -#: includes/constant-data.php:557 +#: includes/constant-data.php:570 msgid "Template for Person Types" msgstr "" -#: includes/constant-data.php:557 +#: includes/constant-data.php:570 msgid "" "Valid only when Group Bookings addon is activated. Template that will be " "used for Group Bookings person types in the confirmation form, dialogs and " @@ -12655,67 +13451,67 @@ "which will be using this template as a block. Default: \"LABEL · PRICE: PAX\"" msgstr "" -#: includes/constant-data.php:558 +#: includes/constant-data.php:571 msgid "Default Dialing Code" msgstr "" -#: includes/constant-data.php:558 +#: includes/constant-data.php:571 msgid "" "This code will be prepended to the phone numbers starting with 0 and without " "+ or 00." msgstr "" -#: includes/constant-data.php:560 +#: includes/constant-data.php:573 msgid "Remember Client's Latest Service Selection" msgstr "" -#: includes/constant-data.php:560 +#: includes/constant-data.php:573 msgid "" "Whether automatically select last booked service by the client, if possible." msgstr "" -#: includes/constant-data.php:561 +#: includes/constant-data.php:574 msgid "Remember Client's Latest Provider Selection" msgstr "" -#: includes/constant-data.php:561 +#: includes/constant-data.php:574 msgid "" "Whether automatically select last booked provider by the client, if possible." msgstr "" -#: includes/constant-data.php:562 +#: includes/constant-data.php:575 msgid "Random Provider" msgstr "" -#: includes/constant-data.php:562 +#: includes/constant-data.php:575 msgid "Whether pick providers randomly" msgstr "" -#: includes/constant-data.php:563 +#: includes/constant-data.php:576 msgid "Number of Booking Records per Page" msgstr "" -#: includes/constant-data.php:563 +#: includes/constant-data.php:576 msgid "" "Number of records to be displayed on admin bookings and transactions pages, " "i.e. number of bookings and transactions per page. If left empty: 20." msgstr "" -#: includes/constant-data.php:564 +#: includes/constant-data.php:577 msgid "Number of Business Records per Page" msgstr "" -#: includes/constant-data.php:564 +#: includes/constant-data.php:577 msgid "" "Number of records to be displayed on business settings page, i.e. number of " "locations, services and service providers per page. If left empty: 10." msgstr "" -#: includes/constant-data.php:565 +#: includes/constant-data.php:578 msgid "Return (Thank You) Page" msgstr "" -#: includes/constant-data.php:565 +#: includes/constant-data.php:578 msgid "" "ID or url of the post/page that client will be returned after successful " "submission or payment of the booking. If left empty, page will be refreshed " @@ -12726,11 +13522,11 @@ "they made booking from." msgstr "" -#: includes/constant-data.php:567 +#: includes/constant-data.php:580 msgid "Reminder email Gap between Child Bookings (hours)" msgstr "" -#: includes/constant-data.php:567 +#: includes/constant-data.php:580 #, php-format msgid "" "Time within which reminder emails for %s will not be sent, preventing email " @@ -12739,15 +13535,15 @@ "or 12 hours later." msgstr "" -#: includes/constant-data.php:567 +#: includes/constant-data.php:580 msgid "child bookings" msgstr "" -#: includes/constant-data.php:568 +#: includes/constant-data.php:581 msgid "Reminder email Sending Time for the Client (hours)" msgstr "" -#: includes/constant-data.php:568 +#: includes/constant-data.php:581 msgid "" "Defines how many hours before the appointment start time reminder email " "will be sent to the client. Multiple reminders are possible. To do so, enter " @@ -12757,11 +13553,11 @@ "not be sent, 24-hours-before reminder will be." msgstr "" -#: includes/constant-data.php:569 +#: includes/constant-data.php:582 msgid "Reminder SMS Sending Time for the Client (hours)" msgstr "" -#: includes/constant-data.php:569 +#: includes/constant-data.php:582 msgid "" "Defines how many hours before the appointment will take place reminder SMS " "will be sent to the client. Multiple reminders are possible. To do so, enter " @@ -12771,42 +13567,80 @@ "not be sent, 24-hours-before reminder will be." msgstr "" -#: includes/constant-data.php:570 +#: includes/constant-data.php:583 msgid "Reminder SMS Sending Time for the Provider (hours)" msgstr "" -#: includes/constant-data.php:570 +#: includes/constant-data.php:583 msgid "" "Same as Reminder SMS Sending Time for the Client, but defines the time for " "service provider." msgstr "" -#: includes/constant-data.php:571 +#: includes/constant-data.php:584 msgid "Reminder email Sending Time for the Provider (hours)" msgstr "" -#: includes/constant-data.php:571 +#: includes/constant-data.php:584 msgid "" "Same as Reminder email Sending Time for the Client, but defines the time for " "service provider." msgstr "" -#: includes/constant-data.php:572 +#: includes/constant-data.php:585 msgid "Reverse Log" msgstr "" -#: includes/constant-data.php:572 +#: includes/constant-data.php:585 #, php-format msgid "" "Select \"Yes\" to reverse the display order of records in %s, from newest to " "oldest." msgstr "" -#: includes/constant-data.php:573 +#: includes/constant-data.php:586 +msgid "Allowed Booking Statuses (Client)" +msgstr "" + +#: includes/constant-data.php:586 +msgid "" +"Clients can select only these booking statuses to be displayed in their " +"schedules" +msgstr "" + +#: includes/constant-data.php:587 +msgid "Allowed Booking Statuses (Provider)" +msgstr "" + +#: includes/constant-data.php:587 +msgid "" +"Service providers can select only these booking statuses to be displayed in " +"their schedules" +msgstr "" + +#: includes/constant-data.php:588 +msgid "Clear Schedules Cache" +msgstr "" + +#: includes/constant-data.php:588 +msgid "" +"To Clear the cache, set \"Yes\". After save and cache cleared, this setting " +"will automatically turn back to \"No\"." +msgstr "" + +#: includes/constant-data.php:589 +msgid "Clients can Use Schedules" +msgstr "" + +#: includes/constant-data.php:589 +msgid "Whether allow clients use Schedules" +msgstr "" + +#: includes/constant-data.php:590 msgid "Template for Schedule (Admin)" msgstr "" -#: includes/constant-data.php:573 +#: includes/constant-data.php:590 #, php-format msgid "" "Bookings in %1$s will be displayed to admin according to this template. " @@ -12814,194 +13648,205 @@ "real values." msgstr "" -#: includes/constant-data.php:573 includes/constant-data.php:574 +#: includes/constant-data.php:590 includes/constant-data.php:591 +#: includes/constant-data.php:592 msgid "Booking Schedules" msgstr "" -#: includes/constant-data.php:574 -msgid "Template for Schedule (Provider)" +#: includes/constant-data.php:591 +msgid "Template for Schedule (Client)" msgstr "" -#: includes/constant-data.php:574 +#: includes/constant-data.php:591 #, php-format msgid "" -"Bookings in %1$s will be displayed to service provider according to this " -"template. <abbr title=\"%2$s\">Booking placeholders</abbr> will be replaced " -"by their real values." +"Bookings in %1$s will be displayed to the client according to this template. " +"<abbr title=\"%2$s\">Booking placeholders</abbr> will be replaced by their " +"real values." msgstr "" -#: includes/constant-data.php:575 -msgid "Allowed Booking Statuses (Provider)" +#: includes/constant-data.php:592 +msgid "Template for Schedule (Provider)" msgstr "" -#: includes/constant-data.php:575 +#: includes/constant-data.php:592 +#, php-format msgid "" -"Service providers can select only these booking statuses to be displayed in " -"their schedules" +"Bookings in %1$s will be displayed to service provider according to this " +"template. <abbr title=\"%2$s\">Booking placeholders</abbr> will be replaced " +"by their real values." msgstr "" -#: includes/constant-data.php:576 +#: includes/constant-data.php:593 msgid "Show Profile Images" msgstr "" -#: includes/constant-data.php:576 +#: includes/constant-data.php:593 msgid "Whether show service provider profile images in the Schedules" msgstr "" -#: includes/constant-data.php:577 +#: includes/constant-data.php:594 msgid "Send Approved email" msgstr "" -#: includes/constant-data.php:577 +#: includes/constant-data.php:594 msgid "" "Whether to send an email after vendor application automatically approved. " "Note: Admin can always send manual email on Vendors page." msgstr "" -#: includes/constant-data.php:578 +#: includes/constant-data.php:595 msgid "Send Cancellation email (Single)" msgstr "" -#: includes/constant-data.php:578 +#: includes/constant-data.php:595 msgid "" "Whether to send an email after cancellation of the booking. Note: Admin and " "service provider will also get a copy as separate emails." msgstr "" -#: includes/constant-data.php:579 +#: includes/constant-data.php:596 msgid "Send Cancellation email (Bulk)" msgstr "" -#: includes/constant-data.php:579 +#: includes/constant-data.php:596 msgid "" "Same as above but whether to send emails to clients when \"bulk\" status " "change of removed is applied to bookings on admin side." msgstr "" -#: includes/constant-data.php:580 +#: includes/constant-data.php:597 msgid "Send Cancellation SMS" msgstr "" -#: includes/constant-data.php:580 includes/constant-data.php:581 -#: includes/constant-data.php:583 +#: includes/constant-data.php:597 includes/constant-data.php:598 +#: includes/constant-data.php:600 msgid "Whether to send an SMS after cancellation of the appointment." msgstr "" -#: includes/constant-data.php:581 +#: includes/constant-data.php:598 msgid "Send Cancellation SMS (Admin)" msgstr "" -#: includes/constant-data.php:582 +#: includes/constant-data.php:599 msgid "Send Cancellation SMS (Bulk)" msgstr "" -#: includes/constant-data.php:582 +#: includes/constant-data.php:599 msgid "" "Same as above but whether to send SMS messages to clients when \"bulk\" " "status change of removed is applied to bookings on admin side." msgstr "" -#: includes/constant-data.php:583 +#: includes/constant-data.php:600 msgid "Send Cancellation SMS (Provider)" msgstr "" -#: includes/constant-data.php:584 +#: includes/constant-data.php:601 +msgid "Send Commission Paid email" +msgstr "" + +#: includes/constant-data.php:601 +msgid "Whether to send an email after a commission is paid to the vendor." +msgstr "" + +#: includes/constant-data.php:602 msgid "Send Completed email (Single)" msgstr "" -#: includes/constant-data.php:584 +#: includes/constant-data.php:602 msgid "Whether to send an email after an appointment has been completed." msgstr "" -#: includes/constant-data.php:585 +#: includes/constant-data.php:603 msgid "Send Completed email (Bulk)" msgstr "" -#: includes/constant-data.php:585 +#: includes/constant-data.php:603 msgid "" "Send email to the client(s) when \"bulk\" status change of completed is " "applied to bookings on admin side. " msgstr "" -#: includes/constant-data.php:586 +#: includes/constant-data.php:604 msgid "Send Completed SMS" msgstr "" -#: includes/constant-data.php:586 includes/constant-data.php:587 -#: includes/constant-data.php:589 +#: includes/constant-data.php:604 includes/constant-data.php:605 +#: includes/constant-data.php:607 msgid "Whether to send an SMS after an appointment has been completed." msgstr "" -#: includes/constant-data.php:587 +#: includes/constant-data.php:605 msgid "Send Completed SMS (Admin)" msgstr "" -#: includes/constant-data.php:588 +#: includes/constant-data.php:606 msgid "Send Completed SMS (Bulk)" msgstr "" -#: includes/constant-data.php:588 +#: includes/constant-data.php:606 msgid "" "Send SMS to the client(s) when \"bulk\" status change of completed is " "applied to bookings on admin side. " msgstr "" -#: includes/constant-data.php:589 +#: includes/constant-data.php:607 msgid "Send Completed SMS (Provider)" msgstr "" -#: includes/constant-data.php:590 -msgid "Send Confirmation email (Single)" +#: includes/constant-data.php:608 +msgid "Send Confirmation Email (Single)" msgstr "" -#: includes/constant-data.php:590 +#: includes/constant-data.php:608 msgid "" "Whether to send an email after confirmation of the booking. Note: Admin and " "service provider will also get a copy as separate emails." msgstr "" -#: includes/constant-data.php:591 -msgid "Send Confirmation email (Bulk)" +#: includes/constant-data.php:609 +msgid "Send Confirmation Email (Bulk)" msgstr "" -#: includes/constant-data.php:591 +#: includes/constant-data.php:609 msgid "" -"Send Confirmation email to the client(s) when \"bulk\" status change of " +"Send Confirmation Email to the client(s) when \"bulk\" status change of " "confirmed or paid is applied to bookings on admin side. " msgstr "" -#: includes/constant-data.php:592 +#: includes/constant-data.php:610 msgid "Send Confirmation SMS" msgstr "" -#: includes/constant-data.php:592 includes/constant-data.php:593 -#: includes/constant-data.php:595 +#: includes/constant-data.php:610 includes/constant-data.php:611 +#: includes/constant-data.php:613 msgid "Whether to send an SMS after confirmation of the booking." msgstr "" -#: includes/constant-data.php:593 +#: includes/constant-data.php:611 msgid "Send Confirmation SMS (Admin)" msgstr "" -#: includes/constant-data.php:594 +#: includes/constant-data.php:612 msgid "Send Confirmation SMS (Bulk)" msgstr "" -#: includes/constant-data.php:594 +#: includes/constant-data.php:612 msgid "" "Send Confirmation SMS to the client(s) when \"bulk\" status change of " "confirmed or paid is applied to bookings on admin side. " msgstr "" -#: includes/constant-data.php:595 +#: includes/constant-data.php:613 msgid "Send Confirmation SMS (Provider)" msgstr "" -#: includes/constant-data.php:596 +#: includes/constant-data.php:614 msgid "Send Due Payment Reminder email to the Client" msgstr "" -#: includes/constant-data.php:596 +#: includes/constant-data.php:614 msgid "" "Whether to send due payment reminder email(s) to the clients in intervals " "selected below. This email is only sent for the selected booking statuses " @@ -13009,19 +13854,19 @@ "negative and its absolute value is greater than the amount selected below." msgstr "" -#: includes/constant-data.php:597 +#: includes/constant-data.php:615 msgid "Send Follow-up email to the Client" msgstr "" -#: includes/constant-data.php:597 +#: includes/constant-data.php:615 msgid "Whether to send follow-up email(s) to the client" msgstr "" -#: includes/constant-data.php:598 -msgid "Send Pending email to Admin" +#: includes/constant-data.php:616 +msgid "Send Pending Email to Admin" msgstr "" -#: includes/constant-data.php:598 +#: includes/constant-data.php:616 msgid "" "You may want to receive a notification email whenever a new appointment is " "made from front end in pending status. This email is only sent if your " @@ -13030,124 +13875,124 @@ "Confirm Own Appointments\" is set as Yes." msgstr "" -#: includes/constant-data.php:599 -msgid "Send Pending email to the Client (Single)" +#: includes/constant-data.php:617 +msgid "Send Pending Email to the Client (Single)" msgstr "" -#: includes/constant-data.php:599 +#: includes/constant-data.php:617 msgid "" "Whether to send an email after a booking has been made in pending status." msgstr "" -#: includes/constant-data.php:600 -msgid "Send Pending email to the Client (Bulk)" +#: includes/constant-data.php:618 +msgid "Send Pending Email to the Client (Bulk)" msgstr "" -#: includes/constant-data.php:600 +#: includes/constant-data.php:618 msgid "" "Send email to the client(s) when \"bulk\" status change of pending is " "applied to bookings on admin side. " msgstr "" -#: includes/constant-data.php:601 +#: includes/constant-data.php:619 msgid "Send Pending SMS" msgstr "" -#: includes/constant-data.php:601 includes/constant-data.php:602 -#: includes/constant-data.php:604 +#: includes/constant-data.php:619 includes/constant-data.php:620 +#: includes/constant-data.php:622 msgid "Whether to send an SMS after a booking has been made in pending status." msgstr "" -#: includes/constant-data.php:602 +#: includes/constant-data.php:620 msgid "Send Pending SMS (Admin)" msgstr "" -#: includes/constant-data.php:603 +#: includes/constant-data.php:621 msgid "Send Pending SMS (Bulk)" msgstr "" -#: includes/constant-data.php:603 +#: includes/constant-data.php:621 msgid "" "Send SMS to the client(s) when \"bulk\" status change of pending is applied " "to bookings on admin side. " msgstr "" -#: includes/constant-data.php:604 +#: includes/constant-data.php:622 msgid "Send Pending SMS (Provider)" msgstr "" -#: includes/constant-data.php:605 +#: includes/constant-data.php:623 msgid "Send Reminder email to the Client" msgstr "" -#: includes/constant-data.php:605 +#: includes/constant-data.php:623 msgid "Whether to send reminder email(s) to the client before the appointment." msgstr "" -#: includes/constant-data.php:606 +#: includes/constant-data.php:624 msgid "Send Reminder SMS to the Client" msgstr "" -#: includes/constant-data.php:606 +#: includes/constant-data.php:624 msgid "" "Whether to send reminder SMS message(s) to the client before the appointment." msgstr "" -#: includes/constant-data.php:607 +#: includes/constant-data.php:625 msgid "Send Reminder SMS to the Provider" msgstr "" -#: includes/constant-data.php:607 +#: includes/constant-data.php:625 msgid "" "Whether to send reminder SMS message(s) to the service provider before the " "appointment." msgstr "" -#: includes/constant-data.php:608 +#: includes/constant-data.php:626 msgid "Send Reminder email to the Provider" msgstr "" -#: includes/constant-data.php:608 +#: includes/constant-data.php:626 msgid "" "Whether to send reminder email(s) to the service provider before the " "appointment." msgstr "" -#: includes/constant-data.php:609 +#: includes/constant-data.php:627 msgid "Send Submission email to the Client" msgstr "" -#: includes/constant-data.php:609 +#: includes/constant-data.php:627 msgid "" "Whether to send an email to the client informing that their submission has " "been received and added to the waiting list." msgstr "" -#: includes/constant-data.php:610 +#: includes/constant-data.php:628 msgid "Send Notification email to the Client" msgstr "" -#: includes/constant-data.php:610 +#: includes/constant-data.php:628 msgid "" "Whether to send an email to the client informing that there is an opening in " "the submissions for waiting list." msgstr "" -#: includes/constant-data.php:611 +#: includes/constant-data.php:629 msgid "Send Vendor Pending email" msgstr "" -#: includes/constant-data.php:611 +#: includes/constant-data.php:629 msgid "" "Whether to send an email after vendor application is accepted in pending " "status. Note: Admin can always send manual email on Vendors page." msgstr "" -#: includes/constant-data.php:613 +#: includes/constant-data.php:631 msgid "Service Working Hours Cover Service Providers" msgstr "" -#: includes/constant-data.php:613 +#: includes/constant-data.php:631 msgid "" "Only valid if Service Providers addon is active. If set as \"Yes\", when " "working hours of a service provider are changed, working hours of related " @@ -13158,51 +14003,51 @@ "setting changes." msgstr "" -#: includes/constant-data.php:614 +#: includes/constant-data.php:632 msgid "Effect When Opening Dialogs" msgstr "" -#: includes/constant-data.php:614 +#: includes/constant-data.php:632 #, php-format msgid "jQuery UI %s when opening a jQuery UI dialog." msgstr "" -#: includes/constant-data.php:615 +#: includes/constant-data.php:633 msgid "Show Legend" msgstr "" -#: includes/constant-data.php:615 +#: includes/constant-data.php:633 msgid "" "Whether to display description fields above the pagination (next/previous " "dates buttons) area. Only effective when calendar design is \"legacy\"." msgstr "" -#: includes/constant-data.php:616 +#: includes/constant-data.php:634 msgid "Website Languages" msgstr "" -#: includes/constant-data.php:616 +#: includes/constant-data.php:634 msgid "" "Select all languages except the default language that will be used in the " "website. In paranthesis WordPress locale codes are given." msgstr "" -#: includes/constant-data.php:617 +#: includes/constant-data.php:635 msgid "Skip Dummy" msgstr "" -#: includes/constant-data.php:617 +#: includes/constant-data.php:635 msgid "" "Whether dummy providers will be skipped at front end provider selection " "menu. This selection does not prevent dummy to be assigned to a service " "automatically." msgstr "" -#: includes/constant-data.php:618 +#: includes/constant-data.php:636 msgid "Use Slider with Featured Images (non mobile)" msgstr "" -#: includes/constant-data.php:618 +#: includes/constant-data.php:636 #, php-format msgid "" "When user connected with a non mobile device, whether to use slider to " @@ -13210,115 +14055,115 @@ "be used. Note: To set service slider image and description, use %s page." msgstr "" -#: includes/constant-data.php:619 +#: includes/constant-data.php:637 msgid "Use Slider with Featured Images (mobile)" msgstr "" -#: includes/constant-data.php:619 +#: includes/constant-data.php:637 msgid "" "When user connected with a mobile device, whether to use slider to select " "services (or providers) from. Otherwise same as the above setting." msgstr "" -#: includes/constant-data.php:620 +#: includes/constant-data.php:638 msgid "Number of Slides (non mobile)" msgstr "" -#: includes/constant-data.php:620 +#: includes/constant-data.php:638 msgid "Number of slides to be displayed for non mobile devices." msgstr "" -#: includes/constant-data.php:621 +#: includes/constant-data.php:639 msgid "Number of Slides (mobile)" msgstr "" -#: includes/constant-data.php:621 +#: includes/constant-data.php:639 msgid "" "Number of slides to be displayed for mobile devices. If slider container " "width is less than 600px, also this setting will be used." msgstr "" -#: includes/constant-data.php:622 +#: includes/constant-data.php:640 msgid "Slider margin (px)" msgstr "" -#: includes/constant-data.php:622 +#: includes/constant-data.php:640 msgid "Margin between slides in pixel." msgstr "" -#: includes/constant-data.php:623 +#: includes/constant-data.php:641 msgid "Fixed slide width (px)" msgstr "" -#: includes/constant-data.php:623 +#: includes/constant-data.php:641 msgid "" "Fixed slide width in pixel. This is only effective if number of slides is " "set az zero. Otherwise width will be automatically adjusted based on width " "of the wrapper." msgstr "" -#: includes/constant-data.php:624 +#: includes/constant-data.php:642 msgid "SMS Service" msgstr "" -#: includes/constant-data.php:624 +#: includes/constant-data.php:642 msgid "Service company that will be used to send SMS" msgstr "" -#: includes/constant-data.php:625 +#: includes/constant-data.php:643 msgid "Facebook API ID" msgstr "" -#: includes/constant-data.php:626 +#: includes/constant-data.php:644 msgid "Facebook API Secret" msgstr "" -#: includes/constant-data.php:626 +#: includes/constant-data.php:644 #, php-format msgid "Facebook API Secret. Receive your credentials %s." msgstr "" -#: includes/constant-data.php:628 +#: includes/constant-data.php:646 msgid "Google Client Secret" msgstr "" -#: includes/constant-data.php:628 +#: includes/constant-data.php:646 #, php-format msgid "Google Client Secret. Receive your credentials %s." msgstr "" -#: includes/constant-data.php:629 +#: includes/constant-data.php:647 msgid "Login Platforms" msgstr "" -#: includes/constant-data.php:629 +#: includes/constant-data.php:647 msgid "" "Select Social Media platforms that will be provided to your clients at " "checkout for registering and logging in to your website." msgstr "" -#: includes/constant-data.php:630 +#: includes/constant-data.php:648 msgid "WordPress Client ID" msgstr "" -#: includes/constant-data.php:630 +#: includes/constant-data.php:648 msgid "wordpress.com Client ID" msgstr "" -#: includes/constant-data.php:631 +#: includes/constant-data.php:649 msgid "WordPress Client Secret" msgstr "" -#: includes/constant-data.php:631 +#: includes/constant-data.php:649 #, php-format msgid "wordpress.com Client Secret. Receive your credentials %s." msgstr "" -#: includes/constant-data.php:632 +#: includes/constant-data.php:650 msgid "Minimum Time to Pass for New Appointment (secs)" msgstr "" -#: includes/constant-data.php:632 +#: includes/constant-data.php:650 msgid "" "You can limit appointment application frequency to prevent spammers who can " "block your appointments. This is only applied to pending appointments. Enter " @@ -13326,19 +14171,19 @@ "client before a payment or manual confirmation, enter a huge number here." msgstr "" -#: includes/constant-data.php:633 +#: includes/constant-data.php:651 msgid "Spinner" msgstr "" -#: includes/constant-data.php:633 +#: includes/constant-data.php:651 msgid "Spinner displayed in the info panel during ajax calls." msgstr "" -#: includes/constant-data.php:634 +#: includes/constant-data.php:652 msgid "Strict Check for Manual Entries" msgstr "" -#: includes/constant-data.php:634 +#: includes/constant-data.php:652 msgid "" "If this option is selected as Yes, manual booking entries will be checked " "against availability of the service and service provider and they will be " @@ -13346,17 +14191,17 @@ "unrestricted access over manual booking entries." msgstr "" -#: includes/constant-data.php:635 +#: includes/constant-data.php:653 msgid "Tax (%)" msgstr "" -#: includes/constant-data.php:635 +#: includes/constant-data.php:653 msgid "" "Tax, e.g. VAT, in percent. WP BASE assumes that your prices already include " "tax. This setting will only be used to calculate \"price without tax\" value." msgstr "" -#: includes/constant-data.php:636 +#: includes/constant-data.php:654 #, php-format msgid "" "This is the text beside terms and conditions checkbox. On the front end, " @@ -13365,15 +14210,15 @@ "<code>I accept %s.</code>" msgstr "" -#: includes/constant-data.php:636 +#: includes/constant-data.php:654 msgid "Terms and Conditions" msgstr "" -#: includes/constant-data.php:637 +#: includes/constant-data.php:655 msgid "Timezone Info Note" msgstr "" -#: includes/constant-data.php:637 +#: includes/constant-data.php:655 msgid "" "Note informing about effective user timezone which will be displayed under " "calendars and list of bookings table. TZ_SHORT and TZ_LONG placeholders will " @@ -13381,37 +14226,37 @@ "respectively. Default: \"All times are set to TZ_SHORT (TZ_LONG)\"" msgstr "" -#: includes/constant-data.php:638 +#: includes/constant-data.php:656 msgid "Use Trial Services" msgstr "" -#: includes/constant-data.php:638 +#: includes/constant-data.php:656 msgid "" "Whether to use trial services which are services offered to users in limited " "numbers. They can be free or having special prices." msgstr "" -#: includes/constant-data.php:639 +#: includes/constant-data.php:657 msgid "Make Free" msgstr "" -#: includes/constant-data.php:639 +#: includes/constant-data.php:657 msgid "Make all trial services free of charge regardless of any other setting." msgstr "" -#: includes/constant-data.php:640 +#: includes/constant-data.php:658 msgid "Number of Usage" msgstr "" -#: includes/constant-data.php:640 +#: includes/constant-data.php:658 msgid "In total how many times a client can use trial service sessions." msgstr "" -#: includes/constant-data.php:641 +#: includes/constant-data.php:659 msgid "Once from each Provider" msgstr "" -#: includes/constant-data.php:641 +#: includes/constant-data.php:659 msgid "" "Whether trial services can be taken only once from any provider. If number " "of usage is greater than one, setting this as Yes will not allow to choose " @@ -13419,17 +14264,17 @@ "(upcoming) bookings." msgstr "" -#: includes/constant-data.php:642 +#: includes/constant-data.php:660 msgid "" "Services which will be offered to the client only limited number of times. " "They can be free or have a special price." msgstr "" -#: includes/constant-data.php:643 includes/custom-texts.php:1292 +#: includes/constant-data.php:661 includes/custom-texts.php:1298 msgid "Theme" msgstr "" -#: includes/constant-data.php:643 +#: includes/constant-data.php:661 #, php-format msgid "" "jQuery UI theme that will be used in calendar, table, datepicker, dialog, " @@ -13438,15 +14283,15 @@ "there)." msgstr "" -#: includes/constant-data.php:644 +#: includes/constant-data.php:662 msgid "Thousands Separator" msgstr "" -#: includes/constant-data.php:645 +#: includes/constant-data.php:663 msgid "Use Time Base in Time Slot Calculus" msgstr "" -#: includes/constant-data.php:645 +#: includes/constant-data.php:663 #, php-format msgid "" "By default (setting as \"No\") time slots will be generated based on service " @@ -13456,11 +14301,11 @@ "have time slots of 8:00, 8:30, 9:00, 9:30, etc in this case." msgstr "" -#: includes/constant-data.php:646 +#: includes/constant-data.php:664 msgid "Twilio Account ID" msgstr "" -#: includes/constant-data.php:646 +#: includes/constant-data.php:664 #, php-format msgid "" "Get your Account ID/Auth Token pair after you login %s and enter here. If " @@ -13468,24 +14313,24 @@ "simulated. You can check the results in log file or in your Twilio account." msgstr "" -#: includes/constant-data.php:646 includes/constant-data.php:647 +#: includes/constant-data.php:664 includes/constant-data.php:665 msgid "your Twilio account" msgstr "" -#: includes/constant-data.php:647 +#: includes/constant-data.php:665 msgid "Twilio Auth Token" msgstr "" -#: includes/constant-data.php:647 +#: includes/constant-data.php:665 #, php-format msgid "Get token from %s" msgstr "" -#: includes/constant-data.php:648 +#: includes/constant-data.php:666 msgid "Twilio \"From\" phone" msgstr "" -#: includes/constant-data.php:648 +#: includes/constant-data.php:666 #, php-format msgid "" "A Twilio phone number (in E.164 format) or alphanumeric sender ID enabled " @@ -13493,34 +14338,34 @@ "credentials, use this number: +15005550006" msgstr "" -#: includes/constant-data.php:648 +#: includes/constant-data.php:666 msgid "click here" msgstr "" -#: includes/constant-data.php:649 +#: includes/constant-data.php:667 msgid "Twitter Consumer Key" msgstr "" -#: includes/constant-data.php:649 +#: includes/constant-data.php:667 #, php-format msgid "" "Enter your Twitter App ID number here. If you don't have a Twitter App yet, " "you will need to create one <a href=\"%s\" target=\"_blank\">here</a>" msgstr "" -#: includes/constant-data.php:650 +#: includes/constant-data.php:668 msgid "Twitter Consumer Secret" msgstr "" -#: includes/constant-data.php:650 +#: includes/constant-data.php:668 msgid "Enter your Twitter App ID Secret here." msgstr "" -#: includes/constant-data.php:651 +#: includes/constant-data.php:669 msgid "Globally Enable Shopping Cart" msgstr "" -#: includes/constant-data.php:651 +#: includes/constant-data.php:669 msgid "" "Enables shopping cart selection for every applicable shortcode. Tip: If you " "want to use cart on a particular page, and not on other booking pages, you " @@ -13528,50 +14373,50 @@ "use_cart=\"yes\"]</code> on the desired page." msgstr "" -#: includes/constant-data.php:652 +#: includes/constant-data.php:670 msgid "Use Events" msgstr "" -#: includes/constant-data.php:652 +#: includes/constant-data.php:670 msgid "" "Whether use Event Bookings in the store in addition to Service Bookings." msgstr "" -#: includes/constant-data.php:653 +#: includes/constant-data.php:671 msgid "Use Flex Steps" msgstr "" -#: includes/constant-data.php:653 +#: includes/constant-data.php:671 msgid "" "With Flex Steps, clients make bookings by following steps. These steps are " "dynamically added and removed depending on the selected service." msgstr "" -#: includes/constant-data.php:654 +#: includes/constant-data.php:672 msgid "Use HTML in emails" msgstr "" -#: includes/constant-data.php:654 +#: includes/constant-data.php:672 msgid "" "Selecting this as Yes will allow HTML codes, e.g. images, colors, fonts, " "etc. to be used in emails." msgstr "" -#: includes/constant-data.php:655 +#: includes/constant-data.php:673 msgid "Use Sidebar Widgets" msgstr "" -#: includes/constant-data.php:655 +#: includes/constant-data.php:673 msgid "" "Enable WP BASE legacy sidebar widgets. In order to configure them, you will " "also need to install \"Classic Widgets\" plugin." msgstr "" -#: includes/constant-data.php:656 +#: includes/constant-data.php:674 msgid "Add Coundown to Cart & Checkout" msgstr "" -#: includes/constant-data.php:656 +#: includes/constant-data.php:674 #, php-format msgid "" "Advanced Features addon is required. Setting this as Yes will automatically " @@ -13581,19 +14426,19 @@ "go to cart page on our %s." msgstr "" -#: includes/constant-data.php:656 +#: includes/constant-data.php:674 msgid "Maximum Allowed Checkout Time" msgstr "" -#: includes/constant-data.php:656 includes/constant-data.php:661 +#: includes/constant-data.php:674 includes/constant-data.php:679 msgid "WooCommerce demo website" msgstr "" -#: includes/constant-data.php:657 +#: includes/constant-data.php:675 msgid "Add WP BASE Payments to WC Orders" msgstr "" -#: includes/constant-data.php:657 +#: includes/constant-data.php:675 msgid "" "Add WP BASE Payments related to a WooCommerce order consisting of WP BASE " "bookings. This may be required if you ask only deposit during order process " @@ -13601,93 +14446,93 @@ "Manual Payments addon." msgstr "" -#: includes/constant-data.php:658 +#: includes/constant-data.php:676 msgid "Enable Deposits" msgstr "" -#: includes/constant-data.php:658 +#: includes/constant-data.php:676 msgid "" "Enabling this option will result in showing deposited amount and due amount " "at order records. This is intended to be used with WC Deposits extension." msgstr "" -#: includes/constant-data.php:659 +#: includes/constant-data.php:677 msgid "Create Order with Manual Booking" msgstr "" -#: includes/constant-data.php:659 +#: includes/constant-data.php:677 msgid "" "Automatically create WooCommerce order when a booking is added on admin " "side. Customer will also be created. If there is not enough user data " "available, current admin user will be set as customer." msgstr "" -#: includes/constant-data.php:660 +#: includes/constant-data.php:678 msgid "Description Tab Heading" msgstr "" -#: includes/constant-data.php:660 +#: includes/constant-data.php:678 msgid "" "Renames description tab for booking product pages. Leave empty if you do not " "want a change." msgstr "" -#: includes/constant-data.php:661 +#: includes/constant-data.php:679 #, php-format msgid "" "Enables integration with WooCommerce e-commerce plugin. That is, WP BASE " "services can be sold as WooCommerce products. Also see %s." msgstr "" -#: includes/constant-data.php:662 +#: includes/constant-data.php:680 msgid "Modify Coupons" msgstr "" -#: includes/constant-data.php:662 +#: includes/constant-data.php:680 msgid "" "Enabling this option will allow adding validity rules to WooCommerce regular " "coupons. Coupons can be set to be only valid for certain services, booking " "dates and times." msgstr "" -#: includes/constant-data.php:663 +#: includes/constant-data.php:681 msgid "Details in emails and Order Form" msgstr "" -#: includes/constant-data.php:663 +#: includes/constant-data.php:681 #, php-format msgid "" "Details of booking that will be added below product name in emails and order " "form. All <abbr title=\"%s\">booking placeholders</abbr> can be used." msgstr "" -#: includes/constant-data.php:664 +#: includes/constant-data.php:682 msgid "Name in Cart" msgstr "" -#: includes/constant-data.php:664 +#: includes/constant-data.php:682 #, php-format msgid "" "Defines how the selected booking will be displayed in the cart. All <abbr " "title=\"%s\">booking placeholders</abbr> can be used." msgstr "" -#: includes/constant-data.php:665 +#: includes/constant-data.php:683 msgid "Name in emails and Order Form" msgstr "" -#: includes/constant-data.php:665 +#: includes/constant-data.php:683 #, php-format msgid "" "Defines how the selected booking will be displayed in emails and order form. " "All <abbr title=\"%s\">booking placeholders</abbr> can be used." msgstr "" -#: includes/constant-data.php:666 includes/freeons/edd.php:1621 +#: includes/constant-data.php:684 includes/freeons/edd.php:1621 msgid "Price Display" msgstr "" -#: includes/constant-data.php:666 +#: includes/constant-data.php:684 msgid "" "Controls how WooCommerce displays prices for products related to services. " "\"Hide\" hides all the time. \"Show\" always shows the WooCommerce price. " @@ -13698,7 +14543,7 @@ "to the product by \"Connected Post\" setting of the service." msgstr "" -#: includes/constant-data.php:667 +#: includes/constant-data.php:685 #, php-format msgid "" "Start time of Working Hour setting tables and some views in Schedules. This " @@ -13706,11 +14551,11 @@ "it also limits available time slots when %s is set as \"Fixed\"." msgstr "" -#: includes/constant-data.php:667 includes/constant-data.php:668 +#: includes/constant-data.php:685 includes/constant-data.php:686 msgid "Click to access Display Settings page" msgstr "" -#: includes/constant-data.php:668 +#: includes/constant-data.php:686 #, php-format msgid "" "End time of Working Hour setting tables and some views in Schedules. This " @@ -13718,11 +14563,11 @@ "it also limits available time slots when %s is set as \"Fixed\"." msgstr "" -#: includes/constant-data.php:669 +#: includes/constant-data.php:687 msgid "Zoom Agenda" msgstr "" -#: includes/constant-data.php:669 +#: includes/constant-data.php:687 #, php-format msgid "" "Meeting agenda (description). For Zoom Topic and Zoom Agenda fields, <abbr " @@ -13730,78 +14575,78 @@ "creation, these placeholders will be replaced by their real values." msgstr "" -#: includes/constant-data.php:670 +#: includes/constant-data.php:688 msgid "Enables integration with Zoom Online Meetings." msgstr "" -#: includes/constant-data.php:671 +#: includes/constant-data.php:689 msgid "" "A Zoom account may have one or more users. Select which user will be used as " "host. List of users to be selected as host is updated after API connection " "is performed with Test Connection button." msgstr "" -#: includes/constant-data.php:672 +#: includes/constant-data.php:690 msgid "Join Before Host" msgstr "" -#: includes/constant-data.php:672 +#: includes/constant-data.php:690 msgid "Whether Zoom meeting participants allowed to join before host joins." msgstr "" -#: includes/constant-data.php:673 +#: includes/constant-data.php:691 msgid "Oauth Account ID" msgstr "" -#: includes/constant-data.php:673 +#: includes/constant-data.php:691 msgid "Enter Zoom Server-to-Server OAuth Account ID." msgstr "" -#: includes/constant-data.php:674 +#: includes/constant-data.php:692 msgid "Oauth Client ID" msgstr "" -#: includes/constant-data.php:674 +#: includes/constant-data.php:692 msgid "Enter Zoom Server-to-Server OAuth Client ID." msgstr "" -#: includes/constant-data.php:675 +#: includes/constant-data.php:693 msgid "Oauth Client Secret" msgstr "" -#: includes/constant-data.php:675 +#: includes/constant-data.php:693 msgid "Enter Zoom Server-to-Server OAuth Client Secret." msgstr "" -#: includes/constant-data.php:676 +#: includes/constant-data.php:694 msgid "Basis for creation of Zoom meeting password." msgstr "" -#: includes/constant-data.php:677 +#: includes/constant-data.php:695 msgid "Statuses to Delete Meeting" msgstr "" -#: includes/constant-data.php:677 +#: includes/constant-data.php:695 msgid "" "Select booking statuses for which the corresponding meeting will be deleted " "in Zoom. If none selected, no meeting will be deleted." msgstr "" -#: includes/constant-data.php:678 +#: includes/constant-data.php:696 msgid "Statuses to Create Meeting" msgstr "" -#: includes/constant-data.php:678 +#: includes/constant-data.php:696 msgid "" "Select booking statuses for which the corresponding meeting will be created/" "updated in Zoom. Cannot be empty." msgstr "" -#: includes/constant-data.php:679 +#: includes/constant-data.php:697 msgid "Zoom Topic" msgstr "" -#: includes/constant-data.php:679 +#: includes/constant-data.php:697 #, php-format msgid "" "Meeting topic (title). For Zoom Topic and Zoom Agenda fields, <abbr " @@ -13809,155 +14654,179 @@ "creation, these placeholders will be replaced by their real values." msgstr "" -#: includes/constant-data.php:680 +#: includes/constant-data.php:698 msgid "Provider Zoom Account Type" msgstr "" -#: includes/constant-data.php:680 +#: includes/constant-data.php:698 msgid "" "Select \"None\" if you don't have providers. If selected as \"Individual\" " "each provider should create own Zoom account and enter their credentials in " "their profiles." msgstr "" -#: includes/constant-data.php:684 +#: includes/constant-data.php:702 msgid "Your application to SITE_NAME approved!" msgstr "" -#: includes/constant-data.php:684 -msgid "Approved email Subject" +#: includes/constant-data.php:702 +msgid "Approved Email Subject" msgstr "" -#: includes/constant-data.php:684 +#: includes/constant-data.php:702 msgid "" "Subject of email which is sent to the applicant informing that their " "application has been approved" msgstr "" -#: includes/constant-data.php:685 -msgid "Approved email Message" +#: includes/constant-data.php:703 +msgid "Approved Email Message" msgstr "" -#: includes/constant-data.php:685 +#: includes/constant-data.php:703 msgid "" "CLIENT, HOME_URL, SITE_NAME, PAGE_LINK (Link to vendor bio page) " "placeholders can be used." msgstr "" -#: includes/constant-data.php:686 +#: includes/constant-data.php:704 msgid "Cancellation email Attachment Text" msgstr "" -#: includes/constant-data.php:686 includes/constant-data.php:693 -#: includes/constant-data.php:700 includes/constant-data.php:711 -#: includes/constant-data.php:715 includes/constant-data.php:719 -#: includes/constant-data.php:728 +#: includes/constant-data.php:704 includes/constant-data.php:713 +#: includes/constant-data.php:720 includes/constant-data.php:731 +#: includes/constant-data.php:735 includes/constant-data.php:739 +#: includes/constant-data.php:748 msgid "" "Contents of PDF file. HTML allowed and will be formatted with related css " "rules." msgstr "" -#: includes/constant-data.php:687 includes/constant-data.php:694 -#: includes/constant-data.php:701 includes/constant-data.php:712 -#: includes/constant-data.php:716 includes/constant-data.php:720 -#: includes/constant-data.php:729 +#: includes/constant-data.php:705 includes/constant-data.php:714 +#: includes/constant-data.php:721 includes/constant-data.php:732 +#: includes/constant-data.php:736 includes/constant-data.php:740 +#: includes/constant-data.php:749 msgid "css Codes for Attachment pdf File" msgstr "" -#: includes/constant-data.php:687 includes/constant-data.php:694 -#: includes/constant-data.php:701 includes/constant-data.php:712 -#: includes/constant-data.php:716 includes/constant-data.php:720 -#: includes/constant-data.php:729 +#: includes/constant-data.php:705 includes/constant-data.php:714 +#: includes/constant-data.php:721 includes/constant-data.php:732 +#: includes/constant-data.php:736 includes/constant-data.php:740 +#: includes/constant-data.php:749 msgid "" "Important: Only css for block elements (p, div, table, td, tr, etc) are " "allowed." msgstr "" -#: includes/constant-data.php:688 -msgid "Cancellation email Message" +#: includes/constant-data.php:706 +msgid "Cancellation Email Message" msgstr "" -#: includes/constant-data.php:689 +#: includes/constant-data.php:707 msgid "Cancellation SMS Message" msgstr "" -#: includes/constant-data.php:690 +#: includes/constant-data.php:708 msgid "Cancellation SMS Message (Admin)" msgstr "" -#: includes/constant-data.php:691 +#: includes/constant-data.php:709 msgid "Cancellation SMS Message (Provider)" msgstr "" -#: includes/constant-data.php:692 +#: includes/constant-data.php:710 msgid "Your appointment has been cancelled" msgstr "" -#: includes/constant-data.php:692 +#: includes/constant-data.php:710 msgid "Cancellation Email Subject" msgstr "" -#: includes/constant-data.php:693 +#: includes/constant-data.php:711 includes/functions.internal.php:2887 +msgid "Good news! You received a payment from SITE_NAME" +msgstr "" + +#: includes/constant-data.php:711 +msgid "Commission Paid Email Subject" +msgstr "" + +#: includes/constant-data.php:711 +msgid "" +"Subject of email which informs vendor that a commission payment has been made" +msgstr "" + +#: includes/constant-data.php:712 +msgid "Commission Paid Email Message" +msgstr "" + +#: includes/constant-data.php:712 +msgid "" +"This email template is used when a payment is sent to vendor. VENDOR, " +"HOME_URL, SITE_NAME, PAGE_LINK (Link to vendor bio page), AMOUNT " +"placeholders can be used which will be replaced with their real values.." +msgstr "" + +#: includes/constant-data.php:713 msgid "Completed email Attachment Text" msgstr "" -#: includes/constant-data.php:695 -msgid "Completed email Message" +#: includes/constant-data.php:715 +msgid "Completed Email Message" msgstr "" -#: includes/constant-data.php:696 +#: includes/constant-data.php:716 msgid "Completed SMS Message" msgstr "" -#: includes/constant-data.php:697 +#: includes/constant-data.php:717 msgid "Completed SMS Message (Admin)" msgstr "" -#: includes/constant-data.php:698 +#: includes/constant-data.php:718 msgid "Completed SMS Message (Provider)" msgstr "" -#: includes/constant-data.php:699 +#: includes/constant-data.php:719 msgid "Your appointment has been completed" msgstr "" -#: includes/constant-data.php:699 -msgid "Completed email Subject" +#: includes/constant-data.php:719 +msgid "Completed Email Subject" msgstr "" -#: includes/constant-data.php:700 +#: includes/constant-data.php:720 msgid "Confirmation email Attachment Text" msgstr "" -#: includes/constant-data.php:702 -msgid "Confirmation email Message" +#: includes/constant-data.php:722 +msgid "Confirmation Email Message" msgstr "" -#: includes/constant-data.php:703 +#: includes/constant-data.php:723 msgid "Confirmation SMS Message" msgstr "" -#: includes/constant-data.php:704 +#: includes/constant-data.php:724 msgid "Confirmation SMS Message (Admin)" msgstr "" -#: includes/constant-data.php:705 +#: includes/constant-data.php:725 msgid "Confirmation SMS Message (Provider)" msgstr "" -#: includes/constant-data.php:706 +#: includes/constant-data.php:726 msgid "Confirmation of your appointment" msgstr "" -#: includes/constant-data.php:706 +#: includes/constant-data.php:726 msgid "Confirmation Email Subject" msgstr "" -#: includes/constant-data.php:707 +#: includes/constant-data.php:727 msgid "Confirmation Message Dialog Content" msgstr "" -#: includes/constant-data.php:707 +#: includes/constant-data.php:727 #, php-format msgid "" "This will be displayed to the client in a dialog pop-up after confirmed or " @@ -13966,91 +14835,91 @@ "(see appointment_received in Custom Texts)." msgstr "" -#: includes/constant-data.php:708 +#: includes/constant-data.php:728 msgid "Confirmation Message Dialog Title" msgstr "" -#: includes/constant-data.php:708 +#: includes/constant-data.php:728 msgid "" "Title of the confirmation pop-up which will be displayed to the client after " "confirmed or paid bookings." msgstr "" -#: includes/constant-data.php:709 +#: includes/constant-data.php:729 msgid "Your application declined" msgstr "" -#: includes/constant-data.php:709 -msgid "Declined email Subject" +#: includes/constant-data.php:729 +msgid "Declined Email Subject" msgstr "" -#: includes/constant-data.php:709 +#: includes/constant-data.php:729 msgid "" "Subject of email which is sent to the applicant informing that their " "application has been declined" msgstr "" -#: includes/constant-data.php:710 -msgid "Declined email Message" +#: includes/constant-data.php:730 +msgid "Declined Email Message" msgstr "" -#: includes/constant-data.php:710 +#: includes/constant-data.php:730 msgid "CLIENT, HOME_URL, SITE_NAME placeholders can be used." msgstr "" -#: includes/constant-data.php:711 +#: includes/constant-data.php:731 msgid "Due Payment Reminder email Attachment Text" msgstr "" -#: includes/constant-data.php:715 +#: includes/constant-data.php:735 msgid "Follow up email Attachment Text" msgstr "" -#: includes/constant-data.php:717 -msgid "Follow-up email Message" +#: includes/constant-data.php:737 +msgid "Follow-up Email Message" msgstr "" -#: includes/constant-data.php:718 +#: includes/constant-data.php:738 msgid "Warmest greetings from SITE_NAME" msgstr "" -#: includes/constant-data.php:718 -msgid "Follow-up email Subject" +#: includes/constant-data.php:738 +msgid "Follow-up Email Subject" msgstr "" -#: includes/constant-data.php:719 +#: includes/constant-data.php:739 msgid "Pending email Attachment Text" msgstr "" -#: includes/constant-data.php:721 -msgid "Pending email Message" +#: includes/constant-data.php:741 +msgid "Pending Email Message" msgstr "" -#: includes/constant-data.php:722 +#: includes/constant-data.php:742 msgid "Pending SMS Message" msgstr "" -#: includes/constant-data.php:723 +#: includes/constant-data.php:743 msgid "Pending SMS Message (Admin)" msgstr "" -#: includes/constant-data.php:724 +#: includes/constant-data.php:744 msgid "Pending SMS Message (Provider)" msgstr "" -#: includes/constant-data.php:725 +#: includes/constant-data.php:745 msgid "We have received your booking" msgstr "" -#: includes/constant-data.php:725 -msgid "Pending email Subject" +#: includes/constant-data.php:745 +msgid "Pending Email Subject" msgstr "" -#: includes/constant-data.php:726 +#: includes/constant-data.php:746 msgid "Pending Message Dialog Content" msgstr "" -#: includes/constant-data.php:726 +#: includes/constant-data.php:746 #, php-format msgid "" "This will be displayed to the client in a dialog pop-up after pending " @@ -14059,200 +14928,200 @@ "appointment_received in Custom Texts)." msgstr "" -#: includes/constant-data.php:727 +#: includes/constant-data.php:747 msgid "Pending Message Dialog Title" msgstr "" -#: includes/constant-data.php:727 +#: includes/constant-data.php:747 msgid "" "Title of the pending pop-up which will be displayed to the client when an " "appointment submission is received in pending status." msgstr "" -#: includes/constant-data.php:728 +#: includes/constant-data.php:748 msgid "Reminder email Attachment Text" msgstr "" -#: includes/constant-data.php:730 -msgid "Reminder email Message" +#: includes/constant-data.php:750 +msgid "Reminder Email Message" msgstr "" -#: includes/constant-data.php:731 +#: includes/constant-data.php:751 msgid "Reminder SMS Message" msgstr "" -#: includes/constant-data.php:732 +#: includes/constant-data.php:752 msgid "Reminder SMS Message (Provider)" msgstr "" -#: includes/constant-data.php:733 +#: includes/constant-data.php:753 msgid "Reminder for your appointment on DATE_TIME" msgstr "" -#: includes/constant-data.php:733 -msgid "Reminder email Subject" +#: includes/constant-data.php:753 +msgid "Reminder Email Subject" msgstr "" -#: includes/constant-data.php:734 +#: includes/constant-data.php:754 msgid "Dialog Content" msgstr "" -#: includes/constant-data.php:734 +#: includes/constant-data.php:754 msgid "" "Terms & Conditions text. SITE_NAME and HOME_URL placeholders will be " "replaced by their actual values." msgstr "" -#: includes/constant-data.php:735 +#: includes/constant-data.php:755 msgid "Dialog Title" msgstr "" -#: includes/constant-data.php:735 +#: includes/constant-data.php:755 msgid "Title of the pop-up which displays terms and conditions." msgstr "" -#: includes/constant-data.php:736 +#: includes/constant-data.php:756 msgid "Activation for SITE_NAME" msgstr "" -#: includes/constant-data.php:736 -msgid "Validation email Subject" +#: includes/constant-data.php:756 +msgid "Validation Email Subject" msgstr "" -#: includes/constant-data.php:736 +#: includes/constant-data.php:756 msgid "" "Subject of email which is sent to vendor in order to validate their email " "address and activate their account" msgstr "" -#: includes/constant-data.php:737 -msgid "Validation email Message" +#: includes/constant-data.php:757 +msgid "Validation Email Message" msgstr "" -#: includes/constant-data.php:737 +#: includes/constant-data.php:757 msgid "" "Must include ACTIVATE placeholder which will be replaced with activation " "link. CLIENT, HOME_URL, SITE_NAME placeholders can also be used." msgstr "" -#: includes/constant-data.php:738 +#: includes/constant-data.php:758 msgid "Your application to SITE_NAME has been received" msgstr "" -#: includes/constant-data.php:738 -msgid "Vendor Pending email Subject" +#: includes/constant-data.php:758 +msgid "Vendor Pending Email Subject" msgstr "" -#: includes/constant-data.php:738 +#: includes/constant-data.php:758 msgid "" "Subject of email which informs vendor that application has been received and " "in pending status" msgstr "" -#: includes/constant-data.php:739 -msgid "Vendor Pending email Message" +#: includes/constant-data.php:759 +msgid "Vendor Pending Email Message" msgstr "" -#: includes/constant-data.php:739 +#: includes/constant-data.php:759 msgid "" "This email template is used when user application is in pending status. " "CLIENT, HOME_URL, SITE_NAME, PAGE_LINK (Link to vendor bio page) " "placeholders can be used." msgstr "" -#: includes/constant-data.php:740 -msgid "Submission Received email Message" +#: includes/constant-data.php:760 +msgid "Submission Received Email Message" msgstr "" -#: includes/constant-data.php:740 +#: includes/constant-data.php:760 msgid "" "Body of email which informs client that their submission has been added to " "the waiting list." msgstr "" -#: includes/constant-data.php:741 -msgid "Notification email Message" +#: includes/constant-data.php:761 +msgid "Notification Email Message" msgstr "" -#: includes/constant-data.php:741 +#: includes/constant-data.php:761 msgid "" "Body of email which informs client that there is an opening for the " "requested time slot. CLAIM should be included in the message so that client " "can confirm their request is still valid." msgstr "" -#: includes/constant-data.php:742 +#: includes/constant-data.php:762 msgid "Urgent action required for SITE_NAME" msgstr "" -#: includes/constant-data.php:742 -msgid "Notification email Subject" +#: includes/constant-data.php:762 +msgid "Notification Email Subject" msgstr "" -#: includes/constant-data.php:742 +#: includes/constant-data.php:762 msgid "" "Subject of email which informs client that there is an opening for the " "requested time slot." msgstr "" -#: includes/constant-data.php:743 +#: includes/constant-data.php:763 msgid "Your Booking has been added to SITE_NAME waiting list" msgstr "" -#: includes/constant-data.php:743 -msgid "Submission Received email Subject" +#: includes/constant-data.php:763 +msgid "Submission Received Email Subject" msgstr "" -#: includes/constant-data.php:743 +#: includes/constant-data.php:763 msgid "" "Subject of email which informs client that their submission has been added " "to the waiting list." msgstr "" -#: includes/constant-data.php:764 +#: includes/constant-data.php:784 msgid "Undefined" msgstr "" -#: includes/constant-data.php:817 +#: includes/constant-data.php:837 msgid "" "With <b>Limited Availability</b> you can define at what dates your service " "will be publicly bookable, for example to use services as events or rental " "bookings like Airbnb." msgstr "" -#: includes/constant-data.php:818 +#: includes/constant-data.php:838 msgid "" "To do so, just pick the desired dates on the provided calendar and click " "<b>Enable</b>." msgstr "" -#: includes/constant-data.php:819 +#: includes/constant-data.php:839 msgid "" "You can select/deselect multiple days by \"Days Picked per Click\" setting. " "If you set 7, for example, clicking a date will select that date plus 6 more " "consecutive days." msgstr "" -#: includes/constant-data.php:820 +#: includes/constant-data.php:840 msgid "" "Limited Availability overrides holidays of the service, provided that it is " "enabled." msgstr "" -#: includes/constant-data.php:821 +#: includes/constant-data.php:841 msgid "" "For services lasting one day and longer, Limited Availability overrides " "working hours of the service as well. It means, you don't need to set " "service working hours for such services." msgstr "" -#: includes/constant-data.php:832 +#: includes/constant-data.php:852 msgid "" "<i>Here you can optionally add locations. After you define locations, you " "can select services to be given in these locations in Services tab.</i>" msgstr "" -#: includes/constant-data.php:833 +#: includes/constant-data.php:853 msgid "" "Locations are to be used when you have different business rules depending on " "the selection where service is being given, e.g. extras offered, special " @@ -14260,33 +15129,33 @@ "services selection menu, prefer \"Categories\" instead." msgstr "" -#: includes/constant-data.php:834 +#: includes/constant-data.php:854 msgid "" "As you click \"Add New Location\" button a new empty row will be inserted." msgstr "" -#: includes/constant-data.php:835 +#: includes/constant-data.php:855 msgid "" "New inserted record(s) will not be saved unless you fill in the name field " "and click \"Save Locations\" button (Save button is only visible if there is " "at least one record added)." msgstr "" -#: includes/constant-data.php:836 includes/constant-data.php:860 +#: includes/constant-data.php:856 includes/constant-data.php:880 msgid "" "<b>ID field:</b> is automatically given by the system and it is unique. You " "can use this ID in shortcodes or in some addon (for example Advanced " "Pricing) settings." msgstr "" -#: includes/constant-data.php:837 +#: includes/constant-data.php:857 msgid "" "<b>Name field:</b> You can use anything as the location name here. This will " "be displayed to the client on the front end in locations pulldown menu, in " "list of bookings, in emails, etc." msgstr "" -#: includes/constant-data.php:838 +#: includes/constant-data.php:858 msgid "" "<b>Address field:</b> You can use this as reminder for yourself or location " "address for your clients as LOCATION_ADDRESS placeholder in email massages " @@ -14294,13 +15163,13 @@ "over location on confirmation form will display map of the address." msgstr "" -#: includes/constant-data.php:839 +#: includes/constant-data.php:859 msgid "" "<b>Location Manager field:</b> is optional user who receives a copy of all " "outgoing emails." msgstr "" -#: includes/constant-data.php:840 +#: includes/constant-data.php:860 msgid "" "<b>Capacity field:</b> is optional and it can be used to limit total number " "of clients that can be served per time slot when resources are shared and " @@ -14316,13 +15185,13 @@ "are for Ladies', set service capacities as 3 and 2, respectively." msgstr "" -#: includes/constant-data.php:841 +#: includes/constant-data.php:861 msgid "" "<b>Add. Price field:</b> is optional additional price that will be added to " "the service price if this location is selected by the client." msgstr "" -#: includes/constant-data.php:842 +#: includes/constant-data.php:862 msgid "" "<b>Connected Post:</b> is an optional page describing the location. The " "content of this page will be read from the database and it will be displayed " @@ -14332,21 +15201,21 @@ "settings (Advanced Features addon is required). " msgstr "" -#: includes/constant-data.php:843 +#: includes/constant-data.php:863 msgid "" "You can add as many records (locations) as you wish and they will only be " "saved after you hit Save Locations button." msgstr "" -#: includes/constant-data.php:844 +#: includes/constant-data.php:864 msgid "You can use location setting to group/categorize your services too." msgstr "" -#: includes/constant-data.php:845 includes/constant-data.php:1254 +#: includes/constant-data.php:865 includes/constant-data.php:1274 msgid "To delete a record empty Name field and Save." msgstr "" -#: includes/constant-data.php:846 +#: includes/constant-data.php:866 msgid "" "Custom Sorting: In selection menus items are displayed according to the " "order here, by default (Other display orders can be set in the related " @@ -14355,24 +15224,24 @@ "move it to the new position and then click Save." msgstr "" -#: includes/constant-data.php:857 +#: includes/constant-data.php:877 msgid "" "<i>Here you should define your services. <b>There must be at least one " "service defined.</b></i>" msgstr "" -#: includes/constant-data.php:858 +#: includes/constant-data.php:878 msgid "" "As you click \"Add New Service\" button a new empty row will be inserted." msgstr "" -#: includes/constant-data.php:859 +#: includes/constant-data.php:879 msgid "" "New inserted record(s) will not be saved unless you fill in the name field " "and click \"Save Services\" button." msgstr "" -#: includes/constant-data.php:861 +#: includes/constant-data.php:881 msgid "" "<b>Int (Internal) field:</b> Requires Extended Service Features Addon. " "Services marked as internal are not displayed in services pulldown menu. You " @@ -14384,14 +15253,14 @@ "service for desired shortcodes, and thus for desired pages." msgstr "" -#: includes/constant-data.php:862 +#: includes/constant-data.php:882 msgid "" "<b>Name field:</b> You can use anything as the service name here. This will " "be displayed to the client on the front end in Services pulldown menu, in " "list of bookings, in emails, etc." msgstr "" -#: includes/constant-data.php:863 +#: includes/constant-data.php:883 msgid "" "<b>Locations field:</b> Requires Locations Addon and only valid if there is " "at least one location defined. Locations where service will be given. More " @@ -14399,7 +15268,7 @@ "should be assigned to at least one location to be selectable." msgstr "" -#: includes/constant-data.php:864 +#: includes/constant-data.php:884 msgid "" "<b>Categories field:</b> Requires Extended Service Features Addon. It can be " "used to group your services for display convenience, e.g. on front end " @@ -14411,7 +15280,7 @@ "service on the front end." msgstr "" -#: includes/constant-data.php:865 +#: includes/constant-data.php:885 #, php-format msgid "" "<b>Capacity field:</b> is an optional field to change (increase or decrease) " @@ -14431,7 +15300,7 @@ "but they are available on admin side as usual." msgstr "" -#: includes/constant-data.php:866 +#: includes/constant-data.php:886 #, php-format msgid "" "<b>Notes about Capacity setting:</b> You can increase capacity field when " @@ -14449,14 +15318,14 @@ "A 4th booking will not be allowed, even when one SP seems to be free." msgstr "" -#: includes/constant-data.php:867 +#: includes/constant-data.php:887 #, php-format msgid "" "<b>Duration field:</b> is the number of minutes that this service lasts. It " "can only be selected in increments of %s." msgstr "" -#: includes/constant-data.php:868 +#: includes/constant-data.php:888 msgid "" "<b>Padding before field:</b> Requires Extended Service Features Addon. It is " "the period of the break in minutes that will be added before any appointment " @@ -14466,7 +15335,7 @@ "Time Base." msgstr "" -#: includes/constant-data.php:869 +#: includes/constant-data.php:889 msgid "" "<b>Padding after field:</b> Requires Extended Service Features Addon. It is " "the period of the break in minutes that will be added after any appointment. " @@ -14476,7 +15345,7 @@ "increments of Time Base." msgstr "" -#: includes/constant-data.php:870 +#: includes/constant-data.php:890 #, php-format msgid "" "<b>Notes about Padding settings:</b> 1) Paddings are applied to appointments " @@ -14490,7 +15359,7 @@ "services." msgstr "" -#: includes/constant-data.php:871 +#: includes/constant-data.php:891 #, php-format msgid "" "<b>Price field:</b> is the price of the service. You can leave empty for " @@ -14499,7 +15368,7 @@ "business location. You can set this requirement by %s setting." msgstr "" -#: includes/constant-data.php:872 +#: includes/constant-data.php:892 #, php-format msgid "" "<b>Security Deposit field:</b> Requires Extended Service Features Addon. It " @@ -14511,7 +15380,7 @@ "Manual Payments, making balance even." msgstr "" -#: includes/constant-data.php:873 +#: includes/constant-data.php:893 #, php-format msgid "" "<b>Connected Post:</b> is an optional page describing the service. The " @@ -14523,27 +15392,27 @@ "Features addon is required). " msgstr "" -#: includes/constant-data.php:874 +#: includes/constant-data.php:894 msgid "" "You can add as many records (services) as you wish and they will only be " "saved after you hit Save Services button." msgstr "" -#: includes/constant-data.php:875 +#: includes/constant-data.php:895 msgid "" "Some service related addons add a \"More\" link just after ID. When you " "click that link, you can view and set additional settings required by these " "addons." msgstr "" -#: includes/constant-data.php:876 +#: includes/constant-data.php:896 msgid "" "To delete a record empty Name field and Save. Note: If you are a service " "provider, deletion of self created services may be restricted. If you see a " "warning message, contact to admin," msgstr "" -#: includes/constant-data.php:877 +#: includes/constant-data.php:897 #, php-format msgid "" "<b>Custom Sorting:</b> In front end selection menus, items are displayed " @@ -14562,33 +15431,33 @@ "cases ask admin to sort your services for you." msgstr "" -#: includes/constant-data.php:888 +#: includes/constant-data.php:908 msgid "" "<i>Here you can optionally select your service providers, i.e. workers, and " "assign them to certain services.</i>" msgstr "" -#: includes/constant-data.php:889 +#: includes/constant-data.php:909 msgid "" "As you click \"Add New Service Provider\" button a new empty row will be " "inserted." msgstr "" -#: includes/constant-data.php:890 +#: includes/constant-data.php:910 msgid "" "New inserted record(s) will not be saved unless you assign at least one " "service and click \"Save Service Providers\" button (Save button is only " "visible if there is at least one record added)." msgstr "" -#: includes/constant-data.php:891 +#: includes/constant-data.php:911 msgid "" "<b>ID field:</b> is automatically filled by the system and it is WordPress " "user ID of the service provider. You can use this ID in shortcodes or in " "some addon (for example Advanced Pricing) settings." msgstr "" -#: includes/constant-data.php:892 +#: includes/constant-data.php:912 #, php-format msgid "" "<b>Service Provider field:</b> Select your service provider from the " @@ -14596,25 +15465,25 @@ "provider must be a registered user of the website. To add a new user %s. " msgstr "" -#: includes/constant-data.php:892 includes/functions.internal.php:2983 -#: includes/functions.internal.php:2986 +#: includes/constant-data.php:912 includes/functions.internal.php:3018 +#: includes/functions.internal.php:3021 msgid "Click here" msgstr "" -#: includes/constant-data.php:893 +#: includes/constant-data.php:913 msgid "" "<b>Display Name field:</b> You can use anything as the service provider name " "here. This will be displayed to the client on the front end in Services " "Providers pulldown menu, in emails, etc." msgstr "" -#: includes/constant-data.php:894 +#: includes/constant-data.php:914 msgid "" "<b>Services Provided field:</b> use this to assign your service provider to " "a single or multiple services. You must select at least one service." msgstr "" -#: includes/constant-data.php:895 +#: includes/constant-data.php:915 msgid "" "<b>Dummy field:</b> Check the checkbox if this is a \"dummy\" service " "provider. A dummy behaves exactly like a normal user, i.e. it has its own " @@ -14622,14 +15491,14 @@ "receive are forwarded to the selected user in the Advanced tab." msgstr "" -#: includes/constant-data.php:896 +#: includes/constant-data.php:916 msgid "" "<b>Add. Price field:</b> is the optional additional price of the service " "provider which will be added to the service price if client picks up this " "service provider." msgstr "" -#: includes/constant-data.php:897 +#: includes/constant-data.php:917 msgid "" "<b>Bio Page field:</b> is an optional page selection describing this service " "provider. The content of this page will be read from the database and it " @@ -14639,19 +15508,19 @@ "Advanced settings. " msgstr "" -#: includes/constant-data.php:898 +#: includes/constant-data.php:918 msgid "" "You can add as many records (service providers) as you wish and they will " "only be saved after you hit Save Service Providers button." msgstr "" -#: includes/constant-data.php:899 +#: includes/constant-data.php:919 msgid "" "To delete a record, i.e. unassign a user as service provider, deselect all " "Services Provided checkboxes and Save. This does not delete the user." msgstr "" -#: includes/constant-data.php:900 +#: includes/constant-data.php:920 #, php-format msgid "" "Custom Sorting: In front end selection menus, items are displayed according " @@ -14664,20 +15533,20 @@ "page value." msgstr "" -#: includes/constant-data.php:912 +#: includes/constant-data.php:932 msgid "" "Here you can define working hours for your services and service providers on " "days of the week basis. " msgstr "" -#: includes/constant-data.php:913 +#: includes/constant-data.php:933 msgid "" "WP BASE provides a table for each service and provider using which you can " "easily set working hours. You just need to set working time slots. Not " "selected slots will mean \"break times\"." msgstr "" -#: includes/constant-data.php:914 +#: includes/constant-data.php:934 msgid "" "When you add new services and service providers, their working hours will be " "set to the default schedule (Business Representative). Then you can edit " @@ -14687,62 +15556,62 @@ "certain name." msgstr "" -#: includes/constant-data.php:915 +#: includes/constant-data.php:935 msgid "" "You can open more than one table by checking the check boxes beside the " "service/provider name in the pulldown menu, e.g. to set more than one table " "at once and/or to copy/paste working hours as explained below." msgstr "" -#: includes/constant-data.php:916 +#: includes/constant-data.php:936 msgid "" "To set a working interval, click the appropriate cell to make it green. " "Continue with other cells until the desired working schedule is produced." msgstr "" -#: includes/constant-data.php:917 +#: includes/constant-data.php:937 msgid "It is possible to select/deselect multiple cells:" msgstr "" -#: includes/constant-data.php:918 +#: includes/constant-data.php:938 msgid "" "<b>To select/deselect a column (a week day):</b> Click on the column header " "(week day name, e.g. Wednesday)" msgstr "" -#: includes/constant-data.php:919 +#: includes/constant-data.php:939 msgid "" "<b>To select/deselect a row (a time interval for every week day):</b> Click " "the row header (time of the day, e.g. 1:00pm)" msgstr "" -#: includes/constant-data.php:920 +#: includes/constant-data.php:940 msgid "" "<b>To select/deselect all cells of the table (complete week):</b> Click the " "upper left cell" msgstr "" -#: includes/constant-data.php:921 +#: includes/constant-data.php:941 msgid "" "It is also possible to <b>copy</b> cell settings of an entire table (source) " "to another one (target) or more than one, e.g. copy Service Provider A's " "working hours to Service Provider B and C:" msgstr "" -#: includes/constant-data.php:922 +#: includes/constant-data.php:942 msgid "" "Open all source and target working hour tables at the same time using the " "selection puldown menu and checking all desired source and target tables." msgstr "" -#: includes/constant-data.php:923 +#: includes/constant-data.php:943 msgid "" "Click the \"Copy to clickboard\" button under the source table. Text of " "button will change from \"Copy to clickboard\" to \"Copied (click to release)" "\"." msgstr "" -#: includes/constant-data.php:924 +#: includes/constant-data.php:944 msgid "" "Click the \"Paste data of...\" button under the target table. You will see " "that source table values are copied to the target table. Text of button will " @@ -14750,26 +15619,26 @@ "to <b>undo</b> the paste operation." msgstr "" -#: includes/constant-data.php:925 +#: includes/constant-data.php:945 msgid "Repeat the above step for all desired target tables." msgstr "" -#: includes/constant-data.php:926 +#: includes/constant-data.php:946 msgid "" "If you have other copy operations from other source tables, click the button " "under source table: Button text will change from \"Copied (click to release)" "\" to \"Copy to clickboard\". Repeat the above steps as much as desired." msgstr "" -#: includes/constant-data.php:927 +#: includes/constant-data.php:947 msgid "Click \"Save Working Hours\" button." msgstr "" -#: includes/constant-data.php:928 +#: includes/constant-data.php:948 msgid "<b>NOTES:</b>" msgstr "" -#: includes/constant-data.php:929 +#: includes/constant-data.php:949 msgid "" "Please note that front end calendars generated by WP BASE are affected by " "the settings here: i) Start time of the calendars are determined by start " @@ -14781,7 +15650,7 @@ "of 12pm-2pm instead)." msgstr "" -#: includes/constant-data.php:930 +#: includes/constant-data.php:950 msgid "" "Rows of working hours tables are incremented by time base. Also a shift from " "exact hour of the day is possible within time base value. For example, " @@ -14789,7 +15658,7 @@ "minutes." msgstr "" -#: includes/constant-data.php:931 +#: includes/constant-data.php:951 msgid "" "On the front end, <b>service working hours</b> are used when there is no " "provider selected or not defined at all. When the capacity of the service is " @@ -14798,32 +15667,32 @@ "their working hours will be used." msgstr "" -#: includes/constant-data.php:942 +#: includes/constant-data.php:962 msgid "" "Here you can define custom weekly schedules and use them to prepare seasonal " "working schedules for your providers and even services. " msgstr "" -#: includes/constant-data.php:943 +#: includes/constant-data.php:963 msgid "" "A custom schedule is a weekly working hours table which will be used in a " "week or weeks of the year instead of regular working hours as you select." msgstr "" -#: includes/constant-data.php:944 +#: includes/constant-data.php:964 msgid "" "As an example model, a business using shift work can be given. Businesses " "having seasonal working hour changes can also get use of this feature." msgstr "" -#: includes/constant-data.php:945 +#: includes/constant-data.php:965 msgid "" "To add a new schedule, under pulldown menu of the desired week, select \"Add " "New\". In the opening popup set name and working hours and click Save. " "Please refer to Working Hours tab for details of setting working hours." msgstr "" -#: includes/constant-data.php:946 +#: includes/constant-data.php:966 msgid "" "Using the pulldown menus, select which weekly schedule to use for each week " "of the year: Regular (which means no custom schedule will be applied - " @@ -14831,37 +15700,37 @@ "created." msgstr "" -#: includes/constant-data.php:947 +#: includes/constant-data.php:967 msgid "" "To edit an existing schedule, simply click on the cells of the schedule and " "click Save Custom Schedules on the page. You can also edit existing " "schedules on Working Hours page where you can use copy/paste feature." msgstr "" -#: includes/constant-data.php:948 +#: includes/constant-data.php:968 msgid "" "To delete an existing schedule, click \"Custom Schedules List\" tab, clear " "the name of the schedule to be deleted and then click \"Save Custom " "Schedules\" button." msgstr "" -#: includes/constant-data.php:949 +#: includes/constant-data.php:969 msgid "You can use the same schedule on different weeks repeatedly." msgstr "" -#: includes/constant-data.php:950 +#: includes/constant-data.php:970 msgid "" "Please note that <b>every service and service provider may have their own " "custom schedules</b>. So, do not forget to change \"List For\" setting to " "set for a certain name." msgstr "" -#: includes/constant-data.php:951 +#: includes/constant-data.php:971 msgid "" "In addition to the current year, you can also set schedule for the next year." msgstr "" -#: includes/constant-data.php:962 +#: includes/constant-data.php:982 msgid "" "<b>Upcoming (Paid or Confirmed):</b> a) Paid: Paid and confirmed via Paypal " "or another payment gateway. Please note that \"paid\" does not mean all paid " @@ -14877,7 +15746,7 @@ "Pay button in client emails or List of Bookings." msgstr "" -#: includes/constant-data.php:963 +#: includes/constant-data.php:983 msgid "" "<b>Pending:</b> Client applied for the appointment, but not yet paid or " "appointment has not yet manually confirmed. Such an appointment will still " @@ -14888,7 +15757,7 @@ "admin gets a notification email at the instant of booking, if set so." msgstr "" -#: includes/constant-data.php:964 +#: includes/constant-data.php:984 msgid "" "<b>Reserved by GCal:</b> If you import appointments from Google Calender " "using Google Calendar API, that is, synchronize your calendar with WP BASE, " @@ -14897,7 +15766,7 @@ "Calendar instead. They will be automatically updated in WP BASE too." msgstr "" -#: includes/constant-data.php:965 +#: includes/constant-data.php:985 msgid "" "<b>In Progress:</b> Appointment has started, not yet finished and thus " "happening at the moment. This status will be automatically changed to " @@ -14905,38 +15774,38 @@ "appointment to In Progress manually." msgstr "" -#: includes/constant-data.php:966 +#: includes/constant-data.php:986 msgid "" "<b>Completed:</b> Appointment end time has passed (finished) when it was in " "confirmed or paid status. Such appointments do not reserve any booking " "capacity." msgstr "" -#: includes/constant-data.php:967 +#: includes/constant-data.php:987 msgid "" "<b>Removed:</b> Appointment was not paid for or was not confirmed manually " "in the allowed time. Such appointments do not reserve any booking capacity. " "Permanent deletion of an appointment record can only be done in this status." msgstr "" -#: includes/constant-data.php:968 +#: includes/constant-data.php:988 msgid "" "Please note that future (Confirmed, paid, pending, reserved) and current " "appointments (In Progress) reserve booking capacity, but past ones " "(Completed, removed) do not." msgstr "" -#: includes/constant-data.php:969 +#: includes/constant-data.php:989 msgid "Addons, for example Test Appointments Addon, can add new statuses." msgstr "" -#: includes/constant-data.php:980 +#: includes/constant-data.php:1000 msgid "" "WP BASE provides several email templates which can include booking specific " "details." msgstr "" -#: includes/constant-data.php:981 +#: includes/constant-data.php:1001 msgid "" "For all the email subject and message contents and also in some other " "templates (e.g. Manual Payment instructions), you can use the following " @@ -14963,7 +15832,7 @@ "added." msgstr "" -#: includes/constant-data.php:982 +#: includes/constant-data.php:1002 msgid "" "CANCEL and CONFIRM placeholders will be replaced with a link to allow cancel " "or confirm, respectively. Links are created only if cancellation and " @@ -14971,46 +15840,46 @@ "were logged in, they will be prompted to login again if not already." msgstr "" -#: includes/constant-data.php:983 +#: includes/constant-data.php:1003 msgid "" "List of Bookings shortcode <code>[app_list]</code> can be used in emails, " "e.g. to send a list of upcoming appointments and booking history." msgstr "" -#: includes/constant-data.php:984 +#: includes/constant-data.php:1004 msgid "" "If BuddyPress Addon is active, BP_BOOK_ME_URL, BP_BOOKINGS_URL and " "BP_CLIENT_BOOKINGS_URL will be replaced with Book Me tab URL, Bookings tab " "URL of the booking provider and Bookings tab URL of the client, respectively." msgstr "" -#: includes/constant-data.php:985 +#: includes/constant-data.php:1005 msgid "" "If Coupons Addon is active, COUPON_ID, COUPON_CODE, COUPON_DISCOUNT will be " "replaced by ID, code and net applied amount of the coupon which was used " "during booking, respectively." msgstr "" -#: includes/constant-data.php:986 +#: includes/constant-data.php:1006 msgid "" "If Extended Service Features & Categories Addon is active, CATEGORY " "placeholder will be replaced by the selected category, if there is one." msgstr "" -#: includes/constant-data.php:987 +#: includes/constant-data.php:1007 msgid "" "If Extras Addon is active, EXTRA placeholder will be replaced by the name of " "the extra(s) that client have chosen." msgstr "" -#: includes/constant-data.php:988 +#: includes/constant-data.php:1008 msgid "" "If Front End Edit Addon is active and editing is allowed, EDIT placeholder " "will be replaced with a link that redirects client to the website and opens " "edit dialog. If client is not logged in, they will be prompted to do so." msgstr "" -#: includes/constant-data.php:989 +#: includes/constant-data.php:1009 msgid "" "If Google Calendar Addon is active, GCAL_BUTTON will be replaced with a " "clickable GCal button which client can use to add the appointment to their " @@ -15018,7 +15887,7 @@ "replaced with Google Hangouts URL." msgstr "" -#: includes/constant-data.php:990 +#: includes/constant-data.php:1010 msgid "" "If Group Bookings Addon is active, PAX placeholder will be replaced by " "number of guests, PARTICIPANTS will be replaced by a list of submitted " @@ -15026,14 +15895,14 @@ "details defined in \"Template for Person Types\" setting." msgstr "" -#: includes/constant-data.php:991 +#: includes/constant-data.php:1011 msgid "" "If Marketplace Addon is active, VENDOR_NAME will be replaced by display name " "of the vendor. VENDOR_TITLE will be replaced by the title of the vendor page " "and VENDOR_LINK will be replaced by a clickable link to vendor bio page." msgstr "" -#: includes/constant-data.php:992 +#: includes/constant-data.php:1012 msgid "" "If Online Meetings Addon is active and Zoom is enabled, ZOOM_ID, ZOOM_HOST, " "ZOOM_PASSWORD, ZOOM_TOPIC, ZOOM_AGENDA placeholders will be replaced by " @@ -15041,25 +15910,25 @@ "replaced by a clickable link to join the meeting." msgstr "" -#: includes/constant-data.php:993 +#: includes/constant-data.php:1013 msgid "" "If Online Meetings Addon is active and Jitsi/Agora is enabled, JITSI_MEETING " "or AGORA_MEETING placeholder will be replaced by waiting room url." msgstr "" -#: includes/constant-data.php:994 +#: includes/constant-data.php:1014 msgid "" "If Waiting List Addon is active, CLAIM placeholder will be replaced with a " "link that redirects client to the website to claim booking in waiting list." msgstr "" -#: includes/constant-data.php:995 +#: includes/constant-data.php:1015 msgid "" "If WooCommerce Integration Addon is active, ORDER_ID placeholder will be " "replaced with WooCommerce order ID related to the booking, if there is one." msgstr "" -#: includes/constant-data.php:996 +#: includes/constant-data.php:1016 msgid "" "LOCATION_MAP and MAP_LINK can be used and replaced with Google static map " "and link to map.google.com for the location provided that all of these " @@ -15068,13 +15937,13 @@ "these conditions are not met, placeholder will be cleared from the email." msgstr "" -#: includes/constant-data.php:997 +#: includes/constant-data.php:1017 msgid "" "MAKE_PAYMENT placeholder will be replaced with a clickable link which takes " "user to the website to make payment for \"Pay Later\" method." msgstr "" -#: includes/constant-data.php:998 +#: includes/constant-data.php:1018 msgid "" "If Timezones Addon is active, DATE_TIME and END_DATE_TIME values will be " "calculated with timezone of the client saved during booking. If you want to " @@ -15084,25 +15953,25 @@ "used." msgstr "" -#: includes/constant-data.php:999 +#: includes/constant-data.php:1019 msgid "" "Use User Defined Fields (UDFs) like this: UDF_n where n is the ID of the " "UDF, e.g. UDF_1, UDF_2, etc." msgstr "" -#: includes/constant-data.php:1016 +#: includes/constant-data.php:1036 msgid "" "You can export and and then import recorded data for backup or analysis " "purposes or for copying to another website." msgstr "" -#: includes/constant-data.php:1017 +#: includes/constant-data.php:1037 msgid "" "<b>Export Bookings in CSV format</b> is suitable for further analysing and " "creating statistics of your bookings." msgstr "" -#: includes/constant-data.php:1018 +#: includes/constant-data.php:1038 msgid "" "To export all booking records, check the checkboxes to select columns you " "want to include (Your selection of checked columns will be saved for later " @@ -15111,7 +15980,7 @@ "this file with Excel or OpenOffice Calc and analyse records in detail." msgstr "" -#: includes/constant-data.php:1019 +#: includes/constant-data.php:1039 msgid "" "You can also export a partial or filtered result set using DataTables " "TableTools buttons on top of the bookings table. To do so, filter the " @@ -15121,13 +15990,13 @@ "Bookings table, export records to your PC." msgstr "" -#: includes/constant-data.php:1020 +#: includes/constant-data.php:1040 msgid "" "Importing with CSV format is not supported. Instead use SQL export/import " "explained below." msgstr "" -#: includes/constant-data.php:1021 +#: includes/constant-data.php:1041 msgid "" "<b>Export and Import Global Settings</b> is suitable for backing up your " "settings or copying them to another website. WP BASE stores global settings " @@ -15135,13 +16004,13 @@ "this file." msgstr "" -#: includes/constant-data.php:1022 +#: includes/constant-data.php:1042 msgid "" "To export Global Settings, click the Export Settings button. A file with " "json format will be downloaded to your PC." msgstr "" -#: includes/constant-data.php:1023 +#: includes/constant-data.php:1043 msgid "" "To import Global Settings to the same or another website, select \"Include " "email and SMS Templates\" and \"Include Custom Texts\" checkboxes as " @@ -15154,7 +16023,7 @@ "ensure that json file is the correct one." msgstr "" -#: includes/constant-data.php:1024 +#: includes/constant-data.php:1044 msgid "" "<b>Export and Import Database Tables</b> is again suitable for backing up " "your appointment records or copying them to another website. This export not " @@ -15163,7 +16032,7 @@ "providers, etc." msgstr "" -#: includes/constant-data.php:1025 +#: includes/constant-data.php:1045 msgid "" "To export database tables, click Export Database Tables button. An SQL file " "(source) will be saved on your PC including these tables and records: 1) All " @@ -15176,7 +16045,7 @@ "users" msgstr "" -#: includes/constant-data.php:1026 +#: includes/constant-data.php:1046 msgid "" "<b>To Import Database Tables</b> to the same or another website (target), " "click the related Choose File button, point the previously exported SQL " @@ -15186,35 +16055,35 @@ "operations will be commenced:" msgstr "" -#: includes/constant-data.php:1027 +#: includes/constant-data.php:1047 msgid "" "WP BASE tables on the target website will be truncated (all records erased) " "and new (source) records will be added. WordPress user and post tables are " "not erased and new records may be added:" msgstr "" -#: includes/constant-data.php:1028 +#: includes/constant-data.php:1048 msgid "" "Users in the source records will be checked to match by their email. If a " "matching user email is found on the target website, user will not be " "inserted, and new added records will be adjusted with their existing user ID." msgstr "" -#: includes/constant-data.php:1029 +#: includes/constant-data.php:1049 msgid "" "If user is not found on the target website, they will be created. Their ID " "will be kept the same, if possible. If this is not possible, new added " "records will be adjusted with this new user ID." msgstr "" -#: includes/constant-data.php:1030 +#: includes/constant-data.php:1050 msgid "" "If user record is successfully created or a matching user is found to be " "already existing, source user metas will be checked for existence on the " "target. They will be updated or created as required." msgstr "" -#: includes/constant-data.php:1031 +#: includes/constant-data.php:1051 msgid "" "Posts/pages in the source records will be checked to match by the content. " "If the same content is found on the target, post will not be inserted, and " @@ -15222,28 +16091,28 @@ "records." msgstr "" -#: includes/constant-data.php:1032 +#: includes/constant-data.php:1052 msgid "" "If post content is not found, new post will be created. Its ID will be kept " "the same, if possible. If not, new added records will be adjusted with this " "new post ID." msgstr "" -#: includes/constant-data.php:1033 +#: includes/constant-data.php:1053 msgid "" "If post is successfully created or a matching post is found to be existing, " "source post metas will be checked for existence on the target. They will be " "updated or created as required." msgstr "" -#: includes/constant-data.php:1034 +#: includes/constant-data.php:1054 msgid "" "After these operations you should see a message indication the result: " "Failure, success or partial success. In every case you can check the log " "file for the details of the result." msgstr "" -#: includes/constant-data.php:1035 +#: includes/constant-data.php:1055 msgid "" "DB prefix of source and target can be different. Export/Import between " "multisite installation and solo installation is also allowed. Please note " @@ -15252,7 +16121,7 @@ "transferred/created." msgstr "" -#: includes/constant-data.php:1036 +#: includes/constant-data.php:1056 msgid "" "Do NOT use another tool (e.g. phpmyadmin) to import records using the " "exported file. WP BASE is performing numerous actions to adjust the source " @@ -15260,7 +16129,7 @@ "results." msgstr "" -#: includes/constant-data.php:1037 +#: includes/constant-data.php:1057 msgid "" "Limitations: 1) Target and source websites should be using the same WP BASE " "database version. Otherwise import may partly or fully fail. You can check " @@ -15269,21 +16138,21 @@ "using Appearance > Widgets page." msgstr "" -#: includes/constant-data.php:1048 +#: includes/constant-data.php:1068 msgid "" "Appointments Plus (A+) is an appointment booking plugin originally developed " "by the WP BASE author for WPMU DEV. You can only import data from A+, there " "is no export option." msgstr "" -#: includes/constant-data.php:1049 +#: includes/constant-data.php:1069 msgid "" "Importing from A+ copies A+ appointments, transactions, services and service " "providers records to WP BASE database tables installed on the same website. " "A+ tables will remain untouched." msgstr "" -#: includes/constant-data.php:1050 +#: includes/constant-data.php:1070 #, php-format msgid "" "Please note that this import is mainly intended for a newly installed WP " @@ -15292,47 +16161,47 @@ "(Select both Export Settings and Export Database Tables)." msgstr "" -#: includes/constant-data.php:1050 +#: includes/constant-data.php:1070 msgid "export" msgstr "" -#: includes/constant-data.php:1051 +#: includes/constant-data.php:1071 msgid "" "Import is only possible if both plugins are installed on the same website. " "A+ does not need to be activated and actually its being deactivated is " "preferable." msgstr "" -#: includes/constant-data.php:1052 +#: includes/constant-data.php:1072 msgid "" "Since working hours system of the two plugins are completely different, " "working hours cannot be imported and they should be created manually." msgstr "" -#: includes/constant-data.php:1053 +#: includes/constant-data.php:1073 msgid "" "WP BASE Services table will be cleared before import. This process will " "maintain Appointments+ Service IDs to be used as they are." msgstr "" -#: includes/constant-data.php:1054 +#: includes/constant-data.php:1074 msgid "" "If WP BASE Service Providers table is not empty, existing records will be " "replaced with Appointments+ values." msgstr "" -#: includes/constant-data.php:1055 +#: includes/constant-data.php:1075 #, php-format msgid "" "The other WP BASE table records will be added without resetting the existing " "data. If this is not your intention, you may want to %s WP BASE tables first." msgstr "" -#: includes/constant-data.php:1055 +#: includes/constant-data.php:1075 msgid "reset" msgstr "" -#: includes/constant-data.php:1056 +#: includes/constant-data.php:1076 #, php-format msgid "" "A+ accepts non WP users as clients (as well as WP BASE), and it is possible " @@ -15341,34 +16210,34 @@ "want to set %2$s if you want clients to receive their login credentials." msgstr "" -#: includes/constant-data.php:1057 +#: includes/constant-data.php:1077 msgid "" "If Auto Register Client is selected, after user registration process admin " "will not get an email, but they can check created users list in the log file." msgstr "" -#: includes/constant-data.php:1058 +#: includes/constant-data.php:1078 msgid "" "Existing A+ settings will also be imported. Since WP BASE has much more " "features than A+, missing settings will be completed from current values. " "You may also want to reset settings to their default values before importing." msgstr "" -#: includes/constant-data.php:1059 +#: includes/constant-data.php:1079 msgid "" "To start the import, simply click the related button and confirm the " "javascript message. The actual import process may take a few minutes " "depending on the size of your records." msgstr "" -#: includes/constant-data.php:1060 +#: includes/constant-data.php:1080 msgid "" "After the import process, you should see a message indicating the result: " "Failure, success or partial success. In every case you can check the log " "file for the details of the result." msgstr "" -#: includes/constant-data.php:1061 +#: includes/constant-data.php:1081 msgid "" "To import A+ from a website (source) to a WP BASE installed on another " "website (target), you can use this method: Install WP BASE and Export/Import " @@ -15378,11 +16247,11 @@ "imports and vice versa are allowed." msgstr "" -#: includes/constant-data.php:1062 +#: includes/constant-data.php:1082 msgid "Import will also work for Appointments Lite, the free version of A+." msgstr "" -#: includes/constant-data.php:1073 +#: includes/constant-data.php:1093 msgid "" "<i>Addons extend the functionality of WP BASE. Most addons add setting " "fields to Settings page. By default, all addons are automatically activated. " @@ -15392,7 +16261,7 @@ "unused ones.</i>" msgstr "" -#: includes/constant-data.php:1084 +#: includes/constant-data.php:1104 #, php-format msgid "" "<i>With unlimited services, unrestricted bookings, email sending feature, WP " @@ -15402,11 +16271,11 @@ "example usage on our %s.</i> " msgstr "" -#: includes/constant-data.php:1084 +#: includes/constant-data.php:1104 msgid "Addon Demo Website" msgstr "" -#: includes/constant-data.php:1095 +#: includes/constant-data.php:1115 msgid "" "<i>Coupons (a.k.a discount codes, promo codes) are alphanumerical character " "sets which allow clients get discounts when they enter the correct code in " @@ -15414,19 +16283,19 @@ "when applicable.</i>" msgstr "" -#: includes/constant-data.php:1096 +#: includes/constant-data.php:1116 msgid "" "As you click \"Add New Coupon\" button a new empty row will be inserted on " "top of the existing coupons. Coupons are listed in reverse order, thus most " "recent ones are on top." msgstr "" -#: includes/constant-data.php:1097 includes/constant-data.php:1127 -#: includes/constant-data.php:1188 +#: includes/constant-data.php:1117 includes/constant-data.php:1147 +#: includes/constant-data.php:1208 msgid "<b>ID field:</b> is automatically given by the system and it is unique." msgstr "" -#: includes/constant-data.php:1098 +#: includes/constant-data.php:1118 msgid "" "<b>Code field:</b> is set of characters your client supposed to enter to " "gain a discount. Letters are case insensitive. Only alphanumeric characters " @@ -15438,7 +16307,7 @@ "(logged in) client having WordPress user ID 5." msgstr "" -#: includes/constant-data.php:1099 +#: includes/constant-data.php:1119 msgid "" "<b>Discount (%) and Discount (Currency) fields:</b> define the discount that " "will be applied to the sales price. Discount (%), applies a discount over " @@ -15448,32 +16317,32 @@ "percentage field will make the service(s) free of charge." msgstr "" -#: includes/constant-data.php:1100 +#: includes/constant-data.php:1120 msgid "" "<b>Max uses field:</b> defines how many times this coupon can be used. If " "left empty there is no usage limit." msgstr "" -#: includes/constant-data.php:1101 +#: includes/constant-data.php:1121 msgid "" "<b>Used field:</b> is read-only and displays how many times this coupon was " "used." msgstr "" -#: includes/constant-data.php:1102 +#: includes/constant-data.php:1122 msgid "" "<b>Valid from field:</b> defines the date (including the date) coupon can be " "used starting from. If left empty, coupon can be used immediately." msgstr "" -#: includes/constant-data.php:1103 +#: includes/constant-data.php:1123 msgid "" "<b>Valid until field:</b> defines expiry date of the coupon. Including that " "date and onwards, coupon cannot be used. If left empty, coupon can be used " "indefinitely (or until max uses limit)." msgstr "" -#: includes/constant-data.php:1104 +#: includes/constant-data.php:1124 msgid "" "<b>Applies to field:</b> defines for which services and/or providers this " "coupon will be applied. Multiple selection is possible. This means, " @@ -15482,7 +16351,7 @@ "coupon will be valid for all bookings." msgstr "" -#: includes/constant-data.php:1105 +#: includes/constant-data.php:1125 msgid "" "<b>With match field:</b> defines how multiple selections of \"applies to\" " "setting will be handled. \"Any match\" will result in the coupon to be " @@ -15499,7 +16368,7 @@ "and settings except \"applies to\" is \"Sample Service, SP B\"." msgstr "" -#: includes/constant-data.php:1106 +#: includes/constant-data.php:1126 msgid "" "<b>For users field:</b> defines to whom this coupon will be applied. That " "is, only clients having selected WP user role can use the coupon, allowing " @@ -15509,38 +16378,38 @@ "users, select all roles." msgstr "" -#: includes/constant-data.php:1107 +#: includes/constant-data.php:1127 msgid "" "You can add as many records (coupons) as you wish and they will only be " "saved after you hit Save Coupons button." msgstr "" -#: includes/constant-data.php:1108 +#: includes/constant-data.php:1128 msgid "" "New inserted record(s) will not be saved unless you fill in the code field " "and click \"Save Coupons\" button (Save button is only visible if there is " "at least one record added)." msgstr "" -#: includes/constant-data.php:1109 +#: includes/constant-data.php:1129 msgid "To delete a record empty Code field and Save." msgstr "" -#: includes/constant-data.php:1110 +#: includes/constant-data.php:1130 msgid "" "A coupon becomes inactive if a) No discount is defined, b) it is used \"max " "uses\" times, c) \"Valid from\" date has not yet arrived, d) \"Valid until\" " "date has arrived. Inactive coupons are shown faded." msgstr "" -#: includes/constant-data.php:1111 +#: includes/constant-data.php:1131 msgid "" "Coupon entry field in the confirmation form is displayed only if there is at " "least one active coupon applicable to the selected service or provider and " "user role of the client." msgstr "" -#: includes/constant-data.php:1112 +#: includes/constant-data.php:1132 msgid "" "It is possible to have more than one coupon with the same code with " "different discount and different \"applies to\" setting, e.g. to apply " @@ -15548,17 +16417,17 @@ "coupon with the highest net discount will be applied." msgstr "" -#: includes/constant-data.php:1113 +#: includes/constant-data.php:1133 msgid "Coupons addon runs after Custom Pricing rules." msgstr "" -#: includes/constant-data.php:1114 +#: includes/constant-data.php:1134 msgid "" "When client enters correct coupon code, total price on the confirmation form " "will be updated on the fly." msgstr "" -#: includes/constant-data.php:1125 +#: includes/constant-data.php:1145 msgid "" "With <b>Custom Pricing</b>, you can add as many records as you wish to apply " "discount or override regular price of the service depending on selected " @@ -15566,14 +16435,14 @@ "the client. Each Custom Pricing record is called a <b>rule</b>." msgstr "" -#: includes/constant-data.php:1126 +#: includes/constant-data.php:1146 msgid "" "As you click \"Add New Rule\" button a new empty row will be inserted on top " "of the existing rules. Rules are listed in reverse order, thus most recent " "ones are on top." msgstr "" -#: includes/constant-data.php:1128 +#: includes/constant-data.php:1148 msgid "" "<b>Discount (%) and Price (Currency) fields:</b> determine the net price " "that will be applied to the sales price. Discount (%), applies a discount " @@ -15585,7 +16454,7 @@ "allowed which means surcharge of the regular price." msgstr "" -#: includes/constant-data.php:1129 +#: includes/constant-data.php:1149 msgid "" "<b>Applies to field:</b> defines for which services and/or providers this " "rule will be applied. Multiple selection is possible. This means, depending " @@ -15594,7 +16463,7 @@ "valid for all booking submissions." msgstr "" -#: includes/constant-data.php:1130 +#: includes/constant-data.php:1150 msgid "" "<b>With match field:</b> defines how multiple selections of \"applies to\" " "setting will be handled. \"Any match\" will result in the rule to be " @@ -15611,7 +16480,7 @@ "\"applies to\" is \"Sample Service, SP B\"." msgstr "" -#: includes/constant-data.php:1131 +#: includes/constant-data.php:1151 msgid "" "<b>For users field:</b> defines to whom this rule will be applied. That is, " "clients having selected WP user role will be subject to the rule. You can " @@ -15620,7 +16489,7 @@ "in users, but not for non logged in users, select all roles." msgstr "" -#: includes/constant-data.php:1132 +#: includes/constant-data.php:1152 msgid "" "<b>From, To Pax fields:</b> require Group Bookings addon. They define range " "of seat/pax selection for which the rule will be applied. Either of the " @@ -15628,7 +16497,7 @@ "empty To Pax field is taken as maximum possible value." msgstr "" -#: includes/constant-data.php:1133 includes/constant-data.php:1156 +#: includes/constant-data.php:1153 includes/constant-data.php:1176 msgid "" "<b>Valid for field:</b> defines the recurrence of this rule. \"Fixed range\" " "will make the rule applied to bookings whose starting time is between From " @@ -15640,7 +16509,7 @@ "time fields will be hidden." msgstr "" -#: includes/constant-data.php:1134 includes/constant-data.php:1157 +#: includes/constant-data.php:1154 includes/constant-data.php:1177 msgid "" "<b>From, To Date/time fields:</b> define time range for which rule will be " "applied. Selection values are included in the range, e.g. 10:00 start and " @@ -15652,25 +16521,25 @@ "appointment submission is made for, NOT time of the submission." msgstr "" -#: includes/constant-data.php:1135 includes/constant-data.php:1159 +#: includes/constant-data.php:1155 includes/constant-data.php:1179 msgid "" "You can add as many records (rules) as you wish and they will only be saved " "after you hit Save Changes button." msgstr "" -#: includes/constant-data.php:1136 +#: includes/constant-data.php:1156 msgid "" "New inserted record(s) will not be saved unless you fill in the price or " "discount field and click \"Save Changes\" button on the page." msgstr "" -#: includes/constant-data.php:1137 +#: includes/constant-data.php:1157 msgid "" "Either a discount or price value is required to save a rule. As a result, to " "<b>delete a record</b> empty discount and price fields and Save." msgstr "" -#: includes/constant-data.php:1138 +#: includes/constant-data.php:1158 msgid "" "A rule becomes inactive if selected dates are impossible to apply, for " "example From value is later than To value (Equal From and To values do not " @@ -15678,20 +16547,20 @@ "shown faded and they do not have any effect on the price." msgstr "" -#: includes/constant-data.php:1139 +#: includes/constant-data.php:1159 msgid "" "If there are more than one rule matching to the booking submission, price " "will be determined by \"Price to be applied if more than one rule match\" " "setting (Default: rule leading to lowest net price)." msgstr "" -#: includes/constant-data.php:1140 includes/constant-data.php:1163 +#: includes/constant-data.php:1160 includes/constant-data.php:1183 msgid "" "If no rules match to the booking submission, regular price of the service " "will be valid." msgstr "" -#: includes/constant-data.php:1151 +#: includes/constant-data.php:1171 msgid "" "With <b>Flexible Price</b>, you can add as many records as you wish to " "override regular price of the service depending on selected date, day and " @@ -15699,26 +16568,26 @@ "record is called a <b>rule</b>." msgstr "" -#: includes/constant-data.php:1152 +#: includes/constant-data.php:1172 msgid "" "As you click \"Add New Rule\" button a new empty row will be inserted to the " "existing rules." msgstr "" -#: includes/constant-data.php:1153 +#: includes/constant-data.php:1173 msgid "" "Tick the \"Enable\" check box for price rules to be applied. If disabled, " "you can still create and edit rules, but they will NOT be taken into account " "when calculating service price. " msgstr "" -#: includes/constant-data.php:1154 +#: includes/constant-data.php:1174 msgid "" "<b>Price field:</b> determine the net price that will be applied to the " "sales price when the rule conditions are met" msgstr "" -#: includes/constant-data.php:1155 +#: includes/constant-data.php:1175 msgid "" "<b>For User Roles field:</b> defines to whom this rule will be applied. That " "is, clients having selected WP user role will be subject to the rule. You " @@ -15727,7 +16596,7 @@ "in users, but not for non logged in users, select all roles." msgstr "" -#: includes/constant-data.php:1158 +#: includes/constant-data.php:1178 msgid "" "<b>From, To Pax fields:</b> require Group Bookings addon activated and " "enabled for the service. They define range of seat/pax selection (including " @@ -15736,39 +16605,39 @@ "Pax field is taken as maximum possible value." msgstr "" -#: includes/constant-data.php:1160 +#: includes/constant-data.php:1180 msgid "" "New inserted record(s) will not be saved unless you fill in the price field " "and click \"Save Changes\" button on the page." msgstr "" -#: includes/constant-data.php:1161 +#: includes/constant-data.php:1181 msgid "" "To delete a rule, click the trash icon and then Save. Rules will be " "renumbered." msgstr "" -#: includes/constant-data.php:1162 +#: includes/constant-data.php:1182 msgid "" "If there are more than one rule matching to the booking submission, price " "will be determined by \"Price on Multi Match\" setting (Default: rule " "leading to lowest net price)." msgstr "" -#: includes/constant-data.php:1164 +#: includes/constant-data.php:1184 msgid "" "Flexible Price, is service specific subset of Custom Pricing. If you are " "already using Custom Pricing, you do not need to use Flexible Price feature." msgstr "" -#: includes/constant-data.php:1175 +#: includes/constant-data.php:1195 msgid "" "Extras can be additional equipment, material, facility or another service " "(called \"extra service\") in addition to the currently selected one which " "shall be offered to the client as an option on the confirmation form." msgstr "" -#: includes/constant-data.php:1176 +#: includes/constant-data.php:1196 msgid "" "Each row entered here is a different extra record which may be displayed as " "a pulldown menu selection option on the confirmation form depending on " @@ -15777,14 +16646,14 @@ "the record." msgstr "" -#: includes/constant-data.php:1177 +#: includes/constant-data.php:1197 msgid "" "Only extras which comply the requirements will be presented to the client on " "the front end. Therefore number of selectable options in the selection menu " "may vary for each booking." msgstr "" -#: includes/constant-data.php:1178 +#: includes/constant-data.php:1198 msgid "" "Using settings of the records, you can control the options to offer to the " "client, from the most simplest case (directly displaying all of the options " @@ -15793,13 +16662,13 @@ "times)." msgstr "" -#: includes/constant-data.php:1179 +#: includes/constant-data.php:1199 msgid "" "When client picks up an option from the pulldown menu, total price will be " "updated on the fly." msgstr "" -#: includes/constant-data.php:1180 +#: includes/constant-data.php:1200 msgid "" "When client submits the booking using this selection, it will be saved in " "the database, therefore you can review and make necessary arrangements based " @@ -15807,7 +16676,7 @@ "separate column on Bookings page using \"Screen Options\"." msgstr "" -#: includes/constant-data.php:1181 +#: includes/constant-data.php:1201 msgid "" "If you want to offer a product or unlisted service as an extra, use \"Add " "New Item as Extra\" button, if you want to offer an existing WP BASE service " @@ -15815,7 +16684,7 @@ "is allowed." msgstr "" -#: includes/constant-data.php:1182 +#: includes/constant-data.php:1202 msgid "" "Availability of extra services is checked against selected time slot, and " "unavailable services are not offered to the client. Please note that " @@ -15825,7 +16694,7 @@ "this as overbooking." msgstr "" -#: includes/constant-data.php:1183 +#: includes/constant-data.php:1203 msgid "" "Extra service should be different than the selected service. Tip: You can " "use Group Bookings addon if you want to allow booking for more than one " @@ -15833,11 +16702,11 @@ "with more than one providers." msgstr "" -#: includes/constant-data.php:1184 +#: includes/constant-data.php:1204 msgid "Extra service cannot be a service package." msgstr "" -#: includes/constant-data.php:1185 +#: includes/constant-data.php:1205 msgid "" "Duration of extra service is not added to the main service, but recorded as " "a separate booking starting from selected appointment time. For example, if " @@ -15846,24 +16715,24 @@ "main service." msgstr "" -#: includes/constant-data.php:1186 +#: includes/constant-data.php:1206 msgid "" "Upon successful submission, each extra service will create an appointment " "connected to (child of) the main appointment." msgstr "" -#: includes/constant-data.php:1187 +#: includes/constant-data.php:1207 msgid "As you click \"Add...\" button a new empty row will be inserted." msgstr "" -#: includes/constant-data.php:1189 +#: includes/constant-data.php:1209 msgid "" "<b>Name field:</b> is the display name of the option which will be used in " "the pulldown menu on the confirmation form. Name field is always required to " "save a record." msgstr "" -#: includes/constant-data.php:1190 +#: includes/constant-data.php:1210 msgid "" "<b>+Price field:</b> is the <b>additional price</b> that will be added to " "the regular price in case this extra is selected. It can be empty (zero " @@ -15871,7 +16740,7 @@ "leads to less cost for you." msgstr "" -#: includes/constant-data.php:1191 +#: includes/constant-data.php:1211 msgid "" "<b>Connected Post:</b> is an optional page that may be used to explain scope " "of supply of the extra. If this page has a WP post excerpt it will be used. " @@ -15883,7 +16752,7 @@ "Advanced → Admin settings (Advanced Features addon is required). " msgstr "" -#: includes/constant-data.php:1192 +#: includes/constant-data.php:1212 msgid "" "<b>Applies to field:</b> defines for which services and/or provider " "selection(s) this option will be displayed. Multiple selection is possible. " @@ -15892,7 +16761,7 @@ "option will always be available." msgstr "" -#: includes/constant-data.php:1193 +#: includes/constant-data.php:1213 msgid "" "<b>With match field:</b> defines how multiple selections of \"applies to\" " "setting will be handled. \"Any match\" will result in the option to be " @@ -15909,7 +16778,7 @@ "settings except \"applies to\" is \"Sample Service, SP B\"." msgstr "" -#: includes/constant-data.php:1194 +#: includes/constant-data.php:1214 msgid "" "<b>For users field:</b> defines to whom this option will be displayed. That " "is, clients having selected WP user role will be eligible to view and select " @@ -15920,7 +16789,7 @@ "offer role specific options to your members." msgstr "" -#: includes/constant-data.php:1195 +#: includes/constant-data.php:1215 msgid "" "<b>Valid for field:</b> defines what type of date selections will make this " "option visible. \"Fixed range\" will make the option visible for " @@ -15932,7 +16801,7 @@ "setting will make date limitation void and date/time fields will be hidden." msgstr "" -#: includes/constant-data.php:1196 +#: includes/constant-data.php:1216 msgid "" "<b>From, To fields:</b> define time range of the appointment for which " "option is visible. Selected values are included in the range, e.g. 10:00 " @@ -15944,24 +16813,24 @@ "the appointment submission is made for, NOT time of the submission." msgstr "" -#: includes/constant-data.php:1197 +#: includes/constant-data.php:1217 msgid "" "You can add as many records (extras) as you wish and they will only be saved " "after you hit Save Records button." msgstr "" -#: includes/constant-data.php:1198 +#: includes/constant-data.php:1218 msgid "" "New inserted record(s) will not be saved unless you fill in the \"Name\" " "field and click \"Save Extras\" button (Save button is only visible if there " "is at least one record added)." msgstr "" -#: includes/constant-data.php:1199 +#: includes/constant-data.php:1219 msgid "To delete a record empty \"Name\" field and Save." msgstr "" -#: includes/constant-data.php:1200 +#: includes/constant-data.php:1220 msgid "" "A record becomes inactive if selected dates are impossible to apply, for " "example From value is later than To value (Equal From and To values do not " @@ -15969,73 +16838,73 @@ "shown faded and they are not visible as option on the front end in any case." msgstr "" -#: includes/constant-data.php:1201 +#: includes/constant-data.php:1221 msgid "" "If no records match to the booking submission, select extras pulldown menu " "will not be displayed to the client." msgstr "" -#: includes/constant-data.php:1202 +#: includes/constant-data.php:1222 msgid "" "Sorting: Extras are displayed in the order as displayed in the list. To " "change the sort order, select the row with your mouse and move the complete " "row to the new position (drag and drop) and then click Save." msgstr "" -#: includes/constant-data.php:1213 +#: includes/constant-data.php:1233 #, php-format msgid "" "Group Bookings addon allows your clients book for more than one person/seat " "(also called %s) for the service for any time slot." msgstr "" -#: includes/constant-data.php:1213 +#: includes/constant-data.php:1233 msgid "pax" msgstr "" -#: includes/constant-data.php:1214 +#: includes/constant-data.php:1234 msgid "" "In order to work, capacity of the service should be greater than 1, set " "either by number of service providers or by manual capacity setting." msgstr "" -#: includes/constant-data.php:1215 +#: includes/constant-data.php:1235 msgid "To activate Group Bookings for a service, click <b>Enable</b> checkbox." msgstr "" -#: includes/constant-data.php:1216 +#: includes/constant-data.php:1236 msgid "" "When minimum value is entered, client cannot apply for less than this " "number. If left empty, minimum selection will be taken as 1." msgstr "" -#: includes/constant-data.php:1217 +#: includes/constant-data.php:1237 msgid "" "When maximum value is entered, client cannot apply for greater than this " "number. If left empty or set higher than capacity of the service, maximum " "selection will be set to capacity value." msgstr "" -#: includes/constant-data.php:1218 +#: includes/constant-data.php:1238 msgid "" "\"Slot closed from pax\" defines number of booked pax/seats after which slot " "will be regarded as busy. If you want to serve a single group, set this " "field equal to minimum selectable." msgstr "" -#: includes/constant-data.php:1219 +#: includes/constant-data.php:1239 msgid "" "While entering minimum and maximum selection values are optional, they can " "be set to the same number, e.g. to sell a fixed number of seats." msgstr "" -#: includes/constant-data.php:1220 +#: includes/constant-data.php:1240 msgid "" "You can select to ask participants' details on the confirmation form by " "<b>participant fields</b> settings." msgstr "" -#: includes/constant-data.php:1221 +#: includes/constant-data.php:1241 msgid "" "Name, email, phone and address of the participants may be selected to be " "filled separately. \"No\" means that field will not be displayed. " @@ -16044,7 +16913,7 @@ "submitted." msgstr "" -#: includes/constant-data.php:1222 +#: includes/constant-data.php:1242 msgid "" "If enabled for the current service, <code>[app_book]</code> will " "automatically add a selection dropdown menu after service selection menu. A " @@ -16052,33 +16921,33 @@ "this menu in case of modular shortcodes." msgstr "" -#: includes/constant-data.php:1223 +#: includes/constant-data.php:1243 msgid "" "When group bookings is enabled for a service, a \"G\" will be seen on top-" "right of service ID in the List of Services." msgstr "" -#: includes/constant-data.php:1224 +#: includes/constant-data.php:1244 msgid "" "When client makes a new pax selection, Booking Views will be automatically " "updated and free slots will be displayed based on the new pax selection and " "actual available space. Price will be calculated as regular price times pax." msgstr "" -#: includes/constant-data.php:1225 +#: includes/constant-data.php:1245 msgid "" "When client checks out, a single booking will be created with the submitted " "pax. This value can be manually changed on admin Bookings page, if required." msgstr "" -#: includes/constant-data.php:1226 +#: includes/constant-data.php:1246 msgid "" "Group Bookings can be used in combination with any other addon. For example " "when used in combination with Shopping Cart, client can select pax for each " "item separately." msgstr "" -#: includes/constant-data.php:1227 +#: includes/constant-data.php:1247 msgid "" "<b>Person Types</b> are optional. When you don't define any person types on " "the front end client selects \"number of guests\". When you define person " @@ -16086,37 +16955,37 @@ "number for each person type." msgstr "" -#: includes/constant-data.php:1228 +#: includes/constant-data.php:1248 msgid "" "Total pax is calculated from submitted person type selection times <b>pax " "value</b>. For example, for a \"Couples\" person type you can set pax value " "as 2." msgstr "" -#: includes/constant-data.php:1229 +#: includes/constant-data.php:1249 msgid "" "Pax value can be zero for person types that do not take space, but to be " "charged to the client, for example \"infants\" or \"pets\"." msgstr "" -#: includes/constant-data.php:1230 +#: includes/constant-data.php:1250 #, php-format msgid "" "Format of person types displayed in confirmation form, dialogs and emails " "can be set at %s." msgstr "" -#: includes/constant-data.php:1241 +#: includes/constant-data.php:1261 msgid "" "You can optionally add as many User Defined Fields (UDF) as you wish. Then " "these UDFs can be used in the confirmation form." msgstr "" -#: includes/constant-data.php:1242 +#: includes/constant-data.php:1262 msgid "As you click \"Add New UDF\" button a new empty row will be inserted." msgstr "" -#: includes/constant-data.php:1243 +#: includes/constant-data.php:1263 msgid "" "<b>ID field:</b> is automatically given by the system and it is unique. You " "can use this ID in other settings to evaluate submitted values. For example, " @@ -16124,14 +16993,14 @@ "with ID=1 submitted by the client." msgstr "" -#: includes/constant-data.php:1244 +#: includes/constant-data.php:1264 msgid "" "<b>Name field:</b> You can use anything as the UDF name here, but it is " "recommended to be unique if you plan to call it in your customization codes " "using the name, instead of ID." msgstr "" -#: includes/constant-data.php:1245 +#: includes/constant-data.php:1265 msgid "" "<b>Type field:</b> Select type of the form field. In addition to standard " "HTML fields (text, text area, pulldown menu, checkbox) the following " @@ -16143,7 +17012,7 @@ "This field is not displayed at the front end in desktop devices." msgstr "" -#: includes/constant-data.php:1246 +#: includes/constant-data.php:1266 msgid "" "<b>Front End field:</b> UDFs marked as Front End will be displayed in the " "confirmation form. Note: If a UDF is specifically selected in an attribute " @@ -16151,26 +17020,26 @@ "visible regardless of this setting." msgstr "" -#: includes/constant-data.php:1247 +#: includes/constant-data.php:1267 msgid "" "<b>Required field:</b> Check the checkbox if you want to set filling of the " "field as mandatory. If a field is set as required and it is visible, client " "will get a warning message if he submits the field empty." msgstr "" -#: includes/constant-data.php:1248 +#: includes/constant-data.php:1268 msgid "" "<b>Editable field:</b> Check the checkbox if you want to allow users edit " "this field value in their profile pages or in Front End Edit popup." msgstr "" -#: includes/constant-data.php:1249 +#: includes/constant-data.php:1269 msgid "" "<b>Register (Registration) field:</b> Requires Marketplace addon. Check the " "checkbox if you want this field to be included in vendor registration form." msgstr "" -#: includes/constant-data.php:1250 +#: includes/constant-data.php:1270 msgid "" "<b>Options field:</b> 1) For text, textarea and phone fields, this is the " "placeholder value. 2) For pulldown menu, values separated by commas will be " @@ -16188,26 +17057,26 @@ "empty html is outputted." msgstr "" -#: includes/constant-data.php:1251 +#: includes/constant-data.php:1271 msgid "" "You can add as many records (fields) as you wish and they will only be saved " "after you hit Save UDF button." msgstr "" -#: includes/constant-data.php:1252 +#: includes/constant-data.php:1272 msgid "" "New inserted field(s) will not be saved unless you fill in the name field " "and click \"Save UDFs\" button (Save button is only visible if there is at " "least one record added)." msgstr "" -#: includes/constant-data.php:1253 +#: includes/constant-data.php:1273 msgid "" "The inserted field will be visible in appointments records and you can edit " "submitted values for each appointment there." msgstr "" -#: includes/constant-data.php:1255 +#: includes/constant-data.php:1275 msgid "" "<b>Sorting:</b> On front end items are displayed according to the order " "here, as default. To make a custom sorting, select the row with your mouse " @@ -16218,13 +17087,13 @@ "fields on the form in the order as they are written: name, udf_3 and udf_1." msgstr "" -#: includes/constant-data.php:1266 +#: includes/constant-data.php:1286 msgid "" "Selectable Durations allow your clients pick desired duration of service on " "the front end by a pull down menu." msgstr "" -#: includes/constant-data.php:1267 +#: includes/constant-data.php:1287 #, php-format msgid "" "This menu is automatically displayed by <code>[app_book]</code>. If you are " @@ -16234,11 +17103,11 @@ "shortcodes see %s." msgstr "" -#: includes/constant-data.php:1267 +#: includes/constant-data.php:1287 msgid "related help page" msgstr "" -#: includes/constant-data.php:1268 +#: includes/constant-data.php:1288 #, php-format msgid "" "You can limit which durations are selectable on the front end using the " @@ -16249,7 +17118,7 @@ "base." msgstr "" -#: includes/constant-data.php:1269 +#: includes/constant-data.php:1289 msgid "" "To activate the selectable durations feature for a particular service, check " "the \"Enable\" checkbox and select at least 2 durations. It is allowed, but " @@ -16258,14 +17127,14 @@ "this value may be confusing." msgstr "" -#: includes/constant-data.php:1270 +#: includes/constant-data.php:1290 msgid "" "If you want service price to be fixed at regular price regardless of " "selected duration, select \"Calculate price from\" field as \"Unit price\" " "and leave \"Unit price\" field as empty." msgstr "" -#: includes/constant-data.php:1271 +#: includes/constant-data.php:1291 msgid "" "If you want to apply service price based on duration selection, you have two " "options with \"Calculate price from\" setting: a) \"Unit price\" selection " @@ -16274,37 +17143,37 @@ "each individual duration." msgstr "" -#: includes/constant-data.php:1272 +#: includes/constant-data.php:1292 msgid "" "If you set a unit price, regular price of the service will also be matched " "to this value. For example, for a 30 minutes service if you enter $100 as " "unit price, regular price will be automatically set to $50." msgstr "" -#: includes/constant-data.php:1273 +#: includes/constant-data.php:1293 msgid "Unit price is also effective for Time Variant durations." msgstr "" -#: includes/constant-data.php:1274 +#: includes/constant-data.php:1294 msgid "" "If both Selectable Durations and Time Variant Durations are enabled, for " "overlapping time slots the latter one has priority." msgstr "" -#: includes/constant-data.php:1275 +#: includes/constant-data.php:1295 msgid "" "Selectable Durations and Recurring Appointments can be used in combination. " "For example, client can select 1, 2 or 4 hours of a service recurring every " "week for 1 to 8 weeks." msgstr "" -#: includes/constant-data.php:1276 includes/constant-data.php:1413 +#: includes/constant-data.php:1296 includes/constant-data.php:1433 msgid "" "Selectable duration is not possible for bundles. If Service Bundles is " "active, durations cannot be selected on the front end." msgstr "" -#: includes/constant-data.php:1287 +#: includes/constant-data.php:1307 msgid "" "Time and SP Variant Durations allow you preset different service durations " "for different week days and times. For example you can set a service to last " @@ -16312,27 +17181,27 @@ "afternoons." msgstr "" -#: includes/constant-data.php:1288 +#: includes/constant-data.php:1308 msgid "" "It is also possible to set different durations for different service " "providers, for example if a particular service provider is slower than the " "others." msgstr "" -#: includes/constant-data.php:1289 +#: includes/constant-data.php:1309 msgid "" "The regular duration of the service is overridden if a row of settings " "(called a \"rule\") matches with the selected service provider and date/time." msgstr "" -#: includes/constant-data.php:1290 +#: includes/constant-data.php:1310 msgid "" "To activate the selectable durations feature for a particular service, check " "the \"Enable\" checkbox and add at least one rule by clicking \"Add Rule\" " "button." msgstr "" -#: includes/constant-data.php:1291 +#: includes/constant-data.php:1311 msgid "" "In the inserted new row, select the desired new duration, service provider, " "week day and time for which rule will be effective. Selected from/to values " @@ -16341,26 +17210,26 @@ "of the slot." msgstr "" -#: includes/constant-data.php:1292 +#: includes/constant-data.php:1312 msgid "" "If you have the same rule for multiple days of the week, simply add a rule " "for each day." msgstr "" -#: includes/constant-data.php:1293 +#: includes/constant-data.php:1313 msgid "" "In case there are more than one matching rules, you can select the rule to " "be applied: First match, last match, min duration, max duration and regular " "duration." msgstr "" -#: includes/constant-data.php:1294 +#: includes/constant-data.php:1314 msgid "" "You can custom sort the rules by selecting the rule row with mouse and move " "it to the selected position." msgstr "" -#: includes/constant-data.php:1295 +#: includes/constant-data.php:1315 msgid "" "If you want to apply service price based on duration of the service, fill in " "the Unit Price field in Selectable Durations part. If you leave this field " @@ -16368,13 +17237,13 @@ "selected duration." msgstr "" -#: includes/constant-data.php:1296 +#: includes/constant-data.php:1316 msgid "" "If both Selectable Durations and Time Variant Durations are enabled, the " "latter one has priority provided that at least a rule matches." msgstr "" -#: includes/constant-data.php:1297 includes/constant-data.php:1316 +#: includes/constant-data.php:1317 includes/constant-data.php:1336 msgid "" "Time & SP Variant Durations and Recurring Appointments can be used in " "combination. For example if a 2 hours training is set to be 4 hours at the " @@ -16383,7 +17252,7 @@ "from unit price." msgstr "" -#: includes/constant-data.php:1298 +#: includes/constant-data.php:1318 msgid "" "Time & SP Variant Durations selection is not meaningful for a package, " "because the duration of a package is determined by its jobs. You can use " @@ -16396,21 +17265,21 @@ "minutes, not 120." msgstr "" -#: includes/constant-data.php:1309 +#: includes/constant-data.php:1329 msgid "" "Recurring Appointments addon allows your clients pick number of repeats of " "service on the front end by two pull down menus (Number of repeats and " "recurrence frequency)." msgstr "" -#: includes/constant-data.php:1310 +#: includes/constant-data.php:1330 msgid "" "You can select which recurrence frequencies (called repeat units), are " "available to the client on the front end e.g. daily, weekly, monthly. To do " "so, select desired repeat units by checking <b>Allow</b> checkbox." msgstr "" -#: includes/constant-data.php:1311 +#: includes/constant-data.php:1331 #, php-format msgid "" "You can also select maximum number of repeats for each repeat unit by " @@ -16420,7 +17289,7 @@ "8." msgstr "" -#: includes/constant-data.php:1312 +#: includes/constant-data.php:1332 msgid "" "There are 4 monthly modes each having different behaviour. <u>Choose only " "one of them</u>. When client attempts to pick 31st of January (2025) for 4 " @@ -16438,14 +17307,14 @@ "the other way around." msgstr "" -#: includes/constant-data.php:1313 +#: includes/constant-data.php:1333 msgid "" "To activate recurring feature of a service, <b>Enabled</b> checkbox should " "be checked and at least one repeat unit should be marked as \"Allow\". Max " "fields can be left empty." msgstr "" -#: includes/constant-data.php:1314 +#: includes/constant-data.php:1334 msgid "" "One of the cool features of the addon is customizing front end selection " "menu using <b>View of the menu</b> field. REPEAT_UNIT and REPEAT " @@ -16459,20 +17328,20 @@ "there is only one allowed repeat unit." msgstr "" -#: includes/constant-data.php:1315 +#: includes/constant-data.php:1335 msgid "" "When a service is enabled and correctly configured as recurring, a \"R\" " "will be seen on top-right of service ID in the List of Services." msgstr "" -#: includes/constant-data.php:1317 +#: includes/constant-data.php:1337 msgid "" "Recurring Appointments and Selectable Durations can be used in combination. " "For example, client can select 1, 2 or 4 hours of a service recurring every " "week for 1 to 8 weeks (numbers are arbitrary)." msgstr "" -#: includes/constant-data.php:1318 +#: includes/constant-data.php:1338 msgid "" "Recurring Appointments and Service Bundles can be used in combination. For " "an example see Service Bundles addon. Please note that both addons require " @@ -16486,28 +17355,28 @@ "consider using \"Book Now Single Button\" instead of calendar view." msgstr "" -#: includes/constant-data.php:1319 +#: includes/constant-data.php:1339 msgid "" "You may consider using Shopping Cart in combination with Recurring " "Appointments. Then your client can remove unsuitable time slots on the " "confirmation form and add preferred ones." msgstr "" -#: includes/constant-data.php:1330 +#: includes/constant-data.php:1350 msgid "" "Extended Service Features addon extends existing functionality and adds new " "ones to services. As a part of it, in Limits area you can \"fine tune\" " "settings for various limits per service." msgstr "" -#: includes/constant-data.php:1331 +#: includes/constant-data.php:1351 msgid "" "Limits for booking, cancelling and editing are already available globally, " "which means there is only one setting for each limit which is valid for all " "services." msgstr "" -#: includes/constant-data.php:1332 +#: includes/constant-data.php:1352 msgid "" "Settings here, however, allow to define every one of them individually and " "more precisely (in minutes instead of hours) for each service. If you leave " @@ -16516,13 +17385,13 @@ "setting with zero for that service." msgstr "" -#: includes/constant-data.php:1333 +#: includes/constant-data.php:1353 msgid "" "These settings also allow you to set different limits for weekday (Monday to " "Friday), weekends (Saturday and Sunday) and for definable special days." msgstr "" -#: includes/constant-data.php:1334 +#: includes/constant-data.php:1354 msgid "" "For Lower Limit, Editing Limit and Cancellation Limit, the day here " "corresponds to the day that that appointment starts. In case of Upper Limit, " @@ -16532,7 +17401,7 @@ "to close booking *on* (not *for*) certain dates." msgstr "" -#: includes/constant-data.php:1335 +#: includes/constant-data.php:1355 msgid "" "Special Days can be defined in its tab by clicking \"Special Days\" link in " "the settings or by directly clicking the tab. Simply select your special " @@ -16540,52 +17409,52 @@ "following years." msgstr "" -#: includes/constant-data.php:1336 +#: includes/constant-data.php:1356 msgid "" "Special Days are used in common with Quotas addon. Special days defined here " "are valid for both addons." msgstr "" -#: includes/constant-data.php:1337 +#: includes/constant-data.php:1357 msgid "" "<b>Lower limit</b> (also called lead time) is the minimum time between start " "of the appointment and submission time to book for it." msgstr "" -#: includes/constant-data.php:1338 +#: includes/constant-data.php:1358 msgid "" "<b>Upper limit</b> is the number of days that a client can apply for an " "appointment in advance, counted from submission date." msgstr "" -#: includes/constant-data.php:1339 +#: includes/constant-data.php:1359 msgid "" "<b>Editing limit</b> is used in conjunction with Front End Edit addon and it " "is the minimum time between start of the appointment and start and finish " "editing." msgstr "" -#: includes/constant-data.php:1340 +#: includes/constant-data.php:1360 msgid "" "<b>Cancellation limit</b> is the minimum time between start of the " "appointment and attempt to cancel a booking." msgstr "" -#: includes/constant-data.php:1351 +#: includes/constant-data.php:1371 msgid "" "<b>Service Properties</b> tab displays service creation data, owner (author) " "and allows admin to set service description and image to be displayed in " "Service Selection Slider or Service Selection Menu tooltips." msgstr "" -#: includes/constant-data.php:1352 +#: includes/constant-data.php:1372 msgid "" "<b>Owner</b> determines the provider who can edit and delete the service. " "When provider creates a service, he/she is automatically added here. Then " "admin can change/remove the provider or add new ones." msgstr "" -#: includes/constant-data.php:1354 +#: includes/constant-data.php:1374 msgid "" "<b>Description and Featured Image</b> are used when no Connected Post is " "defined. If there is a Connected Post, then description is taken from post " @@ -16594,12 +17463,12 @@ "specifically selected for." msgstr "" -#: includes/constant-data.php:1355 +#: includes/constant-data.php:1375 #, php-format msgid "Admin can hide this tab by setting %s as No, so providers cannot edit." msgstr "" -#: includes/constant-data.php:1366 +#: includes/constant-data.php:1386 msgid "" "Quotas addon allows you to limit number of bookings of logged-in clients for " "each service for certain time intervals, namely for weekdays (Monday to " @@ -16608,7 +17477,7 @@ "bookings of the clients in those intervals." msgstr "" -#: includes/constant-data.php:1367 +#: includes/constant-data.php:1387 msgid "" "To activate Quotas, simply enter quotas (number of bookings limit) in the " "related fields of the service which are visible when you click the \"More\" " @@ -16616,7 +17485,7 @@ "limitation for that interval." msgstr "" -#: includes/constant-data.php:1368 +#: includes/constant-data.php:1388 msgid "" "While checking if quotas are full or not, previous bookings are queried for " "appointment start times, but not for the submission date/times. Quotas addon " @@ -16624,7 +17493,7 @@ "appointments." msgstr "" -#: includes/constant-data.php:1369 +#: includes/constant-data.php:1389 msgid "" "Each interval is evaluated separately and none of the quotas must be reached " "or exceeded to make that time interval available to the client. For example, " @@ -16636,7 +17505,7 @@ "also be blocked although there is no special quota setting for weekends)." msgstr "" -#: includes/constant-data.php:1370 +#: includes/constant-data.php:1390 msgid "" "Special Days can be defined in its tab by clicking the \"Special Days\" link " "in the settings or by directly clicking the tab. Simply select your special " @@ -16646,13 +17515,13 @@ "client books for 14th of February, he can still book for 31st of December." msgstr "" -#: includes/constant-data.php:1371 +#: includes/constant-data.php:1391 msgid "" "Special Days are used in common with Extended Service Features addon. " "Special days defined here are applied to both addons." msgstr "" -#: includes/constant-data.php:1372 +#: includes/constant-data.php:1392 msgid "" "Except for Total Upcoming case, booking statuses used in quota evaluation " "are \"upcoming\" (pending, paid, confirmed), \"running now\" and " @@ -16665,7 +17534,7 @@ "way, and so on." msgstr "" -#: includes/constant-data.php:1373 +#: includes/constant-data.php:1393 msgid "" "Total Upcoming setting defines the limit for total number of upcoming " "(pending, paid, confirmed), in other words, open bookings. This can be " @@ -16673,27 +17542,27 @@ "time, say 1 year." msgstr "" -#: includes/constant-data.php:1374 +#: includes/constant-data.php:1394 msgid "" "To modify booking statuses used in quotas and thus changing the above " "explained bahaviour, two different filter hooks are also provided." msgstr "" -#: includes/constant-data.php:1375 +#: includes/constant-data.php:1395 #, php-format msgid "" "Note that quotas only work for logged in clients. Therefore you may want to " "set logging in mandatory by adjusting %s as Yes." msgstr "" -#: includes/constant-data.php:1376 +#: includes/constant-data.php:1396 msgid "" "As the main idea of quotas is managing limited resources, in this case which " "is services and service providers whose working hours are saved based on " "server timezone, client timezone is not taken into account." msgstr "" -#: includes/constant-data.php:1387 +#: includes/constant-data.php:1407 msgid "" "Service Bundles (formerly Packages) Addon allows you to combine <b>two or " "more services</b> (each of them is called a <b>job</b>) and sell them as if " @@ -16701,14 +17570,14 @@ "cut and manicure services." msgstr "" -#: includes/constant-data.php:1388 +#: includes/constant-data.php:1408 msgid "" "Jobs can start at the same time, can be back-to-back or separated with " "preselected time in minutes or days. To do so, a <b>delay</b> setting is " "provided for each job that will be used to wait for the next job to start." msgstr "" -#: includes/constant-data.php:1389 +#: includes/constant-data.php:1409 msgid "" "<b>Delay</b> value is calculated from starting of the current job. Therefore " "in a package \"hair cut - 60 minutes delay - manicure\" where both services " @@ -16716,21 +17585,21 @@ "back." msgstr "" -#: includes/constant-data.php:1390 +#: includes/constant-data.php:1410 msgid "" "Entering zero delay means current and next job will be served at the same " "time. Hair cut - no delay - manicure will result in two services being " "booked for the same time slot." msgstr "" -#: includes/constant-data.php:1391 +#: includes/constant-data.php:1411 #, php-format msgid "" "If in minutes, delay time should be multiple of the %s. If it is not set so, " "it will be automatically rounded during save." msgstr "" -#: includes/constant-data.php:1392 +#: includes/constant-data.php:1412 msgid "" "You may want to use <b>internal</b> services in bundles. An internal service " "is a service which cannot be directly booked on the front end. For example, " @@ -16739,7 +17608,7 @@ "be set as internal." msgstr "" -#: includes/constant-data.php:1393 +#: includes/constant-data.php:1413 msgid "" "<b>Delay</b> setting in bundles allows micro-managing working hours. In hair " "dying example in between dying and dye processing there is a one hour " @@ -16748,7 +17617,7 @@ "minutes gap, service provider is available for another client." msgstr "" -#: includes/constant-data.php:1394 +#: includes/constant-data.php:1414 msgid "" "Some or all of the jobs can be the same service. For example for a training " "course (T) and 1 day delay (1DD), you can define such a package (TP/1W): " @@ -16757,14 +17626,14 @@ "booking for only Mondays is possible." msgstr "" -#: includes/constant-data.php:1395 +#: includes/constant-data.php:1415 msgid "" "Other bundles can be selected as jobs. For example we can create a 2 weeks " "training course from the above example: TP/2W = TP/1W-7DD-TP/1W. This may be " "further used for a 4 weeks package: TP/4W = TP/2W-14DD-TP/2W" msgstr "" -#: includes/constant-data.php:1396 +#: includes/constant-data.php:1416 msgid "" "Service Bundles as jobs have a default maximum nesting depth of 2. This " "means Package 1 may include Package 2 as a job including Package 3 as a job, " @@ -16773,7 +17642,7 @@ "cannot include 1 or 2. Obviously, a package cannot include itself as a job." msgstr "" -#: includes/constant-data.php:1397 +#: includes/constant-data.php:1417 msgid "" "<b>Sequence</b> is the order of the jobs. In the first example, WP BASE will " "search for availability of first hair cut and then manicure, but we may " @@ -16781,7 +17650,7 @@ "as a second sequence: Manicure - 60 minutes delay - hair cut." msgstr "" -#: includes/constant-data.php:1398 +#: includes/constant-data.php:1418 msgid "" "For each possible and desired combination of the order of jobs, you need to " "define a sequence. In theory you can add as many sequences as you wish, " @@ -16790,13 +17659,13 @@ "jobs are served at the same time." msgstr "" -#: includes/constant-data.php:1399 +#: includes/constant-data.php:1419 msgid "" "In hair dying example we would not want another sequence, because dye " "processing cannot be earlier than dying." msgstr "" -#: includes/constant-data.php:1400 +#: includes/constant-data.php:1420 msgid "" "The order of sequences may be important. During creating free time slots on " "the front end, WP BASE will start checking availability of the first " @@ -16806,27 +17675,27 @@ "below." msgstr "" -#: includes/constant-data.php:1401 +#: includes/constant-data.php:1421 msgid "" "First of all create your services that will make the package (which will be " "jobs of the package), because only saved services can be selected when " "configuring a package." msgstr "" -#: includes/constant-data.php:1402 +#: includes/constant-data.php:1422 msgid "" "Then you should add a sequence: A package must have at least one sequence. " "To create a sequence, click \"Add Sequence\" button. A new row with \"Add " "Job\" button will be inserted." msgstr "" -#: includes/constant-data.php:1403 +#: includes/constant-data.php:1423 msgid "" "Click \"Add Job\" button to add a new job to the sequence. Select the " "service and desired delay for the job." msgstr "" -#: includes/constant-data.php:1404 +#: includes/constant-data.php:1424 msgid "" "Continue adding jobs and setting them as much as required. At least two jobs " "are required per sequence. Tip: Recently added job copies adjustments of the " @@ -16835,47 +17704,47 @@ "the package quite easy." msgstr "" -#: includes/constant-data.php:1405 +#: includes/constant-data.php:1425 msgid "Continue adding sequences and jobs for them as long as required." msgstr "" -#: includes/constant-data.php:1406 +#: includes/constant-data.php:1426 msgid "You can set bundles for other services in the same manner in parallel." msgstr "" -#: includes/constant-data.php:1407 +#: includes/constant-data.php:1427 msgid "To activate the service bundles feature, check the \"Enable\" checkbox." msgstr "" -#: includes/constant-data.php:1408 +#: includes/constant-data.php:1428 msgid "Click \"Save Services\" button." msgstr "" -#: includes/constant-data.php:1409 +#: includes/constant-data.php:1429 msgid "" "To make a custom sorting (moving a sequence to an upper or lower position), " "select the sequence row with your mouse and move it to the new position." msgstr "" -#: includes/constant-data.php:1410 +#: includes/constant-data.php:1430 msgid "" "You can delete a job by selecting \"Delete job\" selection (or leave as " "\"Select Service\" before save) and saving services." msgstr "" -#: includes/constant-data.php:1411 +#: includes/constant-data.php:1431 msgid "" "A sequence is automatically cleared when there are no jobs or one job left, " "because at least 2 jobs are required to make a package." msgstr "" -#: includes/constant-data.php:1412 +#: includes/constant-data.php:1432 msgid "" "When a service is enabled and correctly configured as a package, a \"P\" " "will be seen on top-right of service ID in the List of Services." msgstr "" -#: includes/constant-data.php:1414 +#: includes/constant-data.php:1434 msgid "" "Time & SP Variant Durations selection is not meaningful for a package, " "because the duration of a package is determined by its jobs. You can use " @@ -16883,7 +17752,7 @@ "package, however." msgstr "" -#: includes/constant-data.php:1415 +#: includes/constant-data.php:1435 msgid "" "Service Bundles and Recurring Appointments can be used in combination. For " "the 5 days training package example, you can let the client pick week as " @@ -16891,11 +17760,11 @@ "Regular price will be number of repeats multiplied by package price." msgstr "" -#: includes/constant-data.php:1416 +#: includes/constant-data.php:1436 msgid "Service Bundles cannot be edited using Front End Edit." msgstr "" -#: includes/constant-data.php:1417 +#: includes/constant-data.php:1437 msgid "" "Other application examples: Service Bundles is a powerful tool that can be " "used in various applications for which other similar plugins will fail to " @@ -16907,7 +17776,7 @@ "there is only 2 workers available, but assign 3 if possible." msgstr "" -#: includes/constant-data.php:1418 +#: includes/constant-data.php:1438 msgid "" "Another real life example: Sometimes dentists call another expert dentist " "for delicate operations. Service Bundles addon can manage such an " @@ -16920,7 +17789,7 @@ "he wishes." msgstr "" -#: includes/constant-data.php:1419 +#: includes/constant-data.php:1439 msgid "" "Services longer than 24 hours: You can combine jobs of the same service to " "create a package lasting more than 24 hours. For example, by adding 3 jobs " @@ -16929,13 +17798,13 @@ "from a single 36 hours service, depending on the Booking View used." msgstr "" -#: includes/constant-data.php:1420 +#: includes/constant-data.php:1440 msgid "" "Service Bundles do not have their own working hours, holidays, capacity and " "padding settings." msgstr "" -#: includes/constant-data.php:1421 +#: includes/constant-data.php:1441 msgid "" "While real duration of a package comes from its jobs and delays, you can " "still set <b>duration</b> for a package which determines its availability " @@ -16944,51 +17813,51 @@ "can set 12 hours." msgstr "" -#: includes/constant-data.php:1432 +#: includes/constant-data.php:1452 msgid "" "Waiting List allows you to define an additional capacity for your services " "for which clients can apply when desired time slot is fully booked." msgstr "" -#: includes/constant-data.php:1433 +#: includes/constant-data.php:1453 msgid "" "To activate the waiting list feature for a particular service, check the " "\"Enable\" checkbox and enter a capacity greater than zero." msgstr "" -#: includes/constant-data.php:1434 +#: includes/constant-data.php:1454 msgid "" "When client selects a time slot with waiting list and checkouts, it will be " "saved as a regular booking except its status being \"waiting\"." msgstr "" -#: includes/constant-data.php:1435 +#: includes/constant-data.php:1455 msgid "" "When there is an opening in the selected slot, clients in the waiting list " "will get a notification email." msgstr "" -#: includes/constant-data.php:1436 +#: includes/constant-data.php:1456 msgid "" "If they choose to respond the link in this email and selected time slot is " "still free their booking will be automatically confirmed. It is possible to " "pay from digital wallet using Digital Wallet addon." msgstr "" -#: includes/constant-data.php:1447 +#: includes/constant-data.php:1467 msgid "" "With <b>WooCommerce Integration</b> Addon, you can sell your services as " "WooCommerce (WC) products with other WP BASE services or WC physical/digital " "products using cart and payment gateways provided by WC." msgstr "" -#: includes/constant-data.php:1448 includes/constant-data.php:1465 +#: includes/constant-data.php:1468 includes/constant-data.php:1485 msgid "" "To do so, first set \"Enable Integration\" as Yes and create a product page " "by clicking the \"Create a Booking Page\" button." msgstr "" -#: includes/constant-data.php:1449 +#: includes/constant-data.php:1469 msgid "" "WP BASE adds <code>[app_book]</code> shortcode to the page and makes " "required product settings. Your services will be regarded as WC products and " @@ -16996,7 +17865,7 @@ "selections as on a regular Make a Booking page" msgstr "" -#: includes/constant-data.php:1450 +#: includes/constant-data.php:1470 msgid "" "Instead of selling all services on a single product page, if you want to " "sell a single service on an existing product page, add <code>[app_book]</" @@ -17005,7 +17874,7 @@ "related service. Repeat this for all product/service pairs." msgstr "" -#: includes/constant-data.php:1451 +#: includes/constant-data.php:1471 msgid "" "If you want to sell a group of services on an existing product page, collect " "them in a category or categories (e.g. 1, 3 ), add <code>[app_book " @@ -17014,19 +17883,19 @@ "this example, not WooCommerce product category." msgstr "" -#: includes/constant-data.php:1452 +#: includes/constant-data.php:1472 msgid "" "WP BASE will set the product as \"variable\" and make necessary adjustments " "automatically on the product settings." msgstr "" -#: includes/constant-data.php:1453 +#: includes/constant-data.php:1473 msgid "" "If a booking with \"In Cart\" status expire, client will see \"session " "expired\" message of WC and will not be allowed to proceed for payment." msgstr "" -#: includes/constant-data.php:1464 +#: includes/constant-data.php:1484 msgid "" "With <b>Easy Digital Downloads Integration</b> Addon, you can sell your " "services as Easy Digital Downloads (EDD) products with other WP BASE " @@ -17034,14 +17903,14 @@ "provided by EDD." msgstr "" -#: includes/constant-data.php:1466 +#: includes/constant-data.php:1486 msgid "" "That is it! Now your services will be regarded as EDD products and your " "clients can add them to their shopping carts, making exactly the same " "selections as on a regular Make a Booking page" msgstr "" -#: includes/constant-data.php:1467 +#: includes/constant-data.php:1487 #, php-format msgid "" "You can have as many such EDD booking pages as you wish and then select them " @@ -17049,130 +17918,130 @@ "service=1]</code> and on that page only Service 1 will be sold." msgstr "" -#: includes/constant-data.php:1467 +#: includes/constant-data.php:1487 msgid "Downloads Page" msgstr "" -#: includes/constant-data.php:1468 +#: includes/constant-data.php:1488 msgid "" "You can delete an EDD page without affecting existing bookings, except for " "those who are already in EDD cart." msgstr "" -#: includes/constant-data.php:1469 +#: includes/constant-data.php:1489 msgid "" "If a booking with \"In Cart\" status expire, client will see \"session " "expired\" message of EDD and will not be allowed to proceed for payment." msgstr "" -#: includes/constant-data.php:1480 +#: includes/constant-data.php:1500 msgid "" "You can integrate your Zoom account with the booking system, so that a Zoom " "audio/video meeting will be created at the time of the booking." msgstr "" -#: includes/constant-data.php:1481 +#: includes/constant-data.php:1501 msgid "" "[Only for admin] You can insert meeting variables into emails using these " "placeholders: ZOOM_ID, ZOOM_HOST, ZOOM_PASSWORD, ZOOM_JOIN, ZOOM_TOPIC, " "ZOOM_AGENDA." msgstr "" -#: includes/constant-data.php:1482 +#: includes/constant-data.php:1502 msgid "" "[Only for admin] In order to start using Zoom meeting, set <b>Enable " "Integration</b> as \"Yes\"." msgstr "" -#: includes/constant-data.php:1483 +#: includes/constant-data.php:1503 msgid "" "[Only for admin] Select \"Zoom Account Type\" setting depending on whether " "you have providers and whether they will use own accounts." msgstr "" -#: includes/constant-data.php:1484 +#: includes/constant-data.php:1504 #, php-format msgid "Create an account in %s if you don't have already." msgstr "" -#: includes/constant-data.php:1484 +#: includes/constant-data.php:1504 msgid "Zoom Website" msgstr "" -#: includes/constant-data.php:1485 +#: includes/constant-data.php:1505 #, php-format msgid "After you log in to your Zoom account visit %s." msgstr "" -#: includes/constant-data.php:1485 +#: includes/constant-data.php:1505 msgid "Zoom App Marketplace" msgstr "" -#: includes/constant-data.php:1486 +#: includes/constant-data.php:1506 msgid "Click <b>Create</b> button under <b>Server-to-Server OAuth</b> box." msgstr "" -#: includes/constant-data.php:1487 +#: includes/constant-data.php:1507 msgid "" "Give any name to App Name in the opening window, e.g. WP BASE. Fill in the " "required fields in the proceeding form." msgstr "" -#: includes/constant-data.php:1488 +#: includes/constant-data.php:1508 msgid "Click <b>API Credentials</b> link." msgstr "" -#: includes/constant-data.php:1489 +#: includes/constant-data.php:1509 msgid "" "Copy <b>Account ID</b>, <b>Client ID</b> and <b>Client Secret</b> values to " "the related fields on this page." msgstr "" -#: includes/constant-data.php:1490 +#: includes/constant-data.php:1510 msgid "Fill in the fields on <b>Information</b> area." msgstr "" -#: includes/constant-data.php:1491 +#: includes/constant-data.php:1511 msgid "" "In <b>Scopes</b> area, select all options under <b>Meeting</b> and <b>User</" "b>." msgstr "" -#: includes/constant-data.php:1492 +#: includes/constant-data.php:1512 msgid "Complete configuration on Zoom website in <b>Activation</b> area." msgstr "" -#: includes/constant-data.php:1493 +#: includes/constant-data.php:1513 msgid "Click <b>Save Settings</b> on WP BASE side." msgstr "" -#: includes/constant-data.php:1494 +#: includes/constant-data.php:1514 msgid "Click <b>Test Connection</b> button." msgstr "" -#: includes/constant-data.php:1495 +#: includes/constant-data.php:1515 msgid "If you receive an error message, double check API credentials." msgstr "" -#: includes/constant-data.php:1496 +#: includes/constant-data.php:1516 msgid "" "When you receive success message, select <b>Zoom Host</b> from the pulldown " "menu. Depending on your Zoom account type, there can be one or more users in " "the list." msgstr "" -#: includes/constant-data.php:1497 +#: includes/constant-data.php:1517 msgid "" "After clicking <b>Save Settings</b> button, Zoom Integration is complete." msgstr "" -#: includes/constant-data.php:1498 +#: includes/constant-data.php:1518 msgid "" "Clients can join to a meeting using <b>Join</b> button on their account " "page, or link in emails which will be created with ZOOM_JOIN placeholder." msgstr "" -#: includes/constant-data.php:1499 +#: includes/constant-data.php:1519 msgid "" "Providers can start a meeting using <b>Start</b> button on their account " "page, in Bookings tab. Admin can also start a meeting from admin side " @@ -17182,26 +18051,26 @@ "by Zoom, for security reasons." msgstr "" -#: includes/constant-data.php:1510 +#: includes/constant-data.php:1530 msgid "" "You can integrate your Agora account with WP BASE, so that an Agora video " "meeting will be created at the time of the booking." msgstr "" -#: includes/constant-data.php:1521 +#: includes/constant-data.php:1541 msgid "" "You can integrate your Jitsi account with WP BASE, so that a Jitsi audio/" "video meeting will be created at the time of the booking." msgstr "" -#: includes/constant-data.php:1534 +#: includes/constant-data.php:1554 msgid "" "Creates a complete booking interface with service and date/time selection " "and confirmation, login forms and previous/next buttons. This shortcode is " "by itself sufficent to create a functional booking page." msgstr "" -#: includes/constant-data.php:1536 +#: includes/constant-data.php:1556 msgid "" "Calendar or Table title for non-mobile devices. Placeholders \"START_END\"," "\"START\", \"END\", \"LOCATION\", \"WORKER\", \"SERVICE\" will be " @@ -17209,49 +18078,49 @@ "value depends on the view type." msgstr "" -#: includes/constant-data.php:1537 +#: includes/constant-data.php:1557 msgid "Calendar or Table title for mobile devices. See \"title\" for details." msgstr "" -#: includes/constant-data.php:1538 +#: includes/constant-data.php:1558 msgid "" "Only with Locations Addon. Text above the location selection dropdown menu. " "Enter 0 for no title. Default: \"Location\"" msgstr "" -#: includes/constant-data.php:1539 +#: includes/constant-data.php:1559 msgid "" "Text above the service selection dropdown menu. Enter 0 for no title. " "Default: \"Service\"" msgstr "" -#: includes/constant-data.php:1540 +#: includes/constant-data.php:1560 msgid "" "Only with Service Providers Addon. Text above the provider selection " "dropdown menu. Enter 0 for no title. Default: \"Specialist\"" msgstr "" -#: includes/constant-data.php:1541 +#: includes/constant-data.php:1561 msgid "" "Only with Variable Durations Addon. Text above the duration selection " "dropdown menu. Enter 0 for no title. Default: \"Select duration\"" msgstr "" -#: includes/constant-data.php:1542 +#: includes/constant-data.php:1562 msgid "" "Only with Locations Addon. You can enter Location ID or name if you want " "location preselected and fixed. Note: Location name query is case " "insensitive. Default: \"0\" (Location is selected by dropdown)." msgstr "" -#: includes/constant-data.php:1543 +#: includes/constant-data.php:1563 msgid "" "You can optionally enter service ID or name if you want service preselected " "and fixed. Note: Service name query is case insensitive. Multiple service " "selection is not allowed. Default: \"0\" (Service is selected by dropdown)." msgstr "" -#: includes/constant-data.php:1544 +#: includes/constant-data.php:1564 msgid "" "Only with Extended Service Features & Categories Addon. You can enter " "category ID if you want to limit services selectable from a particular " @@ -17260,14 +18129,14 @@ "selectable)." msgstr "" -#: includes/constant-data.php:1545 +#: includes/constant-data.php:1565 msgid "" "Only with Service Providers Addon. You can enter provider ID if you want " "service provider preselected and fixed. Default: \"0\" (Service provider is " "selected by dropdown)." msgstr "" -#: includes/constant-data.php:1546 +#: includes/constant-data.php:1566 msgid "" "Defines in which order menu items (e.g services) are displayed. Possible " "values: ID, name, sort_order. Optionally DESC (descending) can be used, e.g. " @@ -17275,7 +18144,7 @@ "see on the admin side)" msgstr "" -#: includes/constant-data.php:1547 +#: includes/constant-data.php:1567 msgid "" "Type of Booking View when client is connected with a non-mobile device: flex " "(with Advanced Features Addon only), table, weekly, monthly. \"flex\" " @@ -17284,7 +18153,7 @@ "respectively. Default: \"monthly\"" msgstr "" -#: includes/constant-data.php:1548 +#: includes/constant-data.php:1568 msgid "" "Type of Booking View when client is connected with a mobile device: flex " "(with Advanced Features Addon only), table, weekly, monthly. \"flex\" " @@ -17294,7 +18163,7 @@ "Mode 6 (if Advanced Features activated)\"" msgstr "" -#: includes/constant-data.php:1549 +#: includes/constant-data.php:1569 msgid "" "Design of the booking view. Selectable values: auto, compact, legacy. When " "\"compact\" is selected, next/previous button placed on top of the calendar " @@ -17302,20 +18171,20 @@ "Default: \"auto\"" msgstr "" -#: includes/constant-data.php:1550 +#: includes/constant-data.php:1570 msgid "" "Whether to use Flex Steps. Selectable values: auto, 0, 1. \"auto\" takes the " "value from Display Settings. 0 disables, 1 enables flex steps. Default: " "\"auto\"" msgstr "" -#: includes/constant-data.php:1551 +#: includes/constant-data.php:1571 msgid "" "Use slider for service selection. Selectable values: auto, 1, 0. When " "\"auto\" is selected Global setting will be used. Default: \"auto\"" msgstr "" -#: includes/constant-data.php:1552 +#: includes/constant-data.php:1572 msgid "" "Only if design is \"compact\". Caption of the calendar. Placeholders " "\"START_END\",\"START\", \"END\", \"LOCATION\", \"WORKER\", \"SERVICE\" will " @@ -17323,7 +18192,7 @@ "type, typically \"START\"" msgstr "" -#: includes/constant-data.php:1553 +#: includes/constant-data.php:1573 msgid "" "Only if type is \"table\". Columns to be displayed. The sequence of the " "columns in the parameter also defines order of the columns. Permitted values " @@ -17333,7 +18202,7 @@ "time, use server_date_time. Default: \"date,day,time,button\" (short)" msgstr "" -#: includes/constant-data.php:1554 +#: includes/constant-data.php:1574 msgid "" "Only if type is \"table\". Columns to be displayed when user is connected " "with a mobile device. The sequence of the columns in the parameter also " @@ -17341,7 +18210,7 @@ "Default: \"date_time,button\"" msgstr "" -#: includes/constant-data.php:1555 +#: includes/constant-data.php:1575 #, php-format msgid "" "Only if type is \"flex\". Flex View supports different display modes from 1 " @@ -17349,13 +18218,13 @@ "Default: \"1\"" msgstr "" -#: includes/constant-data.php:1556 +#: includes/constant-data.php:1576 msgid "" "Only if type is \"flex\". Flex View mode when client is connected with a " "mobile device. For description see \"mode\" parameter. Default: \"6\"" msgstr "" -#: includes/constant-data.php:1557 +#: includes/constant-data.php:1577 msgid "" "Only if type is \"weekly\" or \"monthly\". Controls what type of time slots " "will be displayed. Selectable values:\"with_break\", \"minimum\", \"auto\". " @@ -17365,7 +18234,7 @@ "setting. Default: \"auto\"" msgstr "" -#: includes/constant-data.php:1558 +#: includes/constant-data.php:1578 msgid "" "Fields that will be displayed on the form. Permits filtering (e.g. when you " "have more than one appointment page with different confirmation user field " @@ -17376,7 +18245,7 @@ "(Default user field and UDF setting and order will be used)" msgstr "" -#: includes/constant-data.php:1559 +#: includes/constant-data.php:1579 msgid "" "Date range of the time slots which will be displayed. For weekly and monthly " "calendars, only numeric part is taken into account. Permissible values: a " @@ -17387,40 +18256,40 @@ "rest) " msgstr "" -#: includes/constant-data.php:1560 +#: includes/constant-data.php:1580 msgid "" "Only if type is \"flex\". Set as \"1\" if Flex View will display from first " "day of the week, including past days in the week. Set \"0\" to start from " "current day. Default: \"1\"" msgstr "" -#: includes/constant-data.php:1561 +#: includes/constant-data.php:1581 msgid "" "Normally time slots start from current day. If you want to force it to start " "from a certain date, enter that date here. Most date formats are supported, " "but YYYY-MM-DD is recommended. Default: \"0\" (Current day) " msgstr "" -#: includes/constant-data.php:1562 +#: includes/constant-data.php:1582 msgid "" "Number of months (Monthly Calendar), weeks (Weekly Calendar) or days (Table " "View or Flex View) to add to the current date or selected date. Default: " "\"0\" (Current day) " msgstr "" -#: includes/constant-data.php:1563 +#: includes/constant-data.php:1583 msgid "" "Setting 1 reverses positions of Booking Info and Client Info boxes at the " "form. Default: \"0\" (Not reversed)" msgstr "" -#: includes/constant-data.php:1564 +#: includes/constant-data.php:1584 msgid "" "Only if design is \"legacy\". Displays a datepicker to jump to the selected " "date within allowed limits. Set 1 to enable, 0 to disable." msgstr "" -#: includes/constant-data.php:1570 +#: includes/constant-data.php:1590 msgid "" "Creates an input field (powered with jQuery datepicker) using which starting " "point of the calendars on the same page will be changed. Start week day of " @@ -17431,19 +18300,19 @@ "setting select_date in pagination shortcode." msgstr "" -#: includes/constant-data.php:1572 +#: includes/constant-data.php:1592 msgid "" "Text above the select menu. Enter 0 for no title. Default: \"Please select a " "date\"" msgstr "" -#: includes/constant-data.php:1573 +#: includes/constant-data.php:1593 msgid "" "Selected date during first load. Most date formats are supported, but YYYY-" "MM-DD is recommended. Default: \"0\" (current date, i.e. today)" msgstr "" -#: includes/constant-data.php:1577 +#: includes/constant-data.php:1597 msgid "" "Creates a dropdown menu of all users with which you can make a booking on " "behalf of any website member using the make an appointment page. Tip: To " @@ -17452,35 +18321,35 @@ "the confirmation form." msgstr "" -#: includes/constant-data.php:1579 +#: includes/constant-data.php:1599 msgid "" "Text above the select menu. Enter 0 for no title. Default: \"Select a user\"" msgstr "" -#: includes/constant-data.php:1580 +#: includes/constant-data.php:1600 msgid "" "A css class name for the menu wrapper. Default is empty. Tip: Apply " "\"app_2column\" for a side by side layout of 2 adjacent shortcodes." msgstr "" -#: includes/constant-data.php:1581 +#: includes/constant-data.php:1601 msgid "" "Enter \"0\" to omit avatar display in the tooltip. Note: To display the " "avatar \"Show avatar\" should have been selected in Wordpress Settings > " "Discussion > Avatars. Default: \"1\" (avatar is displayed)" msgstr "" -#: includes/constant-data.php:1582 +#: includes/constant-data.php:1602 msgid "Size of the avatar in pixels. Maximum is 512. Default: \"96\"" msgstr "" -#: includes/constant-data.php:1583 +#: includes/constant-data.php:1603 msgid "" "Sort order of the users. Possible values: ID, login, email, nicename, " "display_name. Default: \"display_name\"" msgstr "" -#: includes/constant-data.php:1584 +#: includes/constant-data.php:1604 msgid "" "WordPress user capability to view. Users who have this capability can view " "and use the dropdown generated by the shortcode. Multiple capabilities " @@ -17488,31 +18357,31 @@ "view. Default: \"manage_options\"" msgstr "" -#: includes/constant-data.php:1585 +#: includes/constant-data.php:1605 msgid "" "WordPress user role to be listed. Only users having this role will be " "displayed. Multiple roles separated by commas are allowed. If left empty, " "all users are displayed. Default: \"\" (all user roles)" msgstr "" -#: includes/constant-data.php:1586 +#: includes/constant-data.php:1606 msgid "" "Width of the button which replaces select element. Numeric value is regarded " "as pixels. Percentage is also accepted. Default: \"300\" (px)" msgstr "" -#: includes/constant-data.php:1590 +#: includes/constant-data.php:1610 msgid "" "Creates an account page to list bookings and adjust settings. Service " "providers can also view their schedules, set working hours, services, define " "new services, if allowed." msgstr "" -#: includes/constant-data.php:1592 +#: includes/constant-data.php:1612 msgid "Title tag above the tabs. Enter 0 for no title. Default: 0 (No title)" msgstr "" -#: includes/constant-data.php:1593 +#: includes/constant-data.php:1613 msgid "" "Name of the tabs to be excluded. Multiple entries separated with commas can " "be set. Allowed values: dashboard, bookings, manage, schedules, " @@ -17520,25 +18389,25 @@ "payments, credits, commissions, gcal. Default: empty" msgstr "" -#: includes/constant-data.php:1594 +#: includes/constant-data.php:1614 msgid "" "Columns to be displayed in List of Bookings tab. See columns attribute of " "List of Bookings (app_list) shortcode" msgstr "" -#: includes/constant-data.php:1595 +#: includes/constant-data.php:1615 msgid "" "Status of bookings that will be shown in List of Bookings tab. See status " "attribute of List of Bookings (app_list) shortcode" msgstr "" -#: includes/constant-data.php:1601 +#: includes/constant-data.php:1621 msgid "" "Inserts a sortable table which displays bookings of all or current or " "selected user. This shortcode can also be used in emails." msgstr "" -#: includes/constant-data.php:1603 +#: includes/constant-data.php:1623 msgid "" "Title text. Enter 0 for no title. Placeholder USER_NAME will be replaced by " "the name of user whose appointments are being displayed. Default: \"All " @@ -17546,7 +18415,7 @@ "the rest of \"what\" setting)" msgstr "" -#: includes/constant-data.php:1604 +#: includes/constant-data.php:1624 msgid "" "Columns of the table. Most of these are also the variables of the booking. " "The sequence of the columns in the parameter also defines display order of " @@ -17565,13 +18434,13 @@ "status, cancel, edit, pdf, gcal\"" msgstr "" -#: includes/constant-data.php:1605 +#: includes/constant-data.php:1625 msgid "" "Columns of the table when the user is connected with a mobile device. For " "description see \"columns\" parameter." msgstr "" -#: includes/constant-data.php:1606 +#: includes/constant-data.php:1626 msgid "" "What to be displayed in the list. Permitted values: client (shows bookings " "of the client taking the services), provider (shows bookings of the service " @@ -17581,7 +18450,7 @@ "\"client\" for client" msgstr "" -#: includes/constant-data.php:1607 +#: includes/constant-data.php:1627 msgid "" "Enter the ID of the user whose list will be displayed to the admin. If " "omitted, a) If $_GET[\"app_user_id\"] is set in the url, that user will be " @@ -17591,21 +18460,21 @@ "\"0\" (current user)" msgstr "" -#: includes/constant-data.php:1608 +#: includes/constant-data.php:1628 msgid "" "An optional comma delimited list of service IDs to be included. If you want " "to filter the list for particular services, you can use this parameter. " "Default: \"\" (All services are included)" msgstr "" -#: includes/constant-data.php:1609 +#: includes/constant-data.php:1629 msgid "" "Which status(es) will be included. Possible values: all, paid, confirmed, " "completed, pending, removed, reserved, running (In Progress) or combinations " "of them separated with comma. Default: \"paid,confirmed,pending,running\"" msgstr "" -#: includes/constant-data.php:1610 +#: includes/constant-data.php:1630 msgid "" "Sort order of the appointments on the first page load. Possible values: ID, " "start, end. Optionally DESC (descending) can be used, e.g. \"start DESC\" " @@ -17614,14 +18483,14 @@ "end." msgstr "" -#: includes/constant-data.php:1611 +#: includes/constant-data.php:1631 msgid "" "Limit of characters of client name. If number of characters of client name " "is greater than this number plus 3, then client name will be abbreviated " "with abbr tag. Full name will be displayed in its tooltip. Default: \"22\"" msgstr "" -#: includes/constant-data.php:1612 +#: includes/constant-data.php:1632 msgid "" "Start date of the appointments to be displayed. Most date formats are " "supported, but YYYY-MM-DD is recommended. You can also use PHP strtotime " @@ -17629,7 +18498,7 @@ "month\". Default: \"0\" (No start limit) " msgstr "" -#: includes/constant-data.php:1613 +#: includes/constant-data.php:1633 msgid "" "End date of the appointments to be displayed. Most date formats are " "supported, but YYYY-MM-DD is recommended. You can also use PHP strtotime " @@ -17637,21 +18506,21 @@ "Default: \"0\" (No end limit) " msgstr "" -#: includes/constant-data.php:1614 +#: includes/constant-data.php:1634 msgid "Requires Front End Edit Addon. Text for edit button. Default: \"Edit\"" msgstr "" -#: includes/constant-data.php:1615 +#: includes/constant-data.php:1635 msgid "Text for cancel button. Default: \"Cancel\"" msgstr "" -#: includes/constant-data.php:1616 +#: includes/constant-data.php:1636 msgid "" "Enter 0 to generate a table even if there are no appointments in the list. " "Default: \"1\" (A table will not be generated if there are no bookings)" msgstr "" -#: includes/constant-data.php:1617 +#: includes/constant-data.php:1637 msgid "" "Optional id attribute for the table. If you do not provide an id, plugin " "will automatically assign an id in \"app_datatable_n\" form where n is the " @@ -17659,7 +18528,7 @@ "by WP BASE) " msgstr "" -#: includes/constant-data.php:1618 +#: includes/constant-data.php:1638 msgid "" "WordPress user capability. Users who have this capability can view and use " "other users' bookings. Multiple capabilities separated by commas are " @@ -17667,7 +18536,7 @@ "\"manage_options\"" msgstr "" -#: includes/constant-data.php:1619 +#: includes/constant-data.php:1639 msgid "" "Whether to override cancel and edit capability of admin for other users' " "bookings. Possible values: 0 (Do not allow cancel and edit), auto: Follow " @@ -17675,7 +18544,7 @@ "of global settings). Default: \"auto\" (Global settings will be used)" msgstr "" -#: includes/constant-data.php:1623 +#: includes/constant-data.php:1643 msgid "" "Inserts a dropdown menu of selectable themes, so that you, as admin, can " "change and see different theme results on the front end. Note: This " @@ -17683,11 +18552,11 @@ "session and user. It does not change the setting for selected theme." msgstr "" -#: includes/constant-data.php:1625 +#: includes/constant-data.php:1645 msgid "Text above the menu. Enter 0 for no title. Default: \"jQuery UI Theme\"" msgstr "" -#: includes/constant-data.php:1626 +#: includes/constant-data.php:1646 msgid "" "WordPress user capability. Users who have this capability can view the theme " "selection pulldown menu. Multiple capabilities separated by commas are " @@ -17695,233 +18564,233 @@ "\"manage_options\"" msgstr "" -#: includes/core.php:2332 +#: includes/core.php:2336 msgid "Click to access to the related booking" msgstr "" -#: includes/core.php:2514 +#: includes/core.php:2518 #, php-format msgid "User %1$s changed %2$d setting:" msgid_plural "User %1$s changed %2$d settings:" msgstr[0] "" msgstr[1] "" -#: includes/core.php:2827 +#: includes/core.php:2831 #, php-format msgid "Test %s" msgstr "" -#: includes/core.php:2937 +#: includes/core.php:2940 #, php-format msgid "No valid email is defined for booking #%s" msgstr "" -#: includes/core.php:2986 +#: includes/core.php:2989 #, php-format msgid "%1$s message resent to %2$s for booking #%3$s" msgstr "" -#: includes/core.php:2996 +#: includes/core.php:2999 #, php-format msgid "%1$s message sent to %2$s for booking #%3$s" msgstr "" -#: includes/core.php:3028 +#: includes/core.php:3031 #, php-format msgid "Booking edited (#%d)" msgstr "" -#: includes/core.php:3031 +#: includes/core.php:3034 #, php-format msgid "A booking has been edited on %s." msgstr "" -#: includes/core.php:3033 +#: includes/core.php:3036 #, php-format msgid "" "The edited booking has an ID %1$s and you can access it by clicking this " "link: %2$s" msgstr "" -#: includes/core.php:3035 +#: includes/core.php:3038 msgid "" "Below please find a copy of the message that has been sent to your client " "after editing:" msgstr "" -#: includes/core.php:3038 +#: includes/core.php:3041 #, php-format msgid "Booking completed (#%d)" msgstr "" -#: includes/core.php:3041 +#: includes/core.php:3044 #, php-format msgid "A booking has been completed on %s." msgstr "" -#: includes/core.php:3043 +#: includes/core.php:3046 #, php-format msgid "" "The completed booking has an ID %1$s and you can access it by clicking this " "link: %2$s" msgstr "" -#: includes/core.php:3045 +#: includes/core.php:3048 msgid "" "Below please find a copy of the message that has been sent to your client " "after completion:" msgstr "" -#: includes/core.php:3048 +#: includes/core.php:3051 #, php-format msgid "Booking cancelled (#%d)" msgstr "" -#: includes/core.php:3051 +#: includes/core.php:3054 #, php-format msgid "A booking has been cancelled on %s." msgstr "" -#: includes/core.php:3053 +#: includes/core.php:3056 #, php-format msgid "" "The cancelled booking has an ID %s and you can access it by clicking this " "link: %s" msgstr "" -#: includes/core.php:3055 +#: includes/core.php:3058 msgid "" "Below please find a copy of the message that has been sent to your client " "after cancellation:" msgstr "" -#: includes/core.php:3058 +#: includes/core.php:3061 #, php-format msgid "New pending booking (#%d)" msgstr "" -#: includes/core.php:3061 +#: includes/core.php:3064 #, php-format msgid "A new pending booking has been made on %s." msgstr "" -#: includes/core.php:3063 includes/core.php:3073 +#: includes/core.php:3066 includes/core.php:3076 #, php-format msgid "" "The new booking has an ID %1$s and you can access it by clicking this link: " "%2$s" msgstr "" -#: includes/core.php:3065 includes/core.php:3075 +#: includes/core.php:3068 includes/core.php:3078 msgid "" "Below please find a copy of the message that has been sent to your client as " "confirmation:" msgstr "" -#: includes/core.php:3068 +#: includes/core.php:3071 #, php-format msgid "New confirmed booking (#%d)" msgstr "" -#: includes/core.php:3071 +#: includes/core.php:3074 #, php-format msgid "A confirmed booking has been made on %s." msgstr "" -#: includes/core.php:3096 +#: includes/core.php:3099 #, php-format msgid "Message sending to %s for booking #%s has failed." msgstr "" -#: includes/core.php:3158 +#: includes/core.php:3161 #, php-format msgid "A booking has been cancelled (#%d)" msgstr "" -#: includes/core.php:3159 +#: includes/core.php:3162 #, php-format msgid "Booking with ID %s has been cancelled by the client." msgstr "" -#: includes/core.php:3161 +#: includes/core.php:3164 #, php-format msgid "You can access it by clicking this link: %s" msgstr "" -#: includes/core.php:3163 +#: includes/core.php:3166 #, php-format msgid "A booking requires your approval (#%d)" msgstr "" -#: includes/core.php:3164 +#: includes/core.php:3167 #, php-format msgid "New booking has an ID %s." msgstr "" -#: includes/core.php:3166 +#: includes/core.php:3169 #, php-format msgid "You can approve or edit it by clicking this link: %s" msgstr "" -#: includes/core.php:3182 includes/core.php:3218 +#: includes/core.php:3185 includes/core.php:3221 #, php-format msgid "Notification message sent to %1$s for booking #%2$s" msgstr "" -#: includes/core.php:3185 includes/core.php:3223 +#: includes/core.php:3188 includes/core.php:3226 #, php-format msgid "Notification message sending to %1$s for booking #%2$s has failed" msgstr "" -#: includes/core.php:3196 +#: includes/core.php:3199 #, php-format msgid "Cancelled booking has an ID of %1$d and it was scheduled for %2$s." msgstr "" -#: includes/core.php:3202 +#: includes/core.php:3205 #, php-format msgid "" "New booking has an ID %s for %s and you can confirm it using your profile " "page." msgstr "" -#: includes/core.php:3252 +#: includes/core.php:3255 msgid "(Link removed in admin/provider copy...)" msgstr "" -#: includes/core.php:3256 +#: includes/core.php:3259 msgid "(PayPal button removed in admin/provider copy...)" msgstr "" -#: includes/core.php:3431 +#: includes/core.php:3434 msgid "Test Client" msgstr "" -#: includes/core.php:3432 +#: includes/core.php:3435 msgid "Test Client First Name" msgstr "" -#: includes/core.php:3433 +#: includes/core.php:3436 msgid "Test Client Last Name" msgstr "" -#: includes/core.php:3437 +#: includes/core.php:3440 msgid "Test Address" msgstr "" -#: includes/core.php:3438 +#: includes/core.php:3441 msgid "Test City" msgstr "" -#: includes/core.php:3439 +#: includes/core.php:3442 msgid "Test Zip" msgstr "" -#: includes/core.php:3440 +#: includes/core.php:3443 msgid "This is a test booking created by WP BASE" msgstr "" -#: includes/core.php:3441 +#: includes/core.php:3444 msgid "This is admin note" msgstr "" @@ -18020,859 +18889,892 @@ msgstr "" #: includes/custom-texts.php:147 -msgid "Placeholder for Address field in the confirmation form" -msgstr "" - -#: includes/custom-texts.php:148 msgid "Button text to add a product to shopping cart of WooCommerce or EDD" msgstr "" -#: includes/custom-texts.php:149 +#: includes/custom-texts.php:148 #, php-format msgid "" "Message displayed when an item is added to WooCommerce or EDD shopping cart. " "%s will be replaced with item name." msgstr "" -#: includes/custom-texts.php:150 +#: includes/custom-texts.php:149 msgid "Label for admin user" msgstr "" -#: includes/custom-texts.php:151 +#: includes/custom-texts.php:150 msgid "Column header of Agora for List of Bookings" msgstr "" -#: includes/custom-texts.php:152 includes/custom-texts.php:397 +#: includes/custom-texts.php:151 includes/custom-texts.php:402 msgid "" "Javascript message displayed to the host when he/she is trying to start a " "meeting which has been already started" msgstr "" -#: includes/custom-texts.php:153 includes/custom-texts.php:398 +#: includes/custom-texts.php:152 includes/custom-texts.php:403 msgid "" "Javascript message displayed to the participant when he/she is called to the " "meeting by the host." msgstr "" -#: includes/custom-texts.php:154 includes/custom-texts.php:399 +#: includes/custom-texts.php:153 +msgid "" +"Message displayed above video streaming area during connection to Agora " +"servers" +msgstr "" + +#: includes/custom-texts.php:154 +msgid "Text for Join button" +msgstr "" + +#: includes/custom-texts.php:155 +msgid "Tooltip text for Leave Call icon" +msgstr "" + +#: includes/custom-texts.php:156 includes/custom-texts.php:404 msgid "Default text displayed to the meeting host at the Meeting Room." msgstr "" -#: includes/custom-texts.php:155 includes/custom-texts.php:400 +#: includes/custom-texts.php:157 includes/custom-texts.php:405 msgid "Default text about general meeting rules." msgstr "" -#: includes/custom-texts.php:156 includes/custom-texts.php:401 +#: includes/custom-texts.php:158 includes/custom-texts.php:406 msgid "" "Text displayed to participant when meeting has started. Keep MEETING_LINK " "placeholder which will be replaced by the link to the Meeting Room page." msgstr "" -#: includes/custom-texts.php:157 includes/custom-texts.php:402 +#: includes/custom-texts.php:159 +msgid "" +"Javascript error message displayed when no camera and/or mic found or not " +"permitted to use" +msgstr "" + +#: includes/custom-texts.php:160 +msgid "" +"Javascript error message displayed when no other camera found to switch to" +msgstr "" + +#: includes/custom-texts.php:161 includes/custom-texts.php:407 msgid "Text displayed when user has no future or current meetings." msgstr "" -#: includes/custom-texts.php:158 includes/custom-texts.php:403 +#: includes/custom-texts.php:162 includes/custom-texts.php:408 msgid "Label for Start Meeting link" msgstr "" -#: includes/custom-texts.php:159 includes/custom-texts.php:404 +#: includes/custom-texts.php:163 +msgid "Tooltip text for Switch Camera icon" +msgstr "" + +#: includes/custom-texts.php:164 +msgid "Tooltip text for Toggle Microphone icon" +msgstr "" + +#: includes/custom-texts.php:165 +msgid "Tooltip text for Toggle Camera icon" +msgstr "" + +#: includes/custom-texts.php:166 +msgid "Javascript error message diisplayed when camera switch action failed" +msgstr "" + +#: includes/custom-texts.php:167 includes/custom-texts.php:409 msgid "Default text for client about how meeting will start." msgstr "" -#: includes/custom-texts.php:160 includes/custom-texts.php:405 +#: includes/custom-texts.php:168 includes/custom-texts.php:410 msgid "Default text for host about how meeting will start." msgstr "" -#: includes/custom-texts.php:161 +#: includes/custom-texts.php:169 msgid "Selection in provider dropdown when no particular provider is selected" msgstr "" -#: includes/custom-texts.php:162 +#: includes/custom-texts.php:170 msgid "Title for All Bookings" msgstr "" -#: includes/custom-texts.php:163 +#: includes/custom-texts.php:171 msgid "Label for bookings lasting more than one day in Schedules" msgstr "" -#: includes/custom-texts.php:164 +#: includes/custom-texts.php:172 msgid "Label for All Services in service selections" msgstr "" -#: includes/custom-texts.php:165 +#: includes/custom-texts.php:173 msgid "" "Javascript message displayed when selected time slot is no more available, " "e.g. because of another simultaneous booking" msgstr "" -#: includes/custom-texts.php:166 +#: includes/custom-texts.php:174 msgid "Label for amount" msgstr "" -#: includes/custom-texts.php:167 +#: includes/custom-texts.php:175 #, php-format msgid "" "Placeholder for participant address field. %d will be replaced by the order " "in the list." msgstr "" -#: includes/custom-texts.php:168 +#: includes/custom-texts.php:176 msgid "Javascript message displayed after a successful editing" msgstr "" -#: includes/custom-texts.php:169 +#: includes/custom-texts.php:177 msgid "" "Javascript message displayed after a successful booking and no confirmation/" "pending dialog text exists" msgstr "" -#: includes/custom-texts.php:170 +#: includes/custom-texts.php:178 msgid "Column header for appointment ID for List of Bookings" msgstr "" -#: includes/custom-texts.php:171 +#: includes/custom-texts.php:179 msgid "Text for Apply button" msgstr "" -#: includes/custom-texts.php:172 +#: includes/custom-texts.php:180 msgid "Text for Approve button" msgstr "" -#: includes/custom-texts.php:173 +#: includes/custom-texts.php:181 msgid "Javascript text asking confirm approve" msgstr "" -#: includes/custom-texts.php:174 +#: includes/custom-texts.php:182 msgid "Text for Approved status" msgstr "" -#: includes/custom-texts.php:175 +#: includes/custom-texts.php:183 msgid "Text for option Auto" msgstr "" -#: includes/custom-texts.php:176 +#: includes/custom-texts.php:184 msgid "" "Javascript message displayed after user is auto assigned as a Service " "Provider" msgstr "" -#: includes/custom-texts.php:177 +#: includes/custom-texts.php:185 msgid "" "Message displayed when login is required to be assigned as a service provider" msgstr "" -#: includes/custom-texts.php:178 +#: includes/custom-texts.php:186 msgid "" "Text displayed to client for service provider when no particular provider is " "selected" msgstr "" -#: includes/custom-texts.php:179 +#: includes/custom-texts.php:187 msgid "Legend label for free slot" msgstr "" -#: includes/custom-texts.php:180 +#: includes/custom-texts.php:188 msgid "Label to confirm if chnages will be applied to child bookings" msgstr "" -#: includes/custom-texts.php:181 +#: includes/custom-texts.php:189 msgid "Synonym for profile photo" msgstr "" -#: includes/custom-texts.php:182 +#: includes/custom-texts.php:190 msgid "Label for Back button" msgstr "" -#: includes/custom-texts.php:183 +#: includes/custom-texts.php:191 msgid "Column header of Balance for List of Bookings" msgstr "" -#: includes/custom-texts.php:184 +#: includes/custom-texts.php:192 msgid "Column header for Bio Page" msgstr "" -#: includes/custom-texts.php:185 +#: includes/custom-texts.php:193 msgid "Text for bookings recurring every other week" msgstr "" -#: includes/custom-texts.php:186 +#: includes/custom-texts.php:194 msgid "" "Javascript message displayed when client applies with a blacklisted email " "address" msgstr "" -#: includes/custom-texts.php:187 +#: includes/custom-texts.php:195 msgid "Spinner panel message while booking is being saved" msgstr "" -#: includes/custom-texts.php:188 +#: includes/custom-texts.php:196 msgid "Javascript text informing booking approved" msgstr "" -#: includes/custom-texts.php:189 +#: includes/custom-texts.php:197 msgid "Booking label used in carts" msgstr "" -#: includes/custom-texts.php:190 +#: includes/custom-texts.php:198 msgid "" "Book Now shortcode button text displayed when booking is not possible, i.e. " "fully booked or allowed booking time has passed" msgstr "" -#: includes/custom-texts.php:191 +#: includes/custom-texts.php:199 msgid "" "Book Now shortcode button text displayed when booking is possible. LOCATION, " "SERVICE, WORKER, START will be replaced by their real values" msgstr "" -#: includes/custom-texts.php:192 +#: includes/custom-texts.php:200 msgid "" "Book in Table View button text. LOCATION, SERVICE, WORKER, START will be " "replaced by their real values" msgstr "" -#: includes/custom-texts.php:193 +#: includes/custom-texts.php:201 msgid "Confirmation form legend text" msgstr "" -#: includes/custom-texts.php:194 +#: includes/custom-texts.php:202 msgid "Account page 3 Months Schedule tab title" msgstr "" -#: includes/custom-texts.php:195 +#: includes/custom-texts.php:203 msgid "Account page 4 Weeks Schedule tab title" msgstr "" -#: includes/custom-texts.php:196 +#: includes/custom-texts.php:204 msgid "Account or BuddyPress user profile page Seasonal Schedules tab title" msgstr "" -#: includes/custom-texts.php:197 +#: includes/custom-texts.php:205 msgid "" "Account or BuddyPress or Multi Vendor user profile page bookings tab title " "for client" msgstr "" -#: includes/custom-texts.php:198 +#: includes/custom-texts.php:206 msgid "BuddyPress user profile page bookings tab title for provider as client" msgstr "" -#: includes/custom-texts.php:199 +#: includes/custom-texts.php:207 msgid "" "BuddyPress user profile page bookings tab title for provider as provider" msgstr "" -#: includes/custom-texts.php:200 +#: includes/custom-texts.php:208 msgid "BuddyPress or Multi Vendor user profile page Book Me tab title" msgstr "" -#: includes/custom-texts.php:201 +#: includes/custom-texts.php:209 msgid "BuddyPress group page Book Us tab title" msgstr "" -#: includes/custom-texts.php:202 +#: includes/custom-texts.php:210 msgid "Account or BuddyPress user profile page Commissions tab title" msgstr "" -#: includes/custom-texts.php:203 +#: includes/custom-texts.php:211 msgid "Account or BuddyPress user profile page Credits tab title" msgstr "" -#: includes/custom-texts.php:204 +#: includes/custom-texts.php:212 msgid "Account or BuddyPress user profile page Dashboard tab title" msgstr "" -#: includes/custom-texts.php:205 +#: includes/custom-texts.php:213 msgid "Account or BuddyPress user profile page Google Calendar tab title" msgstr "" -#: includes/custom-texts.php:206 +#: includes/custom-texts.php:214 msgid "BuddyPress Social Group label" msgstr "" -#: includes/custom-texts.php:207 +#: includes/custom-texts.php:215 msgid "Account or BuddyPress user profile page Holidays tab title" msgstr "" -#: includes/custom-texts.php:208 +#: includes/custom-texts.php:216 msgid "Account or BuddyPress user page Bookings longer than 24 hours tab title" msgstr "" -#: includes/custom-texts.php:209 +#: includes/custom-texts.php:217 msgid "Account or BuddyPress user profile/group page Manage Bookings tab title" msgstr "" -#: includes/custom-texts.php:210 +#: includes/custom-texts.php:218 msgid "Account or BuddyPress user page Monthly Schedule tab title" msgstr "" -#: includes/custom-texts.php:211 +#: includes/custom-texts.php:219 msgid "" "BuddyPress notification when the client cancels a booking. You can use the " "booking placeholders which are listed on Emails page." msgstr "" -#: includes/custom-texts.php:212 +#: includes/custom-texts.php:220 msgid "" "BuddyPress notification when admin cancels a booking. You can use the " "booking placeholders which are listed on Emails page." msgstr "" -#: includes/custom-texts.php:213 +#: includes/custom-texts.php:221 msgid "" "BuddyPress notification when provider cancels a booking. You can use the " "booking placeholders which are listed on Emails page." msgstr "" -#: includes/custom-texts.php:214 +#: includes/custom-texts.php:222 msgid "" "BuddyPress notification when the client changes start time of a booking. You " "can use the booking placeholders which are listed on Emails page." msgstr "" -#: includes/custom-texts.php:215 +#: includes/custom-texts.php:223 msgid "" "BuddyPress notification when admin changes start time of a booking. You can " "use the booking placeholders which are listed on Emails page." msgstr "" -#: includes/custom-texts.php:216 +#: includes/custom-texts.php:224 msgid "" "BuddyPress notification when provider changes start time of a booking. You " "can use the booking placeholders which are listed on Emails page." msgstr "" -#: includes/custom-texts.php:217 +#: includes/custom-texts.php:225 msgid "" "BuddyPress notification when status of booking has been changed to " "\"completed\". You can use the booking placeholders which are listed on " "Emails page." msgstr "" -#: includes/custom-texts.php:218 +#: includes/custom-texts.php:226 msgid "" "BuddyPress notification when status of booking has been changed to " "\"confirmed\". You can use the booking placeholders which are listed on " "Emails page." msgstr "" -#: includes/custom-texts.php:219 +#: includes/custom-texts.php:227 msgid "" "BuddyPress notification when status of booking has been changed to \"paid\". " "You can use the booking placeholders which are listed on Emails page." msgstr "" -#: includes/custom-texts.php:220 +#: includes/custom-texts.php:228 msgid "" "BuddyPress notification when a booking has started. You can use the booking " "placeholders which are listed on Emails page." msgstr "" -#: includes/custom-texts.php:221 +#: includes/custom-texts.php:229 msgid "" "BuddyPress notification when a new booking has been made by client. You can " "use the booking placeholders which are listed on Emails page." msgstr "" -#: includes/custom-texts.php:222 +#: includes/custom-texts.php:230 msgid "" "BuddyPress notification when a new booking has been made by admin. You can " "use the booking placeholders which are listed on Emails page." msgstr "" -#: includes/custom-texts.php:223 +#: includes/custom-texts.php:231 msgid "" "BuddyPress notification when a new booking has been made by provider. You " "can use the booking placeholders which are listed on Emails page." msgstr "" -#: includes/custom-texts.php:224 +#: includes/custom-texts.php:232 msgid "" "BuddyPress notification when service provider of a booking has been changed. " "You can use the booking placeholders which are listed on Emails page." msgstr "" -#: includes/custom-texts.php:225 +#: includes/custom-texts.php:233 msgid "Account or BuddyPress user profile page Packages tab title" msgstr "" -#: includes/custom-texts.php:226 +#: includes/custom-texts.php:234 msgid "Account or BuddyPress user profile page Payment History tab title" msgstr "" -#: includes/custom-texts.php:227 +#: includes/custom-texts.php:235 msgid "Account or BuddyPress user profile page Schedules tab title" msgstr "" -#: includes/custom-texts.php:228 +#: includes/custom-texts.php:236 msgid "Account or BuddyPress user profile page Services tab title" msgstr "" -#: includes/custom-texts.php:229 +#: includes/custom-texts.php:237 msgid "Account or BuddyPress user profile page Settings tab title" msgstr "" -#: includes/custom-texts.php:230 +#: includes/custom-texts.php:238 msgid "BuddyPress user profile page main tab title" msgstr "" -#: includes/custom-texts.php:231 +#: includes/custom-texts.php:239 msgid "" "BuddyPress WP BASE checkbox title to select whether to add a Book Me tab" msgstr "" -#: includes/custom-texts.php:232 +#: includes/custom-texts.php:240 msgid "Account or BuddyPress user page Weekly Schedule tab title" msgstr "" -#: includes/custom-texts.php:233 +#: includes/custom-texts.php:241 msgid "Account or BuddyPress user page Working Hours tab title" msgstr "" -#: includes/custom-texts.php:234 +#: includes/custom-texts.php:242 msgid "Legend label for busy slot" msgstr "" -#: includes/custom-texts.php:235 +#: includes/custom-texts.php:243 msgid "" "Spinner panel message while price is being recalculated after a form field " "change" msgstr "" -#: includes/custom-texts.php:236 +#: includes/custom-texts.php:244 msgid "Column header of Cancel for List of Bookings" msgstr "" -#: includes/custom-texts.php:237 +#: includes/custom-texts.php:245 msgid "" "Javascript text that is displayed after an appointment has been cancelled" msgstr "" -#: includes/custom-texts.php:238 +#: includes/custom-texts.php:246 msgid "Javascript text that is displayed before cancelling an appointment" msgstr "" -#: includes/custom-texts.php:239 +#: includes/custom-texts.php:247 msgid "Cancel button text in List of Bookings" msgstr "" -#: includes/custom-texts.php:240 +#: includes/custom-texts.php:248 msgid "" "Button text on confirmation form to clear cart contents and refresh page" msgstr "" -#: includes/custom-texts.php:241 +#: includes/custom-texts.php:249 msgid "Text to quit cancellation of current process" msgstr "" -#: includes/custom-texts.php:242 +#: includes/custom-texts.php:250 msgid "" "Text displayed to confirm cancellation of current process (checkout, edit, " "etc)" msgstr "" -#: includes/custom-texts.php:243 +#: includes/custom-texts.php:251 msgid "Text to confirm cancellation of current process" msgstr "" -#: includes/custom-texts.php:244 +#: includes/custom-texts.php:252 msgid "" "Javascript message displayed when client attempts to cancel an appointment, " "but cancellation is turned off" msgstr "" -#: includes/custom-texts.php:245 +#: includes/custom-texts.php:253 msgid "Column header of Capacity for Services table" msgstr "" -#: includes/custom-texts.php:246 +#: includes/custom-texts.php:254 msgid "Text for status in Cart" msgstr "" -#: includes/custom-texts.php:247 +#: includes/custom-texts.php:255 msgid "Column header of Category for List of Bookings" msgstr "" -#: includes/custom-texts.php:248 +#: includes/custom-texts.php:256 msgid "Address Line 1 title on credit card form" msgstr "" -#: includes/custom-texts.php:249 +#: includes/custom-texts.php:257 msgid "Address Line 2 title on credit card form" msgstr "" -#: includes/custom-texts.php:250 +#: includes/custom-texts.php:258 msgid "City title on credit card form" msgstr "" -#: includes/custom-texts.php:251 +#: includes/custom-texts.php:259 msgid "Country title on credit card form" msgstr "" -#: includes/custom-texts.php:252 +#: includes/custom-texts.php:260 msgid "Security Code title on credit card form" msgstr "" -#: includes/custom-texts.php:253 +#: includes/custom-texts.php:261 msgid "Error message when credit card is declined by payment gateway." msgstr "" -#: includes/custom-texts.php:254 +#: includes/custom-texts.php:262 msgid "Email title on credit card form" msgstr "" -#: includes/custom-texts.php:255 +#: includes/custom-texts.php:263 msgid "" "Error message coming from payment gateway other than declined. If you want " "to show details, keep ERROR_DETAIL placeholder which will be replaced by " "details of error." msgstr "" -#: includes/custom-texts.php:256 +#: includes/custom-texts.php:264 msgid "Expiration Date title on credit card form" msgstr "" -#: includes/custom-texts.php:257 +#: includes/custom-texts.php:265 msgid "Title above credit card form" msgstr "" -#: includes/custom-texts.php:258 +#: includes/custom-texts.php:266 msgid "Full Name title on credit card form" msgstr "" -#: includes/custom-texts.php:259 +#: includes/custom-texts.php:267 msgid "Credit Card Number title on credit card form" msgstr "" -#: includes/custom-texts.php:260 +#: includes/custom-texts.php:268 msgid "Phone title on credit card form" msgstr "" -#: includes/custom-texts.php:261 +#: includes/custom-texts.php:269 msgid "State/Province/Region title on credit card form" msgstr "" -#: includes/custom-texts.php:262 +#: includes/custom-texts.php:270 msgid "Postcode title on credit card form" msgstr "" -#: includes/custom-texts.php:263 +#: includes/custom-texts.php:271 msgid "Label for Check All" msgstr "" -#: includes/custom-texts.php:264 +#: includes/custom-texts.php:272 msgid "Text for Checkin in Schedules" msgstr "" -#: includes/custom-texts.php:265 +#: includes/custom-texts.php:273 msgid "Text for Checkout in Schedules" msgstr "" -#: includes/custom-texts.php:266 +#: includes/custom-texts.php:274 msgid "Spinner panel message while processing checkout" msgstr "" -#: includes/custom-texts.php:267 +#: includes/custom-texts.php:275 msgid "Button text for checkout (finalise booking)" msgstr "" -#: includes/custom-texts.php:268 +#: includes/custom-texts.php:276 msgid "Tooltip text for checkout button" msgstr "" -#: includes/custom-texts.php:269 +#: includes/custom-texts.php:277 msgid "Label to select an image for service or avatar" msgstr "" -#: includes/custom-texts.php:270 +#: includes/custom-texts.php:278 msgid "Title for City field in the confirmation form and user page" msgstr "" -#: includes/custom-texts.php:271 -msgid "Placeholder for City field in the confirmation form" -msgstr "" - -#: includes/custom-texts.php:272 +#: includes/custom-texts.php:279 msgid "Clear signature button text" msgstr "" -#: includes/custom-texts.php:273 +#: includes/custom-texts.php:280 msgid "Label for Clear All" msgstr "" -#: includes/custom-texts.php:274 +#: includes/custom-texts.php:281 msgid "Hint text to book as Waiting List" msgstr "" -#: includes/custom-texts.php:275 +#: includes/custom-texts.php:282 msgid "Hint text to add a booking in calendar" msgstr "" -#: includes/custom-texts.php:276 +#: includes/custom-texts.php:283 msgid "Hint text to remove an appointment from confirmation form" msgstr "" -#: includes/custom-texts.php:277 +#: includes/custom-texts.php:284 msgid "Hint text to add select a date in monthly calendar" msgstr "" -#: includes/custom-texts.php:278 +#: includes/custom-texts.php:285 msgid "Column header of Client for List of Bookings" msgstr "" -#: includes/custom-texts.php:279 +#: includes/custom-texts.php:286 msgid "Tab Header of Clients for Store management" msgstr "" -#: includes/custom-texts.php:280 +#: includes/custom-texts.php:287 msgid "Label for Client Information line in Flex Steps" msgstr "" -#: includes/custom-texts.php:281 +#: includes/custom-texts.php:288 msgid "Label for Client IP at booking instant" msgstr "" -#: includes/custom-texts.php:282 +#: includes/custom-texts.php:289 msgid "Close button text" msgstr "" -#: includes/custom-texts.php:283 +#: includes/custom-texts.php:290 msgid "Label for Background Color" msgstr "" -#: includes/custom-texts.php:284 +#: includes/custom-texts.php:291 msgid "Label for Company Name in forms" msgstr "" -#: includes/custom-texts.php:285 +#: includes/custom-texts.php:292 msgid "Text for status completed" msgstr "" -#: includes/custom-texts.php:286 +#: includes/custom-texts.php:293 msgid "Column header of Confirm for List of Bookings" msgstr "" -#: includes/custom-texts.php:287 +#: includes/custom-texts.php:294 msgid "Confirm button text in List of Bookings" msgstr "" -#: includes/custom-texts.php:288 +#: includes/custom-texts.php:295 msgid "Javascript message displayed before cancelling a booking" msgstr "" -#: includes/custom-texts.php:289 +#: includes/custom-texts.php:296 msgid "Javascript message displayed before confirming a booking" msgstr "" -#: includes/custom-texts.php:290 +#: includes/custom-texts.php:297 msgid "Javascript message displayed before deleting a booking" msgstr "" -#: includes/custom-texts.php:291 +#: includes/custom-texts.php:298 msgid "" "Javascript message displayed when client attempts to confirm an appointment, " "but confirmation is turned off" msgstr "" -#: includes/custom-texts.php:292 +#: includes/custom-texts.php:299 msgid "Javascript message displayed before ending a video call" msgstr "" -#: includes/custom-texts.php:293 +#: includes/custom-texts.php:300 msgid "Title for confirmation form" msgstr "" -#: includes/custom-texts.php:294 +#: includes/custom-texts.php:301 msgid "Text for status confirmed" msgstr "" -#: includes/custom-texts.php:295 +#: includes/custom-texts.php:302 msgid "Javascript message displayed after a booking has been confirmed" msgstr "" -#: includes/custom-texts.php:296 +#: includes/custom-texts.php:303 msgid "Title of countdown on confirmation form" msgstr "" -#: includes/custom-texts.php:297 +#: includes/custom-texts.php:304 msgid "Javascript text that is displayed when ajax request fails" msgstr "" -#: includes/custom-texts.php:298 +#: includes/custom-texts.php:305 msgid "" "Message displayed to user to contact admin, e.g. when their account suspended" msgstr "" -#: includes/custom-texts.php:299 +#: includes/custom-texts.php:306 msgid "" "Button text for continue (finalise selections and display confirmation form)" msgstr "" -#: includes/custom-texts.php:300 +#: includes/custom-texts.php:307 msgid "Title of Next Appointment Countdown" msgstr "" -#: includes/custom-texts.php:301 +#: includes/custom-texts.php:308 msgid "Title for Country field in the confirmation form and user page" msgstr "" -#: includes/custom-texts.php:302 +#: includes/custom-texts.php:309 msgid "Placeholder for Country field in the confirmation form" msgstr "" -#: includes/custom-texts.php:303 +#: includes/custom-texts.php:310 msgid "Title for Coupon in the confirmation form" msgstr "" -#: includes/custom-texts.php:304 +#: includes/custom-texts.php:311 msgid "Text displayed when submitted discount code is not valid" msgstr "" -#: includes/custom-texts.php:305 +#: includes/custom-texts.php:312 msgid "Text displayed when submitted discount code is valid" msgstr "" -#: includes/custom-texts.php:306 +#: includes/custom-texts.php:313 msgid "Description of coupon field in the confirmation form" msgstr "" -#: includes/custom-texts.php:307 +#: includes/custom-texts.php:314 msgid "Column header of Creation Date for List of Bookings" msgstr "" -#: includes/custom-texts.php:308 +#: includes/custom-texts.php:315 msgid "Column header of Creation by field for List of Bookings" msgstr "" -#: includes/custom-texts.php:309 +#: includes/custom-texts.php:316 msgid "Singular text for Credit" msgstr "" -#: includes/custom-texts.php:310 +#: includes/custom-texts.php:317 msgid "Title for Credit Card field on the payment form" msgstr "" -#: includes/custom-texts.php:311 +#: includes/custom-texts.php:318 msgid "Label for sales of Credits" msgstr "" -#: includes/custom-texts.php:312 +#: includes/custom-texts.php:319 msgid "Plural text for Credit" msgstr "" -#: includes/custom-texts.php:313 +#: includes/custom-texts.php:320 msgid "Text for bookings recurring every day" msgstr "" -#: includes/custom-texts.php:314 +#: includes/custom-texts.php:321 msgid "Title for vendor account dashboard" msgstr "" -#: includes/custom-texts.php:315 +#: includes/custom-texts.php:322 msgid "Column header of Date in editing form" msgstr "" -#: includes/custom-texts.php:316 +#: includes/custom-texts.php:323 msgid "Column header of starting time of booking for List of Bookings" msgstr "" -#: includes/custom-texts.php:317 +#: includes/custom-texts.php:324 msgid "Singular text for day" msgstr "" -#: includes/custom-texts.php:318 +#: includes/custom-texts.php:325 msgid "Plural text for day" msgstr "" -#: includes/custom-texts.php:319 +#: includes/custom-texts.php:326 msgid "Column header of Week Day in editing form" msgstr "" -#: includes/custom-texts.php:320 +#: includes/custom-texts.php:327 msgid "Indicates default value will be used" msgstr "" -#: includes/custom-texts.php:321 +#: includes/custom-texts.php:328 msgid "Label for Delete Permanently" msgstr "" -#: includes/custom-texts.php:322 +#: includes/custom-texts.php:329 msgid "Javascript message after one or more records deleted." msgstr "" -#: includes/custom-texts.php:323 +#: includes/custom-texts.php:330 msgid "Column header of Deposit for List of Bookings" msgstr "" -#: includes/custom-texts.php:324 +#: includes/custom-texts.php:331 msgid "" "Label for Deposit Paid - This replaces Total in WooCommerce if payment is " "partial" msgstr "" -#: includes/custom-texts.php:325 +#: includes/custom-texts.php:332 msgid "Column header of Connected Post for Services table" msgstr "" -#: includes/custom-texts.php:326 +#: includes/custom-texts.php:333 msgid "" "Title for items in the cart: Title for list of selected slots in the " "confirmation form when more than one time slot is selected" msgstr "" -#: includes/custom-texts.php:327 +#: includes/custom-texts.php:334 msgid "Title for Display Name field in the confirmation form and user page" msgstr "" -#: includes/custom-texts.php:328 +#: includes/custom-texts.php:335 msgid "Spinner panel message when ajax jobs finished" msgstr "" -#: includes/custom-texts.php:329 +#: includes/custom-texts.php:336 msgid "Column header of Prepayment for List of Bookings" msgstr "" -#: includes/custom-texts.php:330 +#: includes/custom-texts.php:337 msgid "" "Label for Due Payment which is the amount to be paid after deposit is reduced" msgstr "" -#: includes/custom-texts.php:331 +#: includes/custom-texts.php:338 msgid "Label for Dummy" msgstr "" -#: includes/custom-texts.php:332 +#: includes/custom-texts.php:339 msgid "Column header of Duration for Services table" msgstr "" -#: includes/custom-texts.php:333 +#: includes/custom-texts.php:340 msgid "Column header for EDD Payment ID" msgstr "" -#: includes/custom-texts.php:334 +#: includes/custom-texts.php:341 msgid "Column header of Edit for List of Bookings" msgstr "" -#: includes/custom-texts.php:335 +#: includes/custom-texts.php:342 msgid "Javascript text that is displayed before editing an appointment" msgstr "" -#: includes/custom-texts.php:336 +#: includes/custom-texts.php:343 msgid "Edit button text in List of Bookings" msgstr "" -#: includes/custom-texts.php:337 +#: includes/custom-texts.php:344 msgid "" "Javascript message displayed when client attempts to edit an appointment, " "but editing is turned off" msgstr "" -#: includes/custom-texts.php:338 +#: includes/custom-texts.php:345 msgid "Javascript message displayed after changes on booking have been saved" msgstr "" -#: includes/custom-texts.php:339 +#: includes/custom-texts.php:346 #, php-format msgid "" "Javascript message displayed when client attempts to edit an appointment " @@ -18880,1754 +19782,1732 @@ "which will be replaced by the latest time client can pick." msgstr "" -#: includes/custom-texts.php:340 +#: includes/custom-texts.php:347 msgid "Title for email field in the confirmation form and user page" msgstr "" -#: includes/custom-texts.php:341 -msgid "Placeholder for email field in the confirmation form" -msgstr "" - -#: includes/custom-texts.php:342 +#: includes/custom-texts.php:348 msgid "" "Javascript message displayed when logged in client attempts to make a " "booking with email of another registered user" msgstr "" -#: includes/custom-texts.php:343 +#: includes/custom-texts.php:349 msgid "Label for Empty Cart button" msgstr "" -#: includes/custom-texts.php:344 +#: includes/custom-texts.php:350 msgid "Label for end time in confirmation form" msgstr "" -#: includes/custom-texts.php:345 +#: includes/custom-texts.php:351 msgid "Column header of end time of booking for List of Bookings" msgstr "" -#: includes/custom-texts.php:346 +#: includes/custom-texts.php:352 msgid "Text for bookings recurring every other day" msgstr "" -#: includes/custom-texts.php:347 +#: includes/custom-texts.php:353 msgid "Text for bookings recurring every other day except Sunday" msgstr "" -#: includes/custom-texts.php:348 +#: includes/custom-texts.php:354 msgid "Javascript message displayed after a General/unknown error" msgstr "" -#: includes/custom-texts.php:349 +#: includes/custom-texts.php:355 msgid "Title for general/unknown error message display" msgstr "" -#: includes/custom-texts.php:350 +#: includes/custom-texts.php:356 msgid "Label for Event Capacity" msgstr "" -#: includes/custom-texts.php:351 +#: includes/custom-texts.php:357 msgid "Description for Event Capacity field" msgstr "" -#: includes/custom-texts.php:352 +#: includes/custom-texts.php:358 msgid "Label for Closed from Pax" msgstr "" -#: includes/custom-texts.php:353 +#: includes/custom-texts.php:359 msgid "Description for Closed from Pax field" msgstr "" -#: includes/custom-texts.php:354 +#: includes/custom-texts.php:360 msgid "Label for Group Bookings Enable" msgstr "" -#: includes/custom-texts.php:355 +#: includes/custom-texts.php:361 msgid "Description for Group Bookings Enable field" msgstr "" -#: includes/custom-texts.php:356 +#: includes/custom-texts.php:362 msgid "Label for Maximum Pax" msgstr "" -#: includes/custom-texts.php:357 +#: includes/custom-texts.php:363 msgid "Description for Maximum Pax field" msgstr "" -#: includes/custom-texts.php:358 +#: includes/custom-texts.php:364 msgid "Label for Minimum Pax" msgstr "" -#: includes/custom-texts.php:359 +#: includes/custom-texts.php:365 msgid "Description for Minimum Pax field" msgstr "" -#: includes/custom-texts.php:360 +#: includes/custom-texts.php:366 msgid "Label for Event Price" msgstr "" -#: includes/custom-texts.php:361 +#: includes/custom-texts.php:367 msgid "Description for Event Price field" msgstr "" -#: includes/custom-texts.php:362 +#: includes/custom-texts.php:368 msgid "Title for Event Bookings list" msgstr "" -#: includes/custom-texts.php:363 +#: includes/custom-texts.php:369 msgid "Text for more title/link for excerpts" msgstr "" -#: includes/custom-texts.php:364 +#: includes/custom-texts.php:370 msgid "Error message when credit card has expired" msgstr "" -#: includes/custom-texts.php:365 +#: includes/custom-texts.php:371 msgid "Button text for export bookings in CSV file format" msgstr "" -#: includes/custom-texts.php:366 +#: includes/custom-texts.php:372 msgid "" "Title for Extra in confirmation form, bookings page table and list of " "bookings" msgstr "" -#: includes/custom-texts.php:367 +#: includes/custom-texts.php:373 msgid "Label for Fee" msgstr "" -#: includes/custom-texts.php:368 +#: includes/custom-texts.php:374 msgid "Title for Full Name field in the forms" msgstr "" -#: includes/custom-texts.php:369 +#: includes/custom-texts.php:375 msgid "Title for First Name field in the confirmation form and user page" msgstr "" -#: includes/custom-texts.php:370 -msgid "Placeholder for First Name field in the confirmation form" -msgstr "" - -#: includes/custom-texts.php:371 +#: includes/custom-texts.php:376 msgid "Friday" msgstr "" -#: includes/custom-texts.php:372 +#: includes/custom-texts.php:377 msgid "Initial letter of Friday" msgstr "" -#: includes/custom-texts.php:373 +#: includes/custom-texts.php:378 msgid "Short form of Friday" msgstr "" -#: includes/custom-texts.php:374 +#: includes/custom-texts.php:379 msgid "Title for GCal column in List of Bookings" msgstr "" -#: includes/custom-texts.php:375 +#: includes/custom-texts.php:380 msgid "Tooltip title for Google Calendar button" msgstr "" -#: includes/custom-texts.php:376 +#: includes/custom-texts.php:381 msgid "Title for GDPR UDF Group" msgstr "" -#: includes/custom-texts.php:377 +#: includes/custom-texts.php:382 msgid "Title for GDPR userdata Group" msgstr "" -#: includes/custom-texts.php:378 +#: includes/custom-texts.php:383 msgid "Column header of Google Meet for List of Bookings" msgstr "" -#: includes/custom-texts.php:379 +#: includes/custom-texts.php:384 msgid "Label for Google Meet column header" msgstr "" -#: includes/custom-texts.php:380 +#: includes/custom-texts.php:385 msgid "Text for Google Meet Join button" msgstr "" -#: includes/custom-texts.php:381 +#: includes/custom-texts.php:386 msgid "Label for Google Meet URL" msgstr "" -#: includes/custom-texts.php:382 +#: includes/custom-texts.php:387 msgid "Text for status Temporary" msgstr "" -#: includes/custom-texts.php:383 +#: includes/custom-texts.php:388 msgid "Text for Host" msgstr "" -#: includes/custom-texts.php:384 +#: includes/custom-texts.php:389 msgid "Singular text for hour" msgstr "" -#: includes/custom-texts.php:385 +#: includes/custom-texts.php:390 msgid "Plural text for hour" msgstr "" -#: includes/custom-texts.php:386 +#: includes/custom-texts.php:391 msgid "Short form of hour" msgstr "" -#: includes/custom-texts.php:387 +#: includes/custom-texts.php:392 msgid "Column header of Featured Image for Services table" msgstr "" -#: includes/custom-texts.php:388 +#: includes/custom-texts.php:393 msgid "" "Localization of pagination under tables. Keep _PAGE_ and _PAGES_ which is " "the current page no and total number of pages, respectively." msgstr "" -#: includes/custom-texts.php:389 +#: includes/custom-texts.php:394 msgid "Column header of Internal for Services table" msgstr "" -#: includes/custom-texts.php:390 +#: includes/custom-texts.php:395 msgid "" "Javascript message displayed when a mandatory field of a booking record is " "missing." msgstr "" -#: includes/custom-texts.php:391 +#: includes/custom-texts.php:396 msgid "Error message when credit cardholder is invalid" msgstr "" -#: includes/custom-texts.php:392 +#: includes/custom-texts.php:397 msgid "" "Error message when Credit Card Number field is empty or card number is " "invalid" msgstr "" -#: includes/custom-texts.php:393 +#: includes/custom-texts.php:398 msgid "Error message when security code is empty or invalid" msgstr "" -#: includes/custom-texts.php:394 +#: includes/custom-texts.php:399 msgid "Error message displayed when submitted email is not valid" msgstr "" -#: includes/custom-texts.php:395 +#: includes/custom-texts.php:400 msgid "" "Error message when expiration month and/or year field is empty or invalid" msgstr "" -#: includes/custom-texts.php:396 +#: includes/custom-texts.php:401 msgid "Column header of Jitsi for List of Bookings" msgstr "" -#: includes/custom-texts.php:406 +#: includes/custom-texts.php:411 msgid "Label for Client Language" msgstr "" -#: includes/custom-texts.php:407 +#: includes/custom-texts.php:412 msgid "Title for Duration of the selected service(s) in the confirmation form" msgstr "" -#: includes/custom-texts.php:408 +#: includes/custom-texts.php:413 msgid "Title for Last Name field in the confirmation form and user page" msgstr "" -#: includes/custom-texts.php:409 -msgid "Placeholder for Last Name field in the confirmation form" -msgstr "" - -#: includes/custom-texts.php:410 +#: includes/custom-texts.php:414 msgid "" "Localization for pulldown menu that selects the number of records to be " "displayed in the tables. Keep _MENU_ which stands for the pulldown menu " "itself." msgstr "" -#: includes/custom-texts.php:411 +#: includes/custom-texts.php:415 #, php-format msgid "" "Javascript message displayed when selected number of appointments exceeds " "permitted number. Keep %d which will be replaced by actual limit" msgstr "" -#: includes/custom-texts.php:412 +#: includes/custom-texts.php:416 msgid "Text for List Button" msgstr "" -#: includes/custom-texts.php:413 +#: includes/custom-texts.php:417 msgid "Text message displayed while a data is being read" msgstr "" -#: includes/custom-texts.php:414 +#: includes/custom-texts.php:418 msgid "Column header of Location for List of Bookings" msgstr "" -#: includes/custom-texts.php:415 +#: includes/custom-texts.php:419 msgid "Label for Locations" msgstr "" -#: includes/custom-texts.php:416 +#: includes/custom-texts.php:420 msgid "Label for Locations on admin side when Multi Store is enabled" msgstr "" -#: includes/custom-texts.php:417 +#: includes/custom-texts.php:421 msgid "Column header of Location Address for List of Bookings" msgstr "" -#: includes/custom-texts.php:418 +#: includes/custom-texts.php:422 msgid "Title for Location in the confirmation form" msgstr "" -#: includes/custom-texts.php:419 +#: includes/custom-texts.php:423 msgid "Plural of the Location title in the confirmation form" msgstr "" -#: includes/custom-texts.php:420 +#: includes/custom-texts.php:424 msgid "Column header of Location Note for List of Bookings" msgstr "" -#: includes/custom-texts.php:421 +#: includes/custom-texts.php:425 msgid "Message displayed to client after a successful login" msgstr "" -#: includes/custom-texts.php:422 +#: includes/custom-texts.php:426 msgid "Text displayed below calendar title when client is logged in" msgstr "" -#: includes/custom-texts.php:423 +#: includes/custom-texts.php:427 msgid "Spinner panel message while login is being prepared" msgstr "" -#: includes/custom-texts.php:424 +#: includes/custom-texts.php:428 msgid "Text for the login link" msgstr "" -#: includes/custom-texts.php:425 +#: includes/custom-texts.php:429 msgid "Form header asking client to login" msgstr "" -#: includes/custom-texts.php:426 +#: includes/custom-texts.php:430 msgid "Message displayed when login is required to cancel a booking" msgstr "" -#: includes/custom-texts.php:427 +#: includes/custom-texts.php:431 msgid "Message displayed when login is required to confirm a booking" msgstr "" -#: includes/custom-texts.php:428 +#: includes/custom-texts.php:432 msgid "Message displayed when login is required to edit a booking" msgstr "" -#: includes/custom-texts.php:429 +#: includes/custom-texts.php:433 msgid "Text beside the login link" msgstr "" -#: includes/custom-texts.php:430 +#: includes/custom-texts.php:434 msgid "" "Message displayed to client when they submitted an existing email and not " "logged in yet" msgstr "" -#: includes/custom-texts.php:431 +#: includes/custom-texts.php:435 msgid "Tooltip text to login with Facebook account" msgstr "" -#: includes/custom-texts.php:432 +#: includes/custom-texts.php:436 msgid "Tooltip text to login with Google+ account" msgstr "" -#: includes/custom-texts.php:433 +#: includes/custom-texts.php:437 msgid "Tooltip text to login with website credentials" msgstr "" -#: includes/custom-texts.php:434 +#: includes/custom-texts.php:438 msgid "Tooltip text to login with WordPress.com account" msgstr "" -#: includes/custom-texts.php:435 +#: includes/custom-texts.php:439 msgid "" "Note in +24h Bookings calendar. REST placeholder will be replaced with " "number of bookings which could not be shown" msgstr "" -#: includes/custom-texts.php:436 +#: includes/custom-texts.php:440 msgid "Title for Make Payment" msgstr "" -#: includes/custom-texts.php:437 +#: includes/custom-texts.php:441 msgid "Title for Location, Store or Group Manager" msgstr "" -#: includes/custom-texts.php:438 +#: includes/custom-texts.php:442 msgid "" "Message displayed when a record may have edited by another user and current " "value may not be valid any more." msgstr "" -#: includes/custom-texts.php:439 +#: includes/custom-texts.php:443 msgid "Column header of Online Meeting for Services table" msgstr "" -#: includes/custom-texts.php:440 +#: includes/custom-texts.php:444 msgid "Title for payment method" msgstr "" -#: includes/custom-texts.php:441 +#: includes/custom-texts.php:445 msgid "Singular text for minute" msgstr "" -#: includes/custom-texts.php:442 +#: includes/custom-texts.php:446 msgid "Plural text for minute" msgstr "" -#: includes/custom-texts.php:443 +#: includes/custom-texts.php:447 msgid "Short form of minute" msgstr "" -#: includes/custom-texts.php:444 +#: includes/custom-texts.php:448 msgid "" "Javascript message displayed when selection of an extra is required, but " "client did not pick one" msgstr "" -#: includes/custom-texts.php:445 +#: includes/custom-texts.php:449 msgid "Javascript message displayed when a required field is left empty" msgstr "" -#: includes/custom-texts.php:446 +#: includes/custom-texts.php:450 msgid "" "Javascript message displayed when a terms and conditions checkbox are not " "checked by the client" msgstr "" -#: includes/custom-texts.php:447 +#: includes/custom-texts.php:451 msgid "Monday" msgstr "" -#: includes/custom-texts.php:448 +#: includes/custom-texts.php:452 msgid "Initial letter of Monday" msgstr "" -#: includes/custom-texts.php:449 +#: includes/custom-texts.php:453 msgid "Short form of Monday" msgstr "" -#: includes/custom-texts.php:450 +#: includes/custom-texts.php:454 msgid "Singular text for month" msgstr "" -#: includes/custom-texts.php:451 +#: includes/custom-texts.php:455 msgid "Text for bookings recurring every month" msgstr "" -#: includes/custom-texts.php:452 +#: includes/custom-texts.php:456 msgid "" "Title of the monthly calendar. LOCATION, SERVICE, WORKER, START will be " "replaced by their real values" msgstr "" -#: includes/custom-texts.php:453 +#: includes/custom-texts.php:457 msgid "Plural text for month" msgstr "" -#: includes/custom-texts.php:454 +#: includes/custom-texts.php:458 msgid "Title for participant email" msgstr "" -#: includes/custom-texts.php:455 +#: includes/custom-texts.php:459 #, php-format msgid "" "Placeholder for participant email field. %d will be replaced by the order in " "the list." msgstr "" -#: includes/custom-texts.php:456 +#: includes/custom-texts.php:460 msgid "Registration successful message" msgstr "" -#: includes/custom-texts.php:457 +#: includes/custom-texts.php:461 msgid "Label for Afternoon in availability filter" msgstr "" -#: includes/custom-texts.php:458 +#: includes/custom-texts.php:462 msgid "" "Message displayed when an already active user attempts to activate " "themselves again" msgstr "" -#: includes/custom-texts.php:459 +#: includes/custom-texts.php:463 #, php-format msgid "" "Message displayed when a user applies to become a vendor, but he/she already " "has past records. Keep %s which will be replaced with date of application." msgstr "" -#: includes/custom-texts.php:460 +#: includes/custom-texts.php:464 msgid "" "Warning message displayed when provider of a store attempts to apply to be a " "vendor." msgstr "" -#: includes/custom-texts.php:461 +#: includes/custom-texts.php:465 msgid "Message displayed when a vendor applies to become a vendor again" msgstr "" -#: includes/custom-texts.php:462 +#: includes/custom-texts.php:466 msgid "Text of the button on Profile Settings to apply to become a member" msgstr "" -#: includes/custom-texts.php:463 +#: includes/custom-texts.php:467 msgid "Text of the button to apply to become a vendor" msgstr "" -#: includes/custom-texts.php:464 +#: includes/custom-texts.php:468 msgid "Description text explaining Become a Vendor button" msgstr "" -#: includes/custom-texts.php:465 +#: includes/custom-texts.php:469 msgid "" "Javascript message asking confirmation after clicking Become a Vendor button" msgstr "" -#: includes/custom-texts.php:466 +#: includes/custom-texts.php:470 msgid "Label for Bio field" msgstr "" -#: includes/custom-texts.php:467 +#: includes/custom-texts.php:471 msgid "Label for Bio summary field" msgstr "" -#: includes/custom-texts.php:468 +#: includes/custom-texts.php:472 msgid "Label for Bio Page field" msgstr "" -#: includes/custom-texts.php:469 +#: includes/custom-texts.php:473 msgid "Label for commission amount" msgstr "" -#: includes/custom-texts.php:470 +#: includes/custom-texts.php:474 msgid "Label for commission ID" msgstr "" -#: includes/custom-texts.php:471 +#: includes/custom-texts.php:475 msgid "Label for commission rate" msgstr "" -#: includes/custom-texts.php:472 +#: includes/custom-texts.php:476 msgid "Label for commission status" msgstr "" -#: includes/custom-texts.php:473 +#: includes/custom-texts.php:477 msgid "Error message displayed when user could not be created" msgstr "" -#: includes/custom-texts.php:474 +#: includes/custom-texts.php:478 msgid "Title for Days of the week in availability filter" msgstr "" -#: includes/custom-texts.php:475 +#: includes/custom-texts.php:479 msgid "" "Message displayed to the user whose vendor application has been declined" msgstr "" -#: includes/custom-texts.php:476 +#: includes/custom-texts.php:480 msgid "Error message displayed when activation email sending failed" msgstr "" -#: includes/custom-texts.php:477 +#: includes/custom-texts.php:481 msgid "Error message displayed when submitted email is banned" msgstr "" -#: includes/custom-texts.php:478 +#: includes/custom-texts.php:482 msgid "Error message displayed when submitted email is already in use" msgstr "" -#: includes/custom-texts.php:479 +#: includes/custom-texts.php:483 msgid "" "Error message displayed when submitted email is empty or not in valid format" msgstr "" -#: includes/custom-texts.php:480 +#: includes/custom-texts.php:484 msgid "Label for Evening in availability filter" msgstr "" -#: includes/custom-texts.php:481 +#: includes/custom-texts.php:485 msgid "" "Error message displayed when an invalid or already used activation key is " "used." msgstr "" -#: includes/custom-texts.php:482 +#: includes/custom-texts.php:486 msgid "" "Text displayed instead of Become a Vendor button when user is already a " "vendor" msgstr "" -#: includes/custom-texts.php:483 +#: includes/custom-texts.php:487 msgid "Label for Late afternoon in availability filter" msgstr "" -#: includes/custom-texts.php:484 +#: includes/custom-texts.php:488 msgid "Label for Late Evening in availability filter" msgstr "" -#: includes/custom-texts.php:485 +#: includes/custom-texts.php:489 msgid "Label for Late morning in availability filter" msgstr "" -#: includes/custom-texts.php:486 +#: includes/custom-texts.php:490 msgid "Label for Late Night in availability filter" msgstr "" -#: includes/custom-texts.php:487 +#: includes/custom-texts.php:491 msgid "Account activation complete message. Displayed if vendor is approved" msgstr "" -#: includes/custom-texts.php:488 +#: includes/custom-texts.php:492 msgid "Label for Morning in availability filter" msgstr "" -#: includes/custom-texts.php:489 +#: includes/custom-texts.php:493 msgid "Label for Night in availability filter" msgstr "" -#: includes/custom-texts.php:490 +#: includes/custom-texts.php:494 msgid "Error message displayed when Privacy Policy check box is not checked" msgstr "" -#: includes/custom-texts.php:491 +#: includes/custom-texts.php:495 msgid "Label for Override Prices setting in vendor profile" msgstr "" -#: includes/custom-texts.php:492 +#: includes/custom-texts.php:496 msgid "Description for Override Prices setting in vendor profile." msgstr "" -#: includes/custom-texts.php:493 +#: includes/custom-texts.php:497 msgid "" "Message displayed to the user when his page cannot be accessed, possibly due " "to suspension of the user." msgstr "" -#: includes/custom-texts.php:494 +#: includes/custom-texts.php:498 msgid "Error message displayed when password field is empty" msgstr "" -#: includes/custom-texts.php:495 +#: includes/custom-texts.php:499 msgid "Error message displayed when submitted password values do not match" msgstr "" -#: includes/custom-texts.php:496 +#: includes/custom-texts.php:500 #, php-format msgid "" "Error message displayed when a required form field was not filled. Keep %s " "which will be replaced by the name of the field" msgstr "" -#: includes/custom-texts.php:497 +#: includes/custom-texts.php:501 msgid "Description displayed to user when vendor status is pending" msgstr "" -#: includes/custom-texts.php:498 +#: includes/custom-texts.php:502 msgid "Label for Tagline Text in user profile" msgstr "" -#: includes/custom-texts.php:499 +#: includes/custom-texts.php:503 msgid "Label for Tags in user profile" msgstr "" -#: includes/custom-texts.php:500 +#: includes/custom-texts.php:504 msgid "Title for Time of the day in availability filter" msgstr "" -#: includes/custom-texts.php:501 +#: includes/custom-texts.php:505 msgid "Label for Page Title in user profile" msgstr "" -#: includes/custom-texts.php:502 +#: includes/custom-texts.php:506 msgid "Button text for Upload Photo" msgstr "" -#: includes/custom-texts.php:503 +#: includes/custom-texts.php:507 msgid "Error message displayed when an empty username is submitted" msgstr "" -#: includes/custom-texts.php:504 +#: includes/custom-texts.php:508 msgid "Error message displayed when an already existing username is submitted" msgstr "" -#: includes/custom-texts.php:505 +#: includes/custom-texts.php:509 msgid "Error message displayed when an illegal username is submitted" msgstr "" -#: includes/custom-texts.php:506 +#: includes/custom-texts.php:510 msgid "" "Error message displayed when a username having invalid characters is " "submitted" msgstr "" -#: includes/custom-texts.php:507 +#: includes/custom-texts.php:511 msgid "Error message displayed when an all numeric username is submitted" msgstr "" -#: includes/custom-texts.php:508 +#: includes/custom-texts.php:512 msgid "" "Error message displayed when a username shorter than 4 characters is " "submitted" msgstr "" -#: includes/custom-texts.php:509 +#: includes/custom-texts.php:513 msgid "" "Error message displayed when a username having underscore character is " "submitted" msgstr "" -#: includes/custom-texts.php:510 +#: includes/custom-texts.php:514 msgid "Sign Up button text" msgstr "" -#: includes/custom-texts.php:511 +#: includes/custom-texts.php:515 msgid "Label for Video in user profile" msgstr "" -#: includes/custom-texts.php:512 +#: includes/custom-texts.php:516 msgid "" "Account activation complete message. Displayed when vendor application " "awaits admin approval" msgstr "" -#: includes/custom-texts.php:513 +#: includes/custom-texts.php:517 msgid "Title for Name field in the confirmation form" msgstr "" -#: includes/custom-texts.php:514 -msgid "Placeholder for Name field in the confirmation form" -msgstr "" - -#: includes/custom-texts.php:515 +#: includes/custom-texts.php:518 msgid "Pagination button text for Next" msgstr "" -#: includes/custom-texts.php:516 +#: includes/custom-texts.php:519 msgid "" "Note added to details field on confirmation form to notify a booking ending " "next day" msgstr "" -#: includes/custom-texts.php:517 +#: includes/custom-texts.php:520 msgid "Pagination button text for Next Month" msgstr "" -#: includes/custom-texts.php:518 +#: includes/custom-texts.php:521 msgid "Pagination button text for Next Months" msgstr "" -#: includes/custom-texts.php:519 +#: includes/custom-texts.php:522 msgid "Pagination button text for Next Week" msgstr "" -#: includes/custom-texts.php:520 +#: includes/custom-texts.php:523 msgid "Pagination button text for Next Weeks" msgstr "" -#: includes/custom-texts.php:521 +#: includes/custom-texts.php:524 msgid "Translation for No, e.g. to show a check box is not checked" msgstr "" -#: includes/custom-texts.php:522 +#: includes/custom-texts.php:525 msgid "Title for number of bookings" msgstr "" -#: includes/custom-texts.php:523 +#: includes/custom-texts.php:526 msgid "" "Title for number of cancelled jobs of a package in confirmation form, " "bookings page table and list of bookings" msgstr "" -#: includes/custom-texts.php:524 +#: includes/custom-texts.php:527 msgid "" "Title for number of completed jobs of a package in confirmation form, " "bookings page table and list of bookings" msgstr "" -#: includes/custom-texts.php:525 +#: includes/custom-texts.php:528 msgid "" "Title for number of remaining jobs of a package in confirmation form, " "bookings page table and list of bookings" msgstr "" -#: includes/custom-texts.php:526 +#: includes/custom-texts.php:529 msgid "" "Title for number of total jobs of a package in confirmation form, bookings " "page table and list of bookings" msgstr "" -#: includes/custom-texts.php:527 +#: includes/custom-texts.php:530 msgid "Text for \"None\" selection, e.g. number of guests" msgstr "" -#: includes/custom-texts.php:528 +#: includes/custom-texts.php:531 #, php-format msgid "" "Placeholder for participant name field. %d will be replaced by the order in " "the list." msgstr "" -#: includes/custom-texts.php:529 +#: includes/custom-texts.php:532 msgid "Message displayed after a purchase attempt with insufficient credits" msgstr "" -#: includes/custom-texts.php:530 +#: includes/custom-texts.php:533 msgid "Title for participant name" msgstr "" -#: includes/custom-texts.php:531 +#: includes/custom-texts.php:534 msgid "Text for status No Show" msgstr "" -#: includes/custom-texts.php:532 +#: includes/custom-texts.php:535 msgid "Title for Note field in the confirmation form" msgstr "" -#: includes/custom-texts.php:533 +#: includes/custom-texts.php:536 msgid "Javascript message displayed when client did not make any changes" msgstr "" -#: includes/custom-texts.php:534 +#: includes/custom-texts.php:537 msgid "Dialog title for notice type messages" msgstr "" -#: includes/custom-texts.php:535 +#: includes/custom-texts.php:538 msgid "" "Javascript text displayed when client attempts to edit date/time of a " "booking and time slot has been booked" msgstr "" -#: includes/custom-texts.php:536 +#: includes/custom-texts.php:539 msgid "" "Text displayed when a service, provider, etc variable does not have a " "displayable name. Possibly because of a record being deleted" msgstr "" -#: includes/custom-texts.php:537 +#: includes/custom-texts.php:540 msgid "" "Javascript message displayed when client attempts to take seats more than " "the capacity. This may happen when different services with different " "capacities are to be booked" msgstr "" -#: includes/custom-texts.php:538 +#: includes/custom-texts.php:541 msgid "" "Message displayed when client attempts to make booking with insufficient " "Digital Wallet balance" msgstr "" -#: includes/custom-texts.php:539 +#: includes/custom-texts.php:542 msgid "" "Text displayed below calendar title when login is required and client is not " "logged in. LOGIN_PAGE will be replaced by the login url" msgstr "" -#: includes/custom-texts.php:540 +#: includes/custom-texts.php:543 msgid "" "Javascript text displayed when user does not match to the owner of the " "booking." msgstr "" -#: includes/custom-texts.php:541 +#: includes/custom-texts.php:544 msgid "" "Javascript text displayed when requested action or selection is not possible" msgstr "" -#: includes/custom-texts.php:542 +#: includes/custom-texts.php:545 msgid "" "Javascript text displayed when client attempts to book a service which is " "not published (expired or not open yet)" msgstr "" -#: includes/custom-texts.php:543 +#: includes/custom-texts.php:546 msgid "" "Javascript text displayed when client attempts to edit date/time of a " "booking and provider is not working" msgstr "" -#: includes/custom-texts.php:544 +#: includes/custom-texts.php:547 msgid "" "Text for List of Bookings when there are no appointments to be displayed" msgstr "" -#: includes/custom-texts.php:545 +#: includes/custom-texts.php:548 msgid "" "HTML text displayed when there are no free time slots in the table or block" msgstr "" -#: includes/custom-texts.php:546 +#: includes/custom-texts.php:549 msgid "" "Selection in dropdowns when there is no preference, (e.g. when client does " "not particularly select a provider)" msgstr "" -#: includes/custom-texts.php:547 +#: includes/custom-texts.php:550 msgid "Text for Recurring Appointments pulldown menu to select no repeat" msgstr "" -#: includes/custom-texts.php:548 +#: includes/custom-texts.php:551 msgid "Message displayed when there are no matching services" msgstr "" -#: includes/custom-texts.php:549 +#: includes/custom-texts.php:552 msgid "Message displayed when there are no matching results" msgstr "" -#: includes/custom-texts.php:550 +#: includes/custom-texts.php:553 msgid "Legend label for not available, e.g. break, holiday, slot" msgstr "" -#: includes/custom-texts.php:551 +#: includes/custom-texts.php:554 msgid "Automatically added to optional UDF labels" msgstr "" -#: includes/custom-texts.php:552 +#: includes/custom-texts.php:555 msgid "Title for Order in list of bookings" msgstr "" -#: includes/custom-texts.php:553 +#: includes/custom-texts.php:556 msgid "" "Text displayed to admin for service provider when no particular provider is " "selected" msgstr "" -#: includes/custom-texts.php:554 +#: includes/custom-texts.php:557 msgid "Column header of Owner for Services table" msgstr "" -#: includes/custom-texts.php:555 +#: includes/custom-texts.php:558 msgid "Column header of Padding After for Services table" msgstr "" -#: includes/custom-texts.php:556 +#: includes/custom-texts.php:559 msgid "Column header of Padding Before for Services table" msgstr "" -#: includes/custom-texts.php:557 +#: includes/custom-texts.php:560 msgid "Text for status paid" msgstr "" -#: includes/custom-texts.php:558 +#: includes/custom-texts.php:561 msgid "Javascript message informing that balance is not negative" msgstr "" -#: includes/custom-texts.php:559 +#: includes/custom-texts.php:562 msgid "Header for List of Participants of Group Bookings" msgstr "" -#: includes/custom-texts.php:560 +#: includes/custom-texts.php:563 #, php-format msgid "" "Title for each participant of Group Bookings. %d will be replaced by the " "order in the list." msgstr "" -#: includes/custom-texts.php:561 +#: includes/custom-texts.php:564 msgid "Legend label for partly busy slot" msgstr "" -#: includes/custom-texts.php:562 +#: includes/custom-texts.php:565 msgid "Label for Password field" msgstr "" -#: includes/custom-texts.php:563 +#: includes/custom-texts.php:566 msgid "Label for Repeat Password field" msgstr "" -#: includes/custom-texts.php:564 +#: includes/custom-texts.php:567 msgid "" "Javascript text displayed when client attempts to edit a booking with past " "date/time" msgstr "" -#: includes/custom-texts.php:565 +#: includes/custom-texts.php:568 msgid "Used for each guest/seat booked in Group Bookings" msgstr "" -#: includes/custom-texts.php:566 +#: includes/custom-texts.php:569 msgid "" "Message displayed when payment is required, but no payment method is " "selected or not available" msgstr "" -#: includes/custom-texts.php:567 +#: includes/custom-texts.php:570 msgid "Title for Payment ID in Payment History" msgstr "" -#: includes/custom-texts.php:568 +#: includes/custom-texts.php:571 msgid "Column header of Pay for List of Bookings" msgstr "" -#: includes/custom-texts.php:569 +#: includes/custom-texts.php:572 msgid "Column header of PayPal for List of Bookings" msgstr "" -#: includes/custom-texts.php:570 +#: includes/custom-texts.php:573 msgid "Label for PayPal Email" msgstr "" -#: includes/custom-texts.php:571 +#: includes/custom-texts.php:574 msgid "Description text under PayPal Email setting field on user profile" msgstr "" -#: includes/custom-texts.php:572 +#: includes/custom-texts.php:575 msgid "" "JavaScript message displayed when an incorrect non-empty Paypal email is " "entered" msgstr "" -#: includes/custom-texts.php:573 +#: includes/custom-texts.php:576 msgid "Button text to confirm PayPal Express payment final stage." msgstr "" -#: includes/custom-texts.php:574 +#: includes/custom-texts.php:577 msgid "" "Text that will be displayed in final confirmation stage with Paypal Express " "Checkout. AMOUNT placeholder will be reapleced with the amount to be paid, " "and EMAIL is PayPal account email of the client." msgstr "" -#: includes/custom-texts.php:575 +#: includes/custom-texts.php:578 msgid "" "Button text for credit card data submit. AMOUNT placeholder will be replaced " "with formatted payable amount, including currency sign." msgstr "" -#: includes/custom-texts.php:576 +#: includes/custom-texts.php:579 msgid "" "Text beside Payment field in the confirmation form when more than one " "payment option/gateway is active" msgstr "" -#: includes/custom-texts.php:577 +#: includes/custom-texts.php:580 msgid "Column header of Pdf download for List of Bookings" msgstr "" -#: includes/custom-texts.php:578 +#: includes/custom-texts.php:581 msgid "Title text of confirmation attachment for my appointments table" msgstr "" -#: includes/custom-texts.php:579 +#: includes/custom-texts.php:582 msgid "" "Button text to download a confirmation attachment for my appointments table" msgstr "" -#: includes/custom-texts.php:580 +#: includes/custom-texts.php:583 msgid "Pdf Download button text in List of Bookings" msgstr "" -#: includes/custom-texts.php:581 +#: includes/custom-texts.php:584 msgid "Tooltip text that explains function of pdf download button." msgstr "" -#: includes/custom-texts.php:582 +#: includes/custom-texts.php:585 msgid "Tooltip title for Pdf Download button" msgstr "" -#: includes/custom-texts.php:583 +#: includes/custom-texts.php:586 msgid "Text for status pending" msgstr "" -#: includes/custom-texts.php:584 +#: includes/custom-texts.php:587 msgid "" "Text for status pending and an automatic payment is not expected, e.g. " "payment is not required, price is zero, or manual payment is selected" msgstr "" -#: includes/custom-texts.php:585 +#: includes/custom-texts.php:588 msgid "" "Text for status pending and an automatic payment via a gateway is expected" msgstr "" -#: includes/custom-texts.php:586 +#: includes/custom-texts.php:589 msgid "Label for Person Types" msgstr "" -#: includes/custom-texts.php:587 +#: includes/custom-texts.php:590 msgid "Title for Phone field in the confirmation form and user page" msgstr "" -#: includes/custom-texts.php:588 -msgid "Placeholder for Phone field in the confirmation form" -msgstr "" - -#: includes/custom-texts.php:589 +#: includes/custom-texts.php:591 msgid "Message displayed while submitting a form" msgstr "" -#: includes/custom-texts.php:590 +#: includes/custom-texts.php:592 msgid "" "Private Message button text. RECIPIENT placeholder will be replaced by the " "display name of the other party" msgstr "" -#: includes/custom-texts.php:591 +#: includes/custom-texts.php:593 #, php-format msgid "" "Placeholder for participant phone field. %d will be replaced by the order in " "the list." msgstr "" -#: includes/custom-texts.php:592 +#: includes/custom-texts.php:594 msgid "Title text for language selection dropdown" msgstr "" -#: includes/custom-texts.php:593 +#: includes/custom-texts.php:595 msgid "Spinner panel message while booking views are being prepared" msgstr "" -#: includes/custom-texts.php:594 +#: includes/custom-texts.php:596 msgid "Spinner panel message while time table is being prepared" msgstr "" -#: includes/custom-texts.php:595 +#: includes/custom-texts.php:597 msgid "Pagination button text for Previous" msgstr "" -#: includes/custom-texts.php:596 +#: includes/custom-texts.php:598 msgid "Pagination button text for Previous Month" msgstr "" -#: includes/custom-texts.php:597 +#: includes/custom-texts.php:599 msgid "Pagination button text for Previous Months" msgstr "" -#: includes/custom-texts.php:598 +#: includes/custom-texts.php:600 msgid "Pagination button text for Previous Week" msgstr "" -#: includes/custom-texts.php:599 +#: includes/custom-texts.php:601 msgid "Pagination button text for Previous Weeks" msgstr "" -#: includes/custom-texts.php:600 +#: includes/custom-texts.php:602 msgid "Title for Price in the confirmation form" msgstr "" -#: includes/custom-texts.php:601 +#: includes/custom-texts.php:603 msgid "" "Javascript message in case there is a mismatch of calculated price and price " "previously displayed to the client and new price is higher." msgstr "" -#: includes/custom-texts.php:602 +#: includes/custom-texts.php:604 msgid "" "Javascript message in case there is a mismatch of calculated price and price " "previously displayed to the client and new price is lower." msgstr "" -#: includes/custom-texts.php:603 +#: includes/custom-texts.php:605 msgid "Column Header for Private Message" msgstr "" -#: includes/custom-texts.php:604 +#: includes/custom-texts.php:606 msgid "Javascript message displayed when client is asked to confirm to proceed" msgstr "" -#: includes/custom-texts.php:605 +#: includes/custom-texts.php:607 msgid "Processing text when connecting to payment gateway" msgstr "" -#: includes/custom-texts.php:606 +#: includes/custom-texts.php:608 msgid "Column header of Provider for List of Bookings" msgstr "" -#: includes/custom-texts.php:607 +#: includes/custom-texts.php:609 msgid "Tab Header of Providers for Store Management" msgstr "" -#: includes/custom-texts.php:608 +#: includes/custom-texts.php:610 msgid "Title for Service Provider in the confirmation form" msgstr "" -#: includes/custom-texts.php:609 +#: includes/custom-texts.php:611 msgid "Plural of the Service Provider title in the confirmation form" msgstr "" -#: includes/custom-texts.php:610 +#: includes/custom-texts.php:612 msgid "" "Javascript text displayed when client attempts to book a service which is " "out of quota" msgstr "" -#: includes/custom-texts.php:611 +#: includes/custom-texts.php:613 msgid "Spinner panel message while ajax data read is in progress" msgstr "" -#: includes/custom-texts.php:612 +#: includes/custom-texts.php:614 msgid "" "Javascript message displayed before client is redirected to the login page" msgstr "" -#: includes/custom-texts.php:613 +#: includes/custom-texts.php:615 msgid "Title for Payment Reference" msgstr "" -#: includes/custom-texts.php:614 +#: includes/custom-texts.php:616 msgid "Spinner panel message while page is being refreshed" msgstr "" -#: includes/custom-texts.php:615 +#: includes/custom-texts.php:617 msgid "Placeholder value in login Register field" msgstr "" -#: includes/custom-texts.php:616 +#: includes/custom-texts.php:618 msgid "Text beside Remember Me field in the confirmation form" msgstr "" -#: includes/custom-texts.php:617 +#: includes/custom-texts.php:619 msgid "Text for status removed" msgstr "" -#: includes/custom-texts.php:618 +#: includes/custom-texts.php:620 msgid "" "Text in tooltip when an appointment has been removed from confirmation form" msgstr "" -#: includes/custom-texts.php:619 +#: includes/custom-texts.php:621 msgid "" "Note added under confirmation form when there is at least one required field" msgstr "" -#: includes/custom-texts.php:620 +#: includes/custom-texts.php:622 msgid "Text for status reserved by Google Calendar" msgstr "" -#: includes/custom-texts.php:621 +#: includes/custom-texts.php:623 msgid "Button text for Resource in Schedules" msgstr "" -#: includes/custom-texts.php:622 +#: includes/custom-texts.php:624 msgid "Label for Revenue" msgstr "" -#: includes/custom-texts.php:623 +#: includes/custom-texts.php:625 msgid "Jitsi meeting room ID" msgstr "" -#: includes/custom-texts.php:624 +#: includes/custom-texts.php:626 msgid "Text for status happening now" msgstr "" -#: includes/custom-texts.php:625 +#: includes/custom-texts.php:627 msgid "Saturday" msgstr "" -#: includes/custom-texts.php:626 +#: includes/custom-texts.php:628 msgid "Initial letter of Saturday" msgstr "" -#: includes/custom-texts.php:627 +#: includes/custom-texts.php:629 msgid "Short form of Saturday" msgstr "" -#: includes/custom-texts.php:628 +#: includes/custom-texts.php:630 msgid "Label for Save" msgstr "" -#: includes/custom-texts.php:629 +#: includes/custom-texts.php:631 msgid "Javascript message after settings saved." msgstr "" -#: includes/custom-texts.php:630 +#: includes/custom-texts.php:632 msgid "Button text for save (finalise edit)" msgstr "" -#: includes/custom-texts.php:631 +#: includes/custom-texts.php:633 msgid "" "Javascript message displayed when appointment could not be saved possibly " "because of a server error" msgstr "" -#: includes/custom-texts.php:632 +#: includes/custom-texts.php:634 msgid "Spinner panel message while data is being saved" msgstr "" -#: includes/custom-texts.php:633 +#: includes/custom-texts.php:635 msgid "Placeholder value in table Search field" msgstr "" -#: includes/custom-texts.php:634 +#: includes/custom-texts.php:636 msgid "Title for number of seats in the confirmation form" msgstr "" -#: includes/custom-texts.php:635 +#: includes/custom-texts.php:637 msgid "Column header of available capacity" msgstr "" -#: includes/custom-texts.php:636 +#: includes/custom-texts.php:638 msgid "Column header of total capacity" msgstr "" -#: includes/custom-texts.php:637 +#: includes/custom-texts.php:639 msgid "Column header of total and available capacity separated with \"/\"" msgstr "" -#: includes/custom-texts.php:638 +#: includes/custom-texts.php:640 msgid "Singular text for second" msgstr "" -#: includes/custom-texts.php:639 +#: includes/custom-texts.php:641 msgid "Plural text for seconds" msgstr "" -#: includes/custom-texts.php:640 +#: includes/custom-texts.php:642 msgid "Label for Security Code" msgstr "" -#: includes/custom-texts.php:641 +#: includes/custom-texts.php:643 msgid "General short select text" msgstr "" -#: includes/custom-texts.php:642 +#: includes/custom-texts.php:644 msgid "General select text" msgstr "" -#: includes/custom-texts.php:643 +#: includes/custom-texts.php:645 msgid "Text displayed to show a slot has been selected" msgstr "" -#: includes/custom-texts.php:644 +#: includes/custom-texts.php:646 msgid "" "Text for select button of locations/services/service providers dropdowns" msgstr "" -#: includes/custom-texts.php:645 +#: includes/custom-texts.php:647 msgid "Text displayed above credit selection dropdown in Sell Credits" msgstr "" -#: includes/custom-texts.php:646 +#: includes/custom-texts.php:648 msgid "Text displayed above date selection field" msgstr "" -#: includes/custom-texts.php:647 +#: includes/custom-texts.php:649 msgid "Text displayed above duration selection dropdown" msgstr "" -#: includes/custom-texts.php:648 +#: includes/custom-texts.php:650 msgid "Text displayed above language selection dropdown" msgstr "" -#: includes/custom-texts.php:649 +#: includes/custom-texts.php:651 msgid "Javascript message displayed when selected limit exceeded" msgstr "" -#: includes/custom-texts.php:650 +#: includes/custom-texts.php:652 msgid "Text displayed above locations dropdown" msgstr "" -#: includes/custom-texts.php:651 +#: includes/custom-texts.php:653 msgid "Text displayed above service providers dropdown" msgstr "" -#: includes/custom-texts.php:652 +#: includes/custom-texts.php:654 msgid "" "Text displayed above number of repeats and repeat unit selection dropdowns" msgstr "" -#: includes/custom-texts.php:653 +#: includes/custom-texts.php:655 msgid "Label for repeat number" msgstr "" -#: includes/custom-texts.php:654 +#: includes/custom-texts.php:656 msgid "Label for repeat unit" msgstr "" -#: includes/custom-texts.php:655 +#: includes/custom-texts.php:657 msgid "Text displayed above pax/seats selection dropdown" msgstr "" -#: includes/custom-texts.php:656 +#: includes/custom-texts.php:658 msgid "Text displayed above services dropdown" msgstr "" -#: includes/custom-texts.php:657 +#: includes/custom-texts.php:659 msgid "Title of Theme selection pulldown menu" msgstr "" -#: includes/custom-texts.php:658 +#: includes/custom-texts.php:660 msgid "Text displayed above users dropdown" msgstr "" -#: includes/custom-texts.php:659 +#: includes/custom-texts.php:661 msgid "Column header of Server Date/time for List of Bookings" msgstr "" -#: includes/custom-texts.php:660 +#: includes/custom-texts.php:662 msgid "Column header of Server Day for List of Bookings" msgstr "" -#: includes/custom-texts.php:661 +#: includes/custom-texts.php:663 msgid "Text for Server Timezone" msgstr "" -#: includes/custom-texts.php:662 +#: includes/custom-texts.php:664 msgid "Column header of Service for List of Bookings" msgstr "" -#: includes/custom-texts.php:663 +#: includes/custom-texts.php:665 msgid "Title for Services Given on account page" msgstr "" -#: includes/custom-texts.php:664 +#: includes/custom-texts.php:666 msgid "Title for Service ID" msgstr "" -#: includes/custom-texts.php:665 +#: includes/custom-texts.php:667 msgid "Title for Service in the confirmation form" msgstr "" -#: includes/custom-texts.php:666 +#: includes/custom-texts.php:668 msgid "Plural of the Service title in the confirmation form" msgstr "" -#: includes/custom-texts.php:667 +#: includes/custom-texts.php:669 msgid "Title for Services Provided" msgstr "" -#: includes/custom-texts.php:668 +#: includes/custom-texts.php:670 msgid "" "Message displayed when no service is selected, but selection of at least one " "is required" msgstr "" -#: includes/custom-texts.php:669 +#: includes/custom-texts.php:671 msgid "Singular text for Digital Wallet package quantity" msgstr "" -#: includes/custom-texts.php:670 +#: includes/custom-texts.php:672 msgid "Plural text for Digital Wallet package quantity" msgstr "" -#: includes/custom-texts.php:671 +#: includes/custom-texts.php:673 msgid "Label for Showing: in select elements" msgstr "" -#: includes/custom-texts.php:672 +#: includes/custom-texts.php:674 msgid "Column Header for Sort Order in Services List" msgstr "" -#: includes/custom-texts.php:673 +#: includes/custom-texts.php:675 msgid "Javascript message displayed after a too frequent booking attempt" msgstr "" -#: includes/custom-texts.php:674 +#: includes/custom-texts.php:676 msgid "Text for status stand by" msgstr "" -#: includes/custom-texts.php:675 +#: includes/custom-texts.php:677 msgid "Label for start time in confirmation form" msgstr "" -#: includes/custom-texts.php:676 +#: includes/custom-texts.php:678 msgid "Title for State field in the confirmation form and user page" msgstr "" -#: includes/custom-texts.php:677 -msgid "Placeholder for State field in the confirmation form" -msgstr "" - -#: includes/custom-texts.php:678 +#: includes/custom-texts.php:679 msgid "Column header of Status for List of Bookings" msgstr "" -#: includes/custom-texts.php:679 +#: includes/custom-texts.php:680 msgid "Label for Store" msgstr "" -#: includes/custom-texts.php:680 +#: includes/custom-texts.php:681 msgid "Label for Stores" msgstr "" -#: includes/custom-texts.php:681 +#: includes/custom-texts.php:682 msgid "Label for Store Page" msgstr "" -#: includes/custom-texts.php:682 +#: includes/custom-texts.php:683 msgid "Label for Store Settings" msgstr "" -#: includes/custom-texts.php:683 +#: includes/custom-texts.php:684 msgid "Button text for confirming an appointment" msgstr "" -#: includes/custom-texts.php:684 +#: includes/custom-texts.php:685 msgid "Title for Summary block in Flex Steps" msgstr "" -#: includes/custom-texts.php:685 +#: includes/custom-texts.php:686 msgid "Sunday" msgstr "" -#: includes/custom-texts.php:686 +#: includes/custom-texts.php:687 msgid "Initial letter of Sunday" msgstr "" -#: includes/custom-texts.php:687 +#: includes/custom-texts.php:688 msgid "Short form of Sunday" msgstr "" -#: includes/custom-texts.php:688 +#: includes/custom-texts.php:689 msgid "Label for Tax" msgstr "" -#: includes/custom-texts.php:689 +#: includes/custom-texts.php:690 msgid "" "To be announced: Exact time or link of the booking is not determined yet." msgstr "" -#: includes/custom-texts.php:690 +#: includes/custom-texts.php:691 msgid "Text for status test" msgstr "" -#: includes/custom-texts.php:691 +#: includes/custom-texts.php:692 msgid "Thursday" msgstr "" -#: includes/custom-texts.php:692 +#: includes/custom-texts.php:693 msgid "Initial letter of Thursday" msgstr "" -#: includes/custom-texts.php:693 +#: includes/custom-texts.php:694 msgid "Short form of Thursday" msgstr "" -#: includes/custom-texts.php:694 +#: includes/custom-texts.php:695 msgid "Column header of Time in editing form" msgstr "" -#: includes/custom-texts.php:695 +#: includes/custom-texts.php:696 msgid "Button text for provider bookings in Schedules" msgstr "" -#: includes/custom-texts.php:696 +#: includes/custom-texts.php:697 msgid "Label for Time Zone" msgstr "" -#: includes/custom-texts.php:697 +#: includes/custom-texts.php:698 msgid "Title of Time Zone selection pulldown menu" msgstr "" -#: includes/custom-texts.php:698 +#: includes/custom-texts.php:699 msgid "Button text for Today in Schedules" msgstr "" -#: includes/custom-texts.php:699 +#: includes/custom-texts.php:700 msgid "" -"Javascript message displayed when client attempts to cancel/edit/add an " -"appointment, but it is too late" +"Javascript message or tooltip text displayed when it is early to edit a " +"booking" msgstr "" -#: includes/custom-texts.php:700 +#: includes/custom-texts.php:701 +msgid "" +"Javascript message or tooltip text displayed when client attempts to cancel/" +"edit/add a booking, but it is too late" +msgstr "" + +#: includes/custom-texts.php:702 #, php-format msgid "" "Javascript message displayed when selected number of appointments is less " "than the permitted number. Keep %d which will be replaced by actual limit" msgstr "" -#: includes/custom-texts.php:701 +#: includes/custom-texts.php:703 msgid "Column header of Total Paid amount for List of Bookings" msgstr "" -#: includes/custom-texts.php:702 +#: includes/custom-texts.php:704 msgid "" "Javascript error message when client attempts to select a time slot which " "would exceed trial limit. Keep LIMIT placeholder which will be replaced by " "set limit value." msgstr "" -#: includes/custom-texts.php:703 +#: includes/custom-texts.php:705 msgid "" "Javascript error message when client attempts to select a time slot which " "would result in selecting same provider second time." msgstr "" -#: includes/custom-texts.php:704 +#: includes/custom-texts.php:706 msgid "Tooltip text displayed for price discounted by coupon" msgstr "" -#: includes/custom-texts.php:705 +#: includes/custom-texts.php:707 msgid "Tooltip text displayed for price discounted by coupon or custom pricing" msgstr "" -#: includes/custom-texts.php:706 +#: includes/custom-texts.php:708 msgid "" "Tooltip text displayed for regular price when there is a discounted price" msgstr "" -#: includes/custom-texts.php:707 +#: includes/custom-texts.php:709 msgid "Tuesday" msgstr "" -#: includes/custom-texts.php:708 +#: includes/custom-texts.php:710 msgid "Initial letter of Tuesday" msgstr "" -#: includes/custom-texts.php:709 +#: includes/custom-texts.php:711 msgid "Short form of Tuesday" msgstr "" -#: includes/custom-texts.php:710 +#: includes/custom-texts.php:712 msgid "Message displayed after an unauthorised access" msgstr "" -#: includes/custom-texts.php:711 +#: includes/custom-texts.php:713 msgid "" "Text displayed when details of a setting is unknown. Possibly because the " "addon which made the setting has been disabled." msgstr "" -#: includes/custom-texts.php:712 +#: includes/custom-texts.php:714 msgid "Update Button text" msgstr "" -#: includes/custom-texts.php:713 +#: includes/custom-texts.php:715 msgid "Javascript message after one or more records updated" msgstr "" -#: includes/custom-texts.php:714 +#: includes/custom-texts.php:716 msgid "Spinner panel message while an update is in progress" msgstr "" -#: includes/custom-texts.php:715 +#: includes/custom-texts.php:717 msgid "Placeholder value in login Username or Email field" msgstr "" -#: includes/custom-texts.php:716 +#: includes/custom-texts.php:718 msgid "Placeholder value in login Username field" msgstr "" -#: includes/custom-texts.php:717 +#: includes/custom-texts.php:719 msgid "" "Text for selection of using server timezone instead of dedected client local " "timezone" msgstr "" -#: includes/custom-texts.php:718 +#: includes/custom-texts.php:720 msgid "Singular text for vendor" msgstr "" -#: includes/custom-texts.php:719 +#: includes/custom-texts.php:721 msgid "Plural text for vendor" msgstr "" -#: includes/custom-texts.php:720 +#: includes/custom-texts.php:722 msgid "Text for status in Waiting List" msgstr "" -#: includes/custom-texts.php:721 +#: includes/custom-texts.php:723 msgid "" "Confirmation form submit button text when booking will be added to Waiting " "List" msgstr "" -#: includes/custom-texts.php:722 +#: includes/custom-texts.php:724 msgid "" "Javascript message displayed when client claims an opening but slot is no " "more available." msgstr "" -#: includes/custom-texts.php:723 +#: includes/custom-texts.php:725 msgid "Wednesday" msgstr "" -#: includes/custom-texts.php:724 +#: includes/custom-texts.php:726 msgid "Initial letter of Wednesday" msgstr "" -#: includes/custom-texts.php:725 +#: includes/custom-texts.php:727 msgid "Short form of Wednesday" msgstr "" -#: includes/custom-texts.php:726 +#: includes/custom-texts.php:728 msgid "Singular text for week" msgstr "" -#: includes/custom-texts.php:727 +#: includes/custom-texts.php:729 msgid "Text for bookings recurring every weekday" msgstr "" -#: includes/custom-texts.php:728 +#: includes/custom-texts.php:730 msgid "Text for bookings recurring every weekend" msgstr "" -#: includes/custom-texts.php:729 +#: includes/custom-texts.php:731 msgid "Text for bookings recurring every week" msgstr "" -#: includes/custom-texts.php:730 +#: includes/custom-texts.php:732 msgid "" "Title above the weekly calendar. LOCATION, SERVICE, WORKER, START, END will " "be replaced by their real values" msgstr "" -#: includes/custom-texts.php:731 +#: includes/custom-texts.php:733 msgid "Plural text for week" msgstr "" -#: includes/custom-texts.php:732 +#: includes/custom-texts.php:734 msgid "Label for WooCommerce Order ID" msgstr "" -#: includes/custom-texts.php:733 +#: includes/custom-texts.php:735 msgid "Column header of Provider" msgstr "" -#: includes/custom-texts.php:734 +#: includes/custom-texts.php:736 msgid "Column header of Provider Free for Services table" msgstr "" -#: includes/custom-texts.php:735 +#: includes/custom-texts.php:737 #, php-format msgid "" "Javascript message displayed when submitted field is not acceptable. Keep %s " "which will be replaced by field name" msgstr "" -#: includes/custom-texts.php:736 +#: includes/custom-texts.php:738 msgid "Text for year" msgstr "" -#: includes/custom-texts.php:737 +#: includes/custom-texts.php:739 msgid "Translation for Yes, e.g. to show a check box is checked" msgstr "" -#: includes/custom-texts.php:738 +#: includes/custom-texts.php:740 msgid "" "Label for Your Rate field in user profile. The same for hourly and fixed " "rates." msgstr "" -#: includes/custom-texts.php:739 +#: includes/custom-texts.php:741 msgid "Title for Postcode field in the confirmation form and user page" msgstr "" -#: includes/custom-texts.php:740 -msgid "Placeholder for Postcode field in the confirmation form" -msgstr "" - -#: includes/custom-texts.php:741 +#: includes/custom-texts.php:742 msgid "Column header of Zoom for List of Bookings" msgstr "" -#: includes/custom-texts.php:742 +#: includes/custom-texts.php:743 msgid "Meeting ID label in List of Bookings" msgstr "" -#: includes/custom-texts.php:743 +#: includes/custom-texts.php:744 msgid "Button label for Join to Meeting" msgstr "" -#: includes/custom-texts.php:744 +#: includes/custom-texts.php:745 msgid "Meeting Password label in List of Bookings" msgstr "" -#: includes/custom-texts.php:745 +#: includes/custom-texts.php:746 msgid "Button label for Start Meeting" msgstr "" @@ -20644,46 +21524,78 @@ msgid "Agora" msgstr "" -#: includes/custom-texts.php:789 includes/custom-texts.php:1036 +#: includes/custom-texts.php:789 includes/custom-texts.php:1043 msgid "This meeting has already started." msgstr "" -#: includes/custom-texts.php:790 includes/custom-texts.php:1037 +#: includes/custom-texts.php:790 includes/custom-texts.php:1044 msgid "" "Meeting has been started by the host and you are being called. Please " "confirm to join the meeting." msgstr "" -#: includes/custom-texts.php:791 includes/custom-texts.php:1038 +#: includes/custom-texts.php:791 +msgid "Connecting..." +msgstr "" + +#: includes/custom-texts.php:793 +msgid "Leave Call" +msgstr "" + +#: includes/custom-texts.php:794 includes/custom-texts.php:1045 msgid " " msgstr "" -#: includes/custom-texts.php:792 includes/custom-texts.php:1039 +#: includes/custom-texts.php:795 includes/custom-texts.php:1046 msgid "" "You can start by clicking START_MEETING link immediately. If you do so, " -"participant will be able to attend to the meeting even before meeting time " -"arrives." +"participant will be able to attend to the meeting even before the scheduled " +"meeting time." msgstr "" -#: includes/custom-texts.php:793 includes/custom-texts.php:1040 +#: includes/custom-texts.php:796 includes/custom-texts.php:1047 msgid "Meeting already started. Please click MEETING_ROOM to join." msgstr "" -#: includes/custom-texts.php:794 includes/custom-texts.php:1041 +#: includes/custom-texts.php:797 +msgid "Could not access microphone and/or camera. Please check permissions" +msgstr "" + +#: includes/custom-texts.php:798 +msgid "Could not find another camera to switch to" +msgstr "" + +#: includes/custom-texts.php:799 includes/custom-texts.php:1048 msgid "You don't have any upcoming or running meetings." msgstr "" -#: includes/custom-texts.php:795 includes/custom-texts.php:1042 +#: includes/custom-texts.php:800 includes/custom-texts.php:1049 msgid "Start Meeting" msgstr "" -#: includes/custom-texts.php:796 includes/custom-texts.php:1043 +#: includes/custom-texts.php:801 +msgid "Switch Camera" +msgstr "" + +#: includes/custom-texts.php:802 +msgid "Toggle Microphone" +msgstr "" + +#: includes/custom-texts.php:803 +msgid "Toggle Camera" +msgstr "" + +#: includes/custom-texts.php:804 +msgid "Failed to switch camera" +msgstr "" + +#: includes/custom-texts.php:805 includes/custom-texts.php:1050 msgid "" "When countdown expires, you will be redirected to the Meeting Room. Please " "keep this page open until then." msgstr "" -#: includes/custom-texts.php:797 includes/custom-texts.php:1044 +#: includes/custom-texts.php:806 includes/custom-texts.php:1051 msgid "" "You are the host of this meeting. You can click MEETING_ROOM to go to the " "Meeting Room, or wait here. If you prefer to stay, when countdown expires, " @@ -20691,878 +21603,890 @@ "then." msgstr "" -#: includes/custom-texts.php:799 +#: includes/custom-texts.php:808 msgid "All Bookings" msgstr "" -#: includes/custom-texts.php:800 includes/wh.php:1041 +#: includes/custom-texts.php:809 includes/wh.php:1041 msgid "All Day" msgstr "" -#: includes/custom-texts.php:801 +#: includes/custom-texts.php:810 msgid "all services" msgstr "" -#: includes/custom-texts.php:802 +#: includes/custom-texts.php:811 msgid "" "We are sorry, but this time slot is no longer available. Please refresh the " "page and try another time slot. Thank you." msgstr "" -#: includes/custom-texts.php:803 +#: includes/custom-texts.php:812 msgid "Total" msgstr "" -#: includes/custom-texts.php:804 +#: includes/custom-texts.php:813 #, php-format msgid "Address of the %d. guest" msgstr "" -#: includes/custom-texts.php:805 +#: includes/custom-texts.php:814 msgid "Your booking has been successfully changed." msgstr "" -#: includes/custom-texts.php:806 +#: includes/custom-texts.php:815 msgid "We have received your submission. Thanks!" msgstr "" -#: includes/custom-texts.php:809 +#: includes/custom-texts.php:818 msgid "Approve" msgstr "" -#: includes/custom-texts.php:811 +#: includes/custom-texts.php:820 msgid "Are you sure to approve selected booking?" msgstr "" -#: includes/custom-texts.php:812 +#: includes/custom-texts.php:821 msgid "Change children" msgstr "" -#: includes/custom-texts.php:814 +#: includes/custom-texts.php:823 msgid "" "Congratulations! You are a service provider of SITE_NAME now. Using this " "page you can set your profile, arrange working hours and define services you " "want to give." msgstr "" -#: includes/custom-texts.php:815 +#: includes/custom-texts.php:824 msgid "Please login to be assigned as a service provider" msgstr "" -#: includes/custom-texts.php:816 +#: includes/custom-texts.php:825 msgid "A specialist" msgstr "" -#: includes/custom-texts.php:817 +#: includes/custom-texts.php:826 msgid "Available" msgstr "" -#: includes/custom-texts.php:818 +#: includes/custom-texts.php:827 msgid "Profile Picture" msgstr "" -#: includes/custom-texts.php:819 +#: includes/custom-texts.php:828 msgid "Back" msgstr "" -#: includes/custom-texts.php:822 +#: includes/custom-texts.php:831 msgid "Every other week" msgstr "" -#: includes/custom-texts.php:823 +#: includes/custom-texts.php:832 msgid "" "We are sorry, but the provided email cannot be accepted. Please contact " "website admin for details." msgstr "" -#: includes/custom-texts.php:824 +#: includes/custom-texts.php:833 msgid "Processing booking..." msgstr "" -#: includes/custom-texts.php:826 +#: includes/custom-texts.php:835 msgid "Selected booking approved" msgstr "" -#: includes/custom-texts.php:827 +#: includes/custom-texts.php:836 msgid "Booking closed" msgstr "" -#: includes/custom-texts.php:828 +#: includes/custom-texts.php:837 msgid "Book Now for START" msgstr "" -#: includes/custom-texts.php:829 +#: includes/custom-texts.php:838 msgid "Book Now" msgstr "" -#: includes/custom-texts.php:831 +#: includes/custom-texts.php:840 msgid "3 Months Schedule" msgstr "" -#: includes/custom-texts.php:832 +#: includes/custom-texts.php:841 msgid "4 Weeks Schedule" msgstr "" -#: includes/custom-texts.php:833 +#: includes/custom-texts.php:842 msgid "Seasonal Schedules" msgstr "" -#: includes/custom-texts.php:834 +#: includes/custom-texts.php:843 msgid "My Bookings" msgstr "" -#: includes/custom-texts.php:835 +#: includes/custom-texts.php:844 msgid "My Bookings as Client" msgstr "" -#: includes/custom-texts.php:836 +#: includes/custom-texts.php:845 msgid "As Provider" msgstr "" -#: includes/custom-texts.php:837 +#: includes/custom-texts.php:846 msgid "Book Me" msgstr "" -#: includes/custom-texts.php:838 +#: includes/custom-texts.php:847 msgid "Book Us" msgstr "" -#: includes/custom-texts.php:840 +#: includes/custom-texts.php:849 msgid "Credit History" msgstr "" -#: includes/custom-texts.php:843 +#: includes/custom-texts.php:852 msgid "Group" msgstr "" -#: includes/custom-texts.php:844 includes/holidays.php:54 +#: includes/custom-texts.php:853 includes/holidays.php:54 msgid "Holidays" msgstr "" -#: includes/custom-texts.php:845 +#: includes/custom-texts.php:854 msgid "+24h Bookings" msgstr "" -#: includes/custom-texts.php:847 +#: includes/custom-texts.php:856 msgid "Monthly Schedule" msgstr "" -#: includes/custom-texts.php:848 +#: includes/custom-texts.php:857 msgid "" "SERVICE booking #APP_ID supposed to start at DATE_TIME has been cancelled by " "the client CLIENT" msgstr "" -#: includes/custom-texts.php:849 +#: includes/custom-texts.php:858 msgid "" "SERVICE booking #APP_ID supposed to start at DATE_TIME has been cancelled by " "admin" msgstr "" -#: includes/custom-texts.php:850 +#: includes/custom-texts.php:859 msgid "" "SERVICE booking #APP_ID supposed to start at DATE_TIME has been cancelled by " "provider WORKER" msgstr "" -#: includes/custom-texts.php:851 +#: includes/custom-texts.php:860 msgid "SERVICE booking #APP_ID started at DATE_TIME has been completed" msgstr "" -#: includes/custom-texts.php:852 +#: includes/custom-texts.php:861 msgid "SERVICE booking #APP_ID for DATE_TIME has been confirmed" msgstr "" -#: includes/custom-texts.php:853 +#: includes/custom-texts.php:862 msgid "SERVICE booking #APP_ID for DATE_TIME has been paid" msgstr "" -#: includes/custom-texts.php:854 +#: includes/custom-texts.php:863 msgid "Client CLIENT has rescheduled SERVICE booking #APP_ID to DATE_TIME" msgstr "" -#: includes/custom-texts.php:855 +#: includes/custom-texts.php:864 msgid "Admin has rescheduled SERVICE booking #APP_ID to DATE_TIME" msgstr "" -#: includes/custom-texts.php:856 +#: includes/custom-texts.php:865 msgid "Provider WORKER has rescheduled SERVICE booking #APP_ID to DATE_TIME" msgstr "" -#: includes/custom-texts.php:857 +#: includes/custom-texts.php:866 msgid "SERVICE booking #APP_ID started. Estimated finish time: END_DATE_TIME" msgstr "" -#: includes/custom-texts.php:858 +#: includes/custom-texts.php:867 msgid "" "CLIENT made a SERVICE booking #APP_ID for DATE_TIME. It will be served by " "WORKER" msgstr "" -#: includes/custom-texts.php:859 +#: includes/custom-texts.php:868 msgid "Admin created a new SERVICE booking #APP_ID scheduled for DATE_TIME" msgstr "" -#: includes/custom-texts.php:860 +#: includes/custom-texts.php:869 msgid "" "WORKER created a new SERVICE booking #APP_ID for client CLIENT for DATE_TIME" msgstr "" -#: includes/custom-texts.php:861 +#: includes/custom-texts.php:870 msgid "" "WORKER has been assigned as service provider for SERVICE booking #APP_ID " "scheduled for DATE_TIME" msgstr "" -#: includes/custom-texts.php:868 +#: includes/custom-texts.php:877 msgid "Add a Book Me tab" msgstr "" -#: includes/custom-texts.php:869 +#: includes/custom-texts.php:878 msgid "Weekly Schedule" msgstr "" -#: includes/custom-texts.php:871 +#: includes/custom-texts.php:880 msgid "Busy" msgstr "" -#: includes/custom-texts.php:872 +#: includes/custom-texts.php:881 msgid "Calculating" msgstr "" -#: includes/custom-texts.php:874 +#: includes/custom-texts.php:883 msgid "Selected booking cancelled." msgstr "" -#: includes/custom-texts.php:875 +#: includes/custom-texts.php:884 msgid "Are you sure to cancel the selected booking?" msgstr "" -#: includes/custom-texts.php:877 includes/custom-texts.php:909 +#: includes/custom-texts.php:886 includes/custom-texts.php:917 msgid "Clear" msgstr "" -#: includes/custom-texts.php:878 +#: includes/custom-texts.php:887 msgid "No, I want to continue" msgstr "" -#: includes/custom-texts.php:879 +#: includes/custom-texts.php:888 msgid "Are you sure to cancel current process?" msgstr "" -#: includes/custom-texts.php:880 +#: includes/custom-texts.php:889 msgid "Yes, I want to cancel" msgstr "" -#: includes/custom-texts.php:881 +#: includes/custom-texts.php:890 msgid "Cancellation of appointments is disabled. Please contact website admin." msgstr "" -#: includes/custom-texts.php:883 +#: includes/custom-texts.php:892 msgid "In Cart" msgstr "" -#: includes/custom-texts.php:884 +#: includes/custom-texts.php:893 msgid "Category" msgstr "" -#: includes/custom-texts.php:885 +#: includes/custom-texts.php:894 msgid "Address Line 1" msgstr "" -#: includes/custom-texts.php:886 +#: includes/custom-texts.php:895 msgid "Address Line 2" msgstr "" -#: includes/custom-texts.php:888 includes/custom-texts.php:938 +#: includes/custom-texts.php:897 includes/custom-texts.php:946 msgid "Country" msgstr "" -#: includes/custom-texts.php:890 +#: includes/custom-texts.php:899 msgid "" "We are sorry, but your bank did not approve your credit card. Please try " "with another card." msgstr "" -#: includes/custom-texts.php:892 +#: includes/custom-texts.php:901 msgid "There was a problem with your submission. ERROR_DETAIL" msgstr "" -#: includes/custom-texts.php:893 +#: includes/custom-texts.php:902 msgid "Expiration Date" msgstr "" -#: includes/custom-texts.php:894 +#: includes/custom-texts.php:903 msgid "Please enter your credit card details below and confirm" msgstr "" -#: includes/custom-texts.php:895 +#: includes/custom-texts.php:904 msgid "Name on the Card" msgstr "" -#: includes/custom-texts.php:896 +#: includes/custom-texts.php:905 msgid "Credit Card Number" msgstr "" -#: includes/custom-texts.php:898 +#: includes/custom-texts.php:907 msgid "State/Province/Region" msgstr "" -#: includes/custom-texts.php:900 +#: includes/custom-texts.php:909 msgid "Check All" msgstr "" -#: includes/custom-texts.php:901 +#: includes/custom-texts.php:910 msgid "IN" msgstr "" -#: includes/custom-texts.php:902 +#: includes/custom-texts.php:911 msgid "OUT" msgstr "" -#: includes/custom-texts.php:903 +#: includes/custom-texts.php:912 msgid "Processing checkout..." msgstr "" -#: includes/custom-texts.php:904 +#: includes/custom-texts.php:913 msgid "Checkout" msgstr "" -#: includes/custom-texts.php:905 +#: includes/custom-texts.php:914 msgid "Choose Image" msgstr "" -#: includes/custom-texts.php:906 +#: includes/custom-texts.php:915 msgid "Click to submit" msgstr "" -#: includes/custom-texts.php:910 +#: includes/custom-texts.php:918 msgid "Clear All" msgstr "" -#: includes/custom-texts.php:911 +#: includes/custom-texts.php:919 msgid "Click to add to Waiting List" msgstr "" -#: includes/custom-texts.php:912 +#: includes/custom-texts.php:920 msgid "Click to add a booking" msgstr "" -#: includes/custom-texts.php:913 +#: includes/custom-texts.php:921 msgid "Click to remove" msgstr "" -#: includes/custom-texts.php:914 +#: includes/custom-texts.php:922 msgid "Click to pick date" msgstr "" -#: includes/custom-texts.php:917 +#: includes/custom-texts.php:925 msgid "Client Information" msgstr "" -#: includes/custom-texts.php:918 +#: includes/custom-texts.php:926 msgid "IP" msgstr "" -#: includes/custom-texts.php:920 +#: includes/custom-texts.php:928 msgid "Color" msgstr "" -#: includes/custom-texts.php:921 +#: includes/custom-texts.php:929 msgid "Company Name" msgstr "" -#: includes/custom-texts.php:923 includes/custom-texts.php:924 +#: includes/custom-texts.php:931 includes/custom-texts.php:932 msgid "Confirm" msgstr "" -#: includes/custom-texts.php:925 +#: includes/custom-texts.php:933 msgid "Are you sure to cancel selected appointment?" msgstr "" -#: includes/custom-texts.php:926 +#: includes/custom-texts.php:934 msgid "Are you sure to confirm selected appointment?" msgstr "" -#: includes/custom-texts.php:927 +#: includes/custom-texts.php:935 msgid "Are you sure to delete selected record(s)?" msgstr "" -#: includes/custom-texts.php:928 +#: includes/custom-texts.php:936 msgid "This action is disabled. Please contact website admin." msgstr "" -#: includes/custom-texts.php:929 +#: includes/custom-texts.php:937 msgid "Are you sure to end the call?" msgstr "" -#: includes/custom-texts.php:930 +#: includes/custom-texts.php:938 msgid "Please fill in the form and confirm:" msgstr "" -#: includes/custom-texts.php:932 +#: includes/custom-texts.php:940 msgid "Selected booking confirmed" msgstr "" -#: includes/custom-texts.php:933 +#: includes/custom-texts.php:941 msgid "We are holding your selection for" msgstr "" -#: includes/custom-texts.php:934 +#: includes/custom-texts.php:942 msgid "A connection error occurred" msgstr "" -#: includes/custom-texts.php:935 +#: includes/custom-texts.php:943 msgid "There is a problem with your account. Please contact website admin" msgstr "" -#: includes/custom-texts.php:936 +#: includes/custom-texts.php:944 msgid "Add Another Slot" msgstr "" -#: includes/custom-texts.php:937 +#: includes/custom-texts.php:945 msgid "Your next appointment" msgstr "" -#: includes/custom-texts.php:940 +#: includes/custom-texts.php:947 msgid "Discount Code" msgstr "" -#: includes/custom-texts.php:941 +#: includes/custom-texts.php:948 msgid "Code is invalid" msgstr "" -#: includes/custom-texts.php:942 +#: includes/custom-texts.php:949 msgid "Code is valid" msgstr "" -#: includes/custom-texts.php:943 +#: includes/custom-texts.php:950 msgid "Use discount coupon here" msgstr "" -#: includes/custom-texts.php:946 +#: includes/custom-texts.php:953 msgid "Credit" msgstr "" -#: includes/custom-texts.php:947 +#: includes/custom-texts.php:954 msgid "Credit Card" msgstr "" -#: includes/custom-texts.php:948 +#: includes/custom-texts.php:955 msgid "Credit Sales" msgstr "" -#: includes/custom-texts.php:951 +#: includes/custom-texts.php:958 msgid "Booking System Dashboard" msgstr "" -#: includes/custom-texts.php:953 +#: includes/custom-texts.php:960 msgid "Starts" msgstr "" -#: includes/custom-texts.php:955 +#: includes/custom-texts.php:962 #: includes/freeons/extended-service-features.php:413 msgid "days" msgstr "" -#: includes/custom-texts.php:958 +#: includes/custom-texts.php:965 msgid "Delete Permanently" msgstr "" -#: includes/custom-texts.php:959 includes/notices.php:538 +#: includes/custom-texts.php:966 includes/notices.php:538 msgid "Selected record(s) deleted." msgstr "" -#: includes/custom-texts.php:961 +#: includes/custom-texts.php:968 msgid "Deposit Paid:" msgstr "" -#: includes/custom-texts.php:964 +#: includes/custom-texts.php:971 msgid "Display Name" msgstr "" -#: includes/custom-texts.php:965 +#: includes/custom-texts.php:972 msgid "Done..." msgstr "" -#: includes/custom-texts.php:966 +#: includes/custom-texts.php:973 msgid "Total Amount" msgstr "" -#: includes/custom-texts.php:967 +#: includes/custom-texts.php:974 msgid "Due Payment" msgstr "" -#: includes/custom-texts.php:970 +#: includes/custom-texts.php:977 msgid "EDD" msgstr "" -#: includes/custom-texts.php:972 -msgid "You are about to edit an existing appointment. Click OK to continue." +#: includes/custom-texts.php:979 +msgid "You are about to edit an existing booking. Click OK to continue." msgstr "" -#: includes/custom-texts.php:974 +#: includes/custom-texts.php:981 msgid "Editing of bookings is disabled. Please contact website admin." msgstr "" -#: includes/custom-texts.php:975 +#: includes/custom-texts.php:982 +msgid "% parameter of the booking cannot be edited." +msgstr "" + +#: includes/custom-texts.php:983 msgid "Booking successfully changed." msgstr "" -#: includes/custom-texts.php:976 +#: includes/custom-texts.php:984 +msgid "Bookings in this stage cannot be edited." +msgstr "" + +#: includes/custom-texts.php:985 #, php-format msgid "" "New time of the booking is too close. Please select a time later than %s." msgstr "" -#: includes/custom-texts.php:979 +#: includes/custom-texts.php:987 msgid "Submitted email does not belong to you" msgstr "" -#: includes/custom-texts.php:980 +#: includes/custom-texts.php:988 msgid "Empty Cart" msgstr "" -#: includes/custom-texts.php:982 +#: includes/custom-texts.php:990 msgid "Ends" msgstr "" -#: includes/custom-texts.php:983 +#: includes/custom-texts.php:991 msgid "Every other day" msgstr "" -#: includes/custom-texts.php:984 +#: includes/custom-texts.php:992 msgid "EOD except Sunday" msgstr "" -#: includes/custom-texts.php:985 +#: includes/custom-texts.php:993 msgid "" "Something went wrong. Please try again, if applicable, after refreshing the " "page. If problem persists, contact website admin." msgstr "" -#: includes/custom-texts.php:986 includes/lib/plugin-updater.php:522 +#: includes/custom-texts.php:994 includes/lib/plugin-updater.php:522 msgid "Error" msgstr "" -#: includes/custom-texts.php:988 +#: includes/custom-texts.php:996 msgid "Total event capacity. Leave empty for no limit" msgstr "" -#: includes/custom-texts.php:989 +#: includes/custom-texts.php:997 msgid "Closed from Pax" msgstr "" -#: includes/custom-texts.php:990 +#: includes/custom-texts.php:998 msgid "" "When group bookings is enabled, event will be regarded full when this number " "is reached" msgstr "" -#: includes/custom-texts.php:992 +#: includes/custom-texts.php:1000 msgid "Tick if a Zoom meeting will be automatically created" msgstr "" -#: includes/custom-texts.php:993 +#: includes/custom-texts.php:1001 msgid "Enable Group Bookings" msgstr "" -#: includes/custom-texts.php:994 +#: includes/custom-texts.php:1002 msgid "Tick if more than one pax can be sold per booking" msgstr "" -#: includes/custom-texts.php:995 +#: includes/custom-texts.php:1003 msgid "Maximum Pax" msgstr "" -#: includes/custom-texts.php:996 +#: includes/custom-texts.php:1004 msgid "" "When group bookings is enabled, maximum pax that can be selected per booking" msgstr "" -#: includes/custom-texts.php:997 +#: includes/custom-texts.php:1005 msgid "Minimum Pax" msgstr "" -#: includes/custom-texts.php:998 +#: includes/custom-texts.php:1006 msgid "" "When group bookings is enabled, minimum pax that can be selected per booking" msgstr "" -#: includes/custom-texts.php:1000 +#: includes/custom-texts.php:1008 msgid "Unit price. Leave empty if event is free" msgstr "" -#: includes/custom-texts.php:1001 +#: includes/custom-texts.php:1009 msgid "Book now for EVENT - START_END" msgstr "" -#: includes/custom-texts.php:1002 +#: includes/custom-texts.php:1010 msgid "More information <span class=\"meta-nav\">→</span>" msgstr "" -#: includes/custom-texts.php:1003 +#: includes/custom-texts.php:1011 msgid "Card is no longer valid or has expired" msgstr "" -#: includes/custom-texts.php:1004 +#: includes/custom-texts.php:1012 msgid "Export bookings as CSV file" msgstr "" -#: includes/custom-texts.php:1006 +#: includes/custom-texts.php:1014 msgid "Fee" msgstr "" -#: includes/custom-texts.php:1007 +#: includes/custom-texts.php:1015 msgid "Full Name" msgstr "" -#: includes/custom-texts.php:1008 +#: includes/custom-texts.php:1016 msgid "First Name" msgstr "" -#: includes/custom-texts.php:1014 +#: includes/custom-texts.php:1021 msgid "Click to submit this appointment to your Google Calendar account" msgstr "" -#: includes/custom-texts.php:1015 +#: includes/custom-texts.php:1022 msgid "Additional User Info for Booking" msgstr "" -#: includes/custom-texts.php:1016 +#: includes/custom-texts.php:1023 msgid "User Info for Booking" msgstr "" -#: includes/custom-texts.php:1020 +#: includes/custom-texts.php:1027 msgid "Meet URL" msgstr "" -#: includes/custom-texts.php:1021 +#: includes/custom-texts.php:1028 msgid "Temporary" msgstr "" -#: includes/custom-texts.php:1022 +#: includes/custom-texts.php:1029 msgid "Host" msgstr "" -#: includes/custom-texts.php:1024 +#: includes/custom-texts.php:1031 msgid "hours" msgstr "" -#: includes/custom-texts.php:1025 +#: includes/custom-texts.php:1032 msgid "h" msgstr "" -#: includes/custom-texts.php:1026 +#: includes/custom-texts.php:1033 msgid "Image" msgstr "" -#: includes/custom-texts.php:1027 +#: includes/custom-texts.php:1034 msgid "Showing page _PAGE_ of _PAGES_" msgstr "" -#: includes/custom-texts.php:1029 +#: includes/custom-texts.php:1036 msgid "" "There is something wrong about this booking or this action. Please contact " "website admin." msgstr "" -#: includes/custom-texts.php:1030 +#: includes/custom-texts.php:1037 msgid "Invalid cardholder" msgstr "" -#: includes/custom-texts.php:1031 +#: includes/custom-texts.php:1038 msgid "Please enter a valid Credit Card Number." msgstr "" -#: includes/custom-texts.php:1032 +#: includes/custom-texts.php:1039 msgid "Please enter a valid Card Security Code" msgstr "" -#: includes/custom-texts.php:1033 +#: includes/custom-texts.php:1040 msgid "Please enter a valid email" msgstr "" -#: includes/custom-texts.php:1034 +#: includes/custom-texts.php:1041 msgid "Please choose a valid Expiration Date." msgstr "" -#: includes/custom-texts.php:1035 +#: includes/custom-texts.php:1042 msgid "Jitsi" msgstr "" -#: includes/custom-texts.php:1046 +#: includes/custom-texts.php:1053 msgid "Lasts" msgstr "" -#: includes/custom-texts.php:1047 +#: includes/custom-texts.php:1054 msgid "Last Name" msgstr "" -#: includes/custom-texts.php:1049 +#: includes/custom-texts.php:1055 msgid "Display _MENU_ records" msgstr "" -#: includes/custom-texts.php:1050 +#: includes/custom-texts.php:1056 #, php-format msgid "Number of time slot limit (%d) has been reached." msgstr "" -#: includes/custom-texts.php:1051 +#: includes/custom-texts.php:1057 msgid "List" msgstr "" -#: includes/custom-texts.php:1052 +#: includes/custom-texts.php:1058 msgid "Loading..." msgstr "" -#: includes/custom-texts.php:1055 +#: includes/custom-texts.php:1061 msgid "Locations/Stores" msgstr "" -#: includes/custom-texts.php:1057 +#: includes/custom-texts.php:1063 msgid "Location name" msgstr "" -#: includes/custom-texts.php:1058 +#: includes/custom-texts.php:1064 msgid "Location names" msgstr "" -#: includes/custom-texts.php:1059 +#: includes/custom-texts.php:1065 msgid "Location Note" msgstr "" -#: includes/custom-texts.php:1060 +#: includes/custom-texts.php:1066 msgid "You are now logged in" msgstr "" -#: includes/custom-texts.php:1061 +#: includes/custom-texts.php:1067 msgid "Click a free day to apply for an appointment." msgstr "" -#: includes/custom-texts.php:1062 +#: includes/custom-texts.php:1068 msgid "Preparing login..." msgstr "" -#: includes/custom-texts.php:1063 +#: includes/custom-texts.php:1069 msgid "Login" msgstr "" -#: includes/custom-texts.php:1064 -msgid "Please login in order to cancel the appointment" +#: includes/custom-texts.php:1070 +msgid "Please login in order to cancel the booking" msgstr "" -#: includes/custom-texts.php:1065 +#: includes/custom-texts.php:1071 msgid "Please login in order to confirm the booking" msgstr "" -#: includes/custom-texts.php:1066 +#: includes/custom-texts.php:1072 msgid "Please login in order to edit the booking" msgstr "" -#: includes/custom-texts.php:1067 +#: includes/custom-texts.php:1073 msgid "Click here to login:" msgstr "" -#: includes/custom-texts.php:1068 +#: includes/custom-texts.php:1074 msgid "" "It looks like you have previously registered to our website. Please login to " "proceed." msgstr "" -#: includes/custom-texts.php:1069 +#: includes/custom-texts.php:1075 msgid "Please Login to Continue" msgstr "" -#: includes/custom-texts.php:1070 +#: includes/custom-texts.php:1076 msgid "Login with Facebook" msgstr "" -#: includes/custom-texts.php:1071 +#: includes/custom-texts.php:1077 msgid "Login with Google" msgstr "" -#: includes/custom-texts.php:1072 +#: includes/custom-texts.php:1078 msgid "Login with WordPress" msgstr "" -#: includes/custom-texts.php:1073 +#: includes/custom-texts.php:1079 msgid "+REST More" msgstr "" -#: includes/custom-texts.php:1074 includes/custom-texts.php:1205 +#: includes/custom-texts.php:1080 includes/custom-texts.php:1211 msgid "Make Payment" msgstr "" -#: includes/custom-texts.php:1076 +#: includes/custom-texts.php:1082 msgid "" "This record may have been edited by another user and current value may not " "be valid any more." msgstr "" -#: includes/custom-texts.php:1079 +#: includes/custom-texts.php:1085 msgid "minute" msgstr "" -#: includes/custom-texts.php:1080 +#: includes/custom-texts.php:1086 #: includes/freeons/extended-service-features.php:417 msgid "minutes" msgstr "" -#: includes/custom-texts.php:1081 +#: includes/custom-texts.php:1087 msgid "min" msgstr "" -#: includes/custom-texts.php:1082 +#: includes/custom-texts.php:1088 msgid "Please select at least one option from the list" msgstr "" -#: includes/custom-texts.php:1083 +#: includes/custom-texts.php:1089 msgid "Please fill in the required field" msgstr "" -#: includes/custom-texts.php:1084 +#: includes/custom-texts.php:1090 +msgid "Missing booking ID or service" +msgstr "" + +#: includes/custom-texts.php:1091 msgid "Please accept Terms and Conditions" msgstr "" -#: includes/custom-texts.php:1089 +#: includes/custom-texts.php:1096 msgid "Monthly" msgstr "" -#: includes/custom-texts.php:1090 +#: includes/custom-texts.php:1097 msgid "SERVICE - START" msgstr "" -#: includes/custom-texts.php:1091 +#: includes/custom-texts.php:1098 #: includes/freeons/extended-service-features.php:411 msgid "months" msgstr "" -#: includes/custom-texts.php:1092 +#: includes/custom-texts.php:1099 msgid "Guest emails" msgstr "" -#: includes/custom-texts.php:1093 +#: includes/custom-texts.php:1100 #, php-format msgid "email of the %d. guest" msgstr "" -#: includes/custom-texts.php:1094 +#: includes/custom-texts.php:1101 msgid "" "You have successfully created your account! To begin using this site you " "will need to activate your account via the email we have just sent to your " "address." msgstr "" -#: includes/custom-texts.php:1095 +#: includes/custom-texts.php:1102 msgid "Afternoon" msgstr "" -#: includes/custom-texts.php:1096 +#: includes/custom-texts.php:1103 msgid "The user is already active." msgstr "" -#: includes/custom-texts.php:1097 +#: includes/custom-texts.php:1104 #, php-format msgid "" "We have already received your application at %s. Please give us some time to " @@ -21570,837 +22494,845 @@ "message." msgstr "" -#: includes/custom-texts.php:1098 +#: includes/custom-texts.php:1105 msgid "" "You are already assigned to a store. If you need assistance please contact " "admin." msgstr "" -#: includes/custom-texts.php:1099 +#: includes/custom-texts.php:1106 msgid "" "You are already a registered vendor. You don't need to apply again. If you " "need assistance please contact admin." msgstr "" -#: includes/custom-texts.php:1100 +#: includes/custom-texts.php:1107 msgid "Apply Now" msgstr "" -#: includes/custom-texts.php:1101 +#: includes/custom-texts.php:1108 msgid "Become a Vendor" msgstr "" -#: includes/custom-texts.php:1102 +#: includes/custom-texts.php:1109 msgid "By clicking this button, you can apply to be a vendor on our website." msgstr "" -#: includes/custom-texts.php:1103 +#: includes/custom-texts.php:1110 msgid "Do you want to apply to become a vendor?" msgstr "" -#: includes/custom-texts.php:1104 +#: includes/custom-texts.php:1111 msgid "About You" msgstr "" -#: includes/custom-texts.php:1106 +#: includes/custom-texts.php:1113 msgid "About You (Summary)" msgstr "" -#: includes/custom-texts.php:1107 +#: includes/custom-texts.php:1114 msgid "Could not create user" msgstr "" -#: includes/custom-texts.php:1108 +#: includes/custom-texts.php:1115 msgid "Commission" msgstr "" -#: includes/custom-texts.php:1112 +#: includes/custom-texts.php:1119 msgid "Days of the week" msgstr "" -#: includes/custom-texts.php:1113 +#: includes/custom-texts.php:1120 msgid "Please contact admin for assistance" msgstr "" -#: includes/custom-texts.php:1115 +#: includes/custom-texts.php:1122 msgid "Sorry, that email address is not allowed!" msgstr "" -#: includes/custom-texts.php:1116 +#: includes/custom-texts.php:1123 msgid "Sorry, that email address is already used!" msgstr "" -#: includes/custom-texts.php:1117 +#: includes/custom-texts.php:1124 msgid "Please check your email address." msgstr "" -#: includes/custom-texts.php:1118 +#: includes/custom-texts.php:1125 msgid "Evening" msgstr "" -#: includes/custom-texts.php:1119 +#: includes/custom-texts.php:1126 msgid "" "Invalid activation key. If you used activation key before, please wait for " "our response email." msgstr "" -#: includes/custom-texts.php:1120 +#: includes/custom-texts.php:1127 msgid "You are already a vendor" msgstr "" -#: includes/custom-texts.php:1121 +#: includes/custom-texts.php:1128 msgid "Late afternoon" msgstr "" -#: includes/custom-texts.php:1122 +#: includes/custom-texts.php:1129 msgid "Late Evening" msgstr "" -#: includes/custom-texts.php:1123 +#: includes/custom-texts.php:1130 msgid "Late morning" msgstr "" -#: includes/custom-texts.php:1124 +#: includes/custom-texts.php:1131 msgid "Late Night" msgstr "" -#: includes/custom-texts.php:1125 +#: includes/custom-texts.php:1132 msgid "" "You have successfully created your account! Please log in using the username " "and password you have just created. Click here to LOGIN_PAGE" msgstr "" -#: includes/custom-texts.php:1126 +#: includes/custom-texts.php:1133 msgid "Morning" msgstr "" -#: includes/custom-texts.php:1127 +#: includes/custom-texts.php:1134 msgid "Night" msgstr "" -#: includes/custom-texts.php:1128 +#: includes/custom-texts.php:1135 msgid "You must indicate that you have read and agreed to the Privacy Policy." msgstr "" -#: includes/custom-texts.php:1129 +#: includes/custom-texts.php:1136 msgid "Override Prices" msgstr "" -#: includes/custom-texts.php:1130 +#: includes/custom-texts.php:1137 msgid "" "You can override prices of each service here. If you leave a price field " "empty, its regular price will be used. If you set a price as zero, it will " "be free." msgstr "" -#: includes/custom-texts.php:1131 +#: includes/custom-texts.php:1138 msgid "Your personal page could not be found. Please contact admin." msgstr "" -#: includes/custom-texts.php:1132 +#: includes/custom-texts.php:1139 msgid "Please make sure you enter your password twice" msgstr "" -#: includes/custom-texts.php:1133 +#: includes/custom-texts.php:1140 msgid "The passwords you entered do not match" msgstr "" -#: includes/custom-texts.php:1135 +#: includes/custom-texts.php:1142 msgid "Tags" msgstr "" -#: includes/custom-texts.php:1136 +#: includes/custom-texts.php:1143 msgid "Complete Sign Up" msgstr "" -#: includes/custom-texts.php:1138 +#: includes/custom-texts.php:1145 msgid "Tagline" msgstr "" -#: includes/custom-texts.php:1139 +#: includes/custom-texts.php:1146 msgid "Time of the day" msgstr "" -#: includes/custom-texts.php:1140 +#: includes/custom-texts.php:1147 msgid "Title" msgstr "" -#: includes/custom-texts.php:1141 +#: includes/custom-texts.php:1148 msgid "Upload Photo" msgstr "" -#: includes/custom-texts.php:1142 +#: includes/custom-texts.php:1149 msgid "Please enter a username" msgstr "" -#: includes/custom-texts.php:1143 +#: includes/custom-texts.php:1150 msgid "Sorry, that username already exists!" msgstr "" -#: includes/custom-texts.php:1144 +#: includes/custom-texts.php:1151 msgid "That username is not allowed" msgstr "" -#: includes/custom-texts.php:1145 +#: includes/custom-texts.php:1152 msgid "Usernames can contain only letters, numbers, ., -, and @" msgstr "" -#: includes/custom-texts.php:1146 +#: includes/custom-texts.php:1153 msgid "Sorry, usernames must have letters too!" msgstr "" -#: includes/custom-texts.php:1147 +#: includes/custom-texts.php:1154 msgid "Username must be at least 4 characters" msgstr "" -#: includes/custom-texts.php:1148 +#: includes/custom-texts.php:1155 msgid "Sorry, usernames may not contain the character \"_\"!" msgstr "" -#: includes/custom-texts.php:1149 +#: includes/custom-texts.php:1156 msgid "Video" msgstr "" -#: includes/custom-texts.php:1150 +#: includes/custom-texts.php:1157 msgid "" "Please wait until you receive an email from us about the result of your " "vendor application." msgstr "" -#: includes/custom-texts.php:1153 +#: includes/custom-texts.php:1159 msgid "Next" msgstr "" -#: includes/custom-texts.php:1154 +#: includes/custom-texts.php:1160 msgid "Ends next day" msgstr "" -#: includes/custom-texts.php:1156 +#: includes/custom-texts.php:1162 msgid "Next Months" msgstr "" -#: includes/custom-texts.php:1158 +#: includes/custom-texts.php:1164 msgid "Next Weeks" msgstr "" -#: includes/custom-texts.php:1161 +#: includes/custom-texts.php:1167 msgid "Cancelled Jobs" msgstr "" -#: includes/custom-texts.php:1162 +#: includes/custom-texts.php:1168 msgid "Completed Jobs" msgstr "" -#: includes/custom-texts.php:1163 +#: includes/custom-texts.php:1169 msgid "Remaining Jobs" msgstr "" -#: includes/custom-texts.php:1164 +#: includes/custom-texts.php:1170 msgid "Total Jobs" msgstr "" -#: includes/custom-texts.php:1166 +#: includes/custom-texts.php:1172 msgid "Guest names" msgstr "" -#: includes/custom-texts.php:1167 +#: includes/custom-texts.php:1173 #, php-format msgid "Name of the %d. guest" msgstr "" -#: includes/custom-texts.php:1168 +#: includes/custom-texts.php:1174 msgid "No Show" msgstr "" -#: includes/custom-texts.php:1170 +#: includes/custom-texts.php:1176 msgid "You did not make any changes." msgstr "" -#: includes/custom-texts.php:1171 +#: includes/custom-texts.php:1177 msgid "Notice" msgstr "" -#: includes/custom-texts.php:1172 +#: includes/custom-texts.php:1178 msgid "This time slot has been already booked. Please pick another time." msgstr "" -#: includes/custom-texts.php:1173 +#: includes/custom-texts.php:1179 msgid "Not defined" msgstr "" -#: includes/custom-texts.php:1174 +#: includes/custom-texts.php:1180 msgid "" "We are sorry, but we do not have enough capacity to fulfil the request at " "the moment. Please refresh the page and try other time slots. Thank you." msgstr "" -#: includes/custom-texts.php:1175 +#: includes/custom-texts.php:1181 msgid "Not enough credits" msgstr "" -#: includes/custom-texts.php:1176 +#: includes/custom-texts.php:1182 msgid "You don't have enough service package left" msgstr "" -#: includes/custom-texts.php:1177 +#: includes/custom-texts.php:1183 msgid "" "You need to login for this action. Click here to login: LOGIN_PAGE OR click " "here to register: REGISTRATION_PAGE" msgstr "" -#: includes/custom-texts.php:1178 +#: includes/custom-texts.php:1184 msgid "" "Action failed, because our records could not confirm that this booking was " "made by you in the first place." msgstr "" -#: includes/custom-texts.php:1179 +#: includes/custom-texts.php:1185 msgid "Action or selection is not possible." msgstr "" -#: includes/custom-texts.php:1180 +#: includes/custom-texts.php:1186 msgid "Booking is not possible at the moment." msgstr "" -#: includes/custom-texts.php:1181 +#: includes/custom-texts.php:1187 msgid "" "Sorry, service or provider is not available for the selected date/time. " "Please pick another time." msgstr "" -#: includes/custom-texts.php:1182 +#: includes/custom-texts.php:1188 msgid "No bookings" msgstr "" -#: includes/custom-texts.php:1183 includes/custom-texts.php:1188 +#: includes/custom-texts.php:1189 includes/custom-texts.php:1194 #: includes/debug.php:245 msgid "Not available" msgstr "" -#: includes/custom-texts.php:1184 +#: includes/custom-texts.php:1190 msgid "No preference" msgstr "" -#: includes/custom-texts.php:1185 +#: includes/custom-texts.php:1191 msgid "No repeat" msgstr "" -#: includes/custom-texts.php:1186 +#: includes/custom-texts.php:1192 msgid "No services" msgstr "" -#: includes/custom-texts.php:1187 +#: includes/custom-texts.php:1193 msgid "No result" msgstr "" -#: includes/custom-texts.php:1189 +#: includes/custom-texts.php:1195 msgid "(optional)" msgstr "" -#: includes/custom-texts.php:1190 +#: includes/custom-texts.php:1196 msgid "Order No" msgstr "" -#: includes/custom-texts.php:1191 +#: includes/custom-texts.php:1197 msgid "Staff" msgstr "" -#: includes/custom-texts.php:1196 +#: includes/custom-texts.php:1202 msgid "All paid up." msgstr "" -#: includes/custom-texts.php:1197 +#: includes/custom-texts.php:1203 msgid "Participants" msgstr "" -#: includes/custom-texts.php:1198 +#: includes/custom-texts.php:1204 #, php-format msgid "%d. Guest - %s" msgstr "" -#: includes/custom-texts.php:1199 +#: includes/custom-texts.php:1205 msgid "Partly Busy" msgstr "" -#: includes/custom-texts.php:1200 includes/custom-texts.php:1379 +#: includes/custom-texts.php:1206 includes/custom-texts.php:1384 msgid "Password" msgstr "" -#: includes/custom-texts.php:1201 +#: includes/custom-texts.php:1207 msgid "Repeat Password" msgstr "" -#: includes/custom-texts.php:1202 +#: includes/custom-texts.php:1208 msgid "You cannot select a past date/time." msgstr "" -#: includes/custom-texts.php:1204 +#: includes/custom-texts.php:1210 msgid "Payment method selection required" msgstr "" -#: includes/custom-texts.php:1206 +#: includes/custom-texts.php:1212 msgid "PayPal" msgstr "" -#: includes/custom-texts.php:1208 +#: includes/custom-texts.php:1214 msgid "Email of PayPal account where commission payments will be sent" msgstr "" -#: includes/custom-texts.php:1209 +#: includes/custom-texts.php:1215 msgid "Please enter a valid PayPal Email or leave it empty" msgstr "" -#: includes/custom-texts.php:1210 +#: includes/custom-texts.php:1216 msgid "Confirm Payment" msgstr "" -#: includes/custom-texts.php:1211 +#: includes/custom-texts.php:1217 msgid "" "Please confirm payment of <strong>AMOUNT</strong> for this booking that will " "be collected from your <strong>EMAIL</strong> PayPal account." msgstr "" -#: includes/custom-texts.php:1212 +#: includes/custom-texts.php:1218 msgid "Pay AMOUNT" msgstr "" -#: includes/custom-texts.php:1213 +#: includes/custom-texts.php:1219 msgid "Payment Method" msgstr "" -#: includes/custom-texts.php:1215 +#: includes/custom-texts.php:1221 msgid "Pdf" msgstr "" -#: includes/custom-texts.php:1216 +#: includes/custom-texts.php:1222 msgid "Download" msgstr "" -#: includes/custom-texts.php:1217 +#: includes/custom-texts.php:1223 msgid "Confirmation in pdf form will be downloaded to your PC." msgstr "" -#: includes/custom-texts.php:1219 +#: includes/custom-texts.php:1225 msgid "Pending Approval" msgstr "" -#: includes/custom-texts.php:1220 +#: includes/custom-texts.php:1226 msgid "Pending Payment" msgstr "" -#: includes/custom-texts.php:1221 +#: includes/custom-texts.php:1227 msgid "Pax Details" msgstr "" -#: includes/custom-texts.php:1224 +#: includes/custom-texts.php:1229 msgid "Please Wait..." msgstr "" -#: includes/custom-texts.php:1225 +#: includes/custom-texts.php:1230 msgid "PM to RECIPIENT" msgstr "" -#: includes/custom-texts.php:1226 +#: includes/custom-texts.php:1231 #, php-format msgid "Phone of the %d. guest" msgstr "" -#: includes/custom-texts.php:1227 +#: includes/custom-texts.php:1232 msgid "Preferred Language" msgstr "" -#: includes/custom-texts.php:1228 +#: includes/custom-texts.php:1233 msgid "Preparing form..." msgstr "" -#: includes/custom-texts.php:1229 +#: includes/custom-texts.php:1234 msgid "Checking..." msgstr "" -#: includes/custom-texts.php:1230 +#: includes/custom-texts.php:1235 msgid "Previous" msgstr "" -#: includes/custom-texts.php:1231 +#: includes/custom-texts.php:1236 msgid "Previous Month" msgstr "" -#: includes/custom-texts.php:1232 +#: includes/custom-texts.php:1237 msgid "Previous Months" msgstr "" -#: includes/custom-texts.php:1233 +#: includes/custom-texts.php:1238 msgid "Previous Week" msgstr "" -#: includes/custom-texts.php:1234 +#: includes/custom-texts.php:1239 msgid "Previous Weeks" msgstr "" -#: includes/custom-texts.php:1236 +#: includes/custom-texts.php:1241 msgid "We are sorry, but this price is no more valid." msgstr "" -#: includes/custom-texts.php:1237 +#: includes/custom-texts.php:1242 msgid "" "We are glad to inform you that we can offer even a better price now. Please " "review the new price and confirm again." msgstr "" -#: includes/custom-texts.php:1238 +#: includes/custom-texts.php:1243 msgid "PM" msgstr "" -#: includes/custom-texts.php:1239 +#: includes/custom-texts.php:1244 msgid "Click OK to proceed." msgstr "" -#: includes/custom-texts.php:1240 +#: includes/custom-texts.php:1245 msgid "Processing..." msgstr "" -#: includes/custom-texts.php:1243 +#: includes/custom-texts.php:1248 msgid "Specialist" msgstr "" -#: includes/custom-texts.php:1244 +#: includes/custom-texts.php:1249 msgid "Specialists" msgstr "" -#: includes/custom-texts.php:1245 +#: includes/custom-texts.php:1250 msgid "" "Sorry, but you have reached the booking quota. No additional bookings are " "allowed." msgstr "" -#: includes/custom-texts.php:1246 +#: includes/custom-texts.php:1251 +msgid "Read More »" +msgstr "" + +#: includes/custom-texts.php:1252 msgid "Reading data..." msgstr "" -#: includes/custom-texts.php:1247 +#: includes/custom-texts.php:1253 msgid "" "Login required for this action. Now you will be redirected to login page." msgstr "" -#: includes/custom-texts.php:1248 +#: includes/custom-texts.php:1254 msgid "Reference" msgstr "" -#: includes/custom-texts.php:1249 +#: includes/custom-texts.php:1255 msgid "Refreshing" msgstr "" -#: includes/custom-texts.php:1250 includes/schedules.php:493 +#: includes/custom-texts.php:1256 includes/schedules.php:508 msgid "Register" msgstr "" -#: includes/custom-texts.php:1251 +#: includes/custom-texts.php:1257 msgid "Remember me" msgstr "" -#: includes/custom-texts.php:1252 +#: includes/custom-texts.php:1258 msgid "Removed!" msgstr "" -#: includes/custom-texts.php:1253 +#: includes/custom-texts.php:1259 msgid "Removed" msgstr "" -#: includes/custom-texts.php:1255 +#: includes/custom-texts.php:1261 msgid "Reserved by GCal" msgstr "" -#: includes/custom-texts.php:1256 +#: includes/custom-texts.php:1262 msgid "Resource" msgstr "" -#: includes/custom-texts.php:1258 +#: includes/custom-texts.php:1264 msgid "Room ID" msgstr "" -#: includes/custom-texts.php:1259 +#: includes/custom-texts.php:1265 msgid "In Progress" msgstr "" -#: includes/custom-texts.php:1264 includes/notices.php:530 +#: includes/custom-texts.php:1270 includes/notices.php:530 msgid "Settings saved." msgstr "" -#: includes/custom-texts.php:1265 +#: includes/custom-texts.php:1271 msgid "Save changes" msgstr "" -#: includes/custom-texts.php:1266 +#: includes/custom-texts.php:1272 msgid "Booking could not be saved. Please contact website admin." msgstr "" -#: includes/custom-texts.php:1267 +#: includes/custom-texts.php:1273 msgid "Saving..." msgstr "" -#: includes/custom-texts.php:1270 +#: includes/custom-texts.php:1276 msgid "Seats Left" msgstr "" -#: includes/custom-texts.php:1271 +#: includes/custom-texts.php:1277 msgid "Seats Total" msgstr "" -#: includes/custom-texts.php:1272 +#: includes/custom-texts.php:1278 msgid "Seats Total/Left" msgstr "" -#: includes/custom-texts.php:1273 +#: includes/custom-texts.php:1279 msgid "second" msgstr "" -#: includes/custom-texts.php:1274 +#: includes/custom-texts.php:1280 msgid "seconds" msgstr "" -#: includes/custom-texts.php:1276 +#: includes/custom-texts.php:1282 msgid "Select" msgstr "" -#: includes/custom-texts.php:1277 +#: includes/custom-texts.php:1283 msgid "Please select" msgstr "" -#: includes/custom-texts.php:1278 +#: includes/custom-texts.php:1284 msgid "Selected" msgstr "" -#: includes/custom-texts.php:1279 +#: includes/custom-texts.php:1285 msgid "Refresh" msgstr "" -#: includes/custom-texts.php:1280 +#: includes/custom-texts.php:1286 msgid "Select credits to buy" msgstr "" -#: includes/custom-texts.php:1281 +#: includes/custom-texts.php:1287 msgid "Select Date" msgstr "" -#: includes/custom-texts.php:1284 +#: includes/custom-texts.php:1290 msgid "Selection limit exceeded" msgstr "" -#: includes/custom-texts.php:1285 +#: includes/custom-texts.php:1291 msgid "Select Location" msgstr "" -#: includes/custom-texts.php:1286 +#: includes/custom-texts.php:1292 msgid "Select Specialist" msgstr "" -#: includes/custom-texts.php:1289 +#: includes/custom-texts.php:1295 msgid "Occurence" msgstr "" -#: includes/custom-texts.php:1290 +#: includes/custom-texts.php:1296 msgid "Number of Guests" msgstr "" -#: includes/custom-texts.php:1294 +#: includes/custom-texts.php:1300 msgid "Server Time" msgstr "" -#: includes/custom-texts.php:1295 +#: includes/custom-texts.php:1301 msgid "Server Day" msgstr "" -#: includes/custom-texts.php:1296 +#: includes/custom-texts.php:1302 msgid "Server Timezone" msgstr "" -#: includes/custom-texts.php:1302 +#: includes/custom-texts.php:1308 msgid "Please select at least one service" msgstr "" -#: includes/custom-texts.php:1304 +#: includes/custom-texts.php:1310 msgid "Session" msgstr "" -#: includes/custom-texts.php:1306 +#: includes/custom-texts.php:1312 msgid "Showing" msgstr "" -#: includes/custom-texts.php:1307 +#: includes/custom-texts.php:1313 msgid "Sort Order" msgstr "" -#: includes/custom-texts.php:1308 +#: includes/custom-texts.php:1314 msgid "" "You have already applied for an appointment. Please wait until you hear from " "us." msgstr "" -#: includes/custom-texts.php:1309 +#: includes/custom-texts.php:1315 msgid "Stand by" msgstr "" -#: includes/custom-texts.php:1311 +#: includes/custom-texts.php:1317 msgid "State" msgstr "" -#: includes/custom-texts.php:1315 +#: includes/custom-texts.php:1320 msgid "Store" msgstr "" -#: includes/custom-texts.php:1317 +#: includes/custom-texts.php:1322 msgid "Store Settings" msgstr "" -#: includes/custom-texts.php:1318 +#: includes/custom-texts.php:1323 msgid "Submit" msgstr "" -#: includes/custom-texts.php:1319 +#: includes/custom-texts.php:1324 msgid "Summary" msgstr "" -#: includes/custom-texts.php:1323 +#: includes/custom-texts.php:1328 msgid "Tax" msgstr "" -#: includes/custom-texts.php:1324 +#: includes/custom-texts.php:1329 msgid "To be announced" msgstr "" -#: includes/custom-texts.php:1329 +#: includes/custom-texts.php:1334 msgid "Time" msgstr "" -#: includes/custom-texts.php:1330 +#: includes/custom-texts.php:1335 msgid "Duty Roster" msgstr "" -#: includes/custom-texts.php:1331 +#: includes/custom-texts.php:1336 msgid "Time Zone" msgstr "" -#: includes/custom-texts.php:1332 +#: includes/custom-texts.php:1337 msgid "Select your timezone" msgstr "" -#: includes/custom-texts.php:1334 -msgid "We are sorry, but it is too late for this action." +#: includes/custom-texts.php:1339 +msgid "It is too early for this action." msgstr "" -#: includes/custom-texts.php:1335 +#: includes/custom-texts.php:1340 +msgid "It is too late for this action." +msgstr "" + +#: includes/custom-texts.php:1341 #, php-format msgid "You should select at least %d time slots to proceed." msgstr "" -#: includes/custom-texts.php:1337 +#: includes/custom-texts.php:1343 msgid "You have exceeded trial services limit LIMIT" msgstr "" -#: includes/custom-texts.php:1338 +#: includes/custom-texts.php:1344 msgid "You can take only one trial service from the same person" msgstr "" -#: includes/custom-texts.php:1339 +#: includes/custom-texts.php:1345 msgid "Price after coupon applied" msgstr "" -#: includes/custom-texts.php:1340 +#: includes/custom-texts.php:1346 msgid "Special price for you" msgstr "" -#: includes/custom-texts.php:1341 +#: includes/custom-texts.php:1347 msgid "Regular price" msgstr "" -#: includes/custom-texts.php:1345 +#: includes/custom-texts.php:1351 msgid "" "Authorization check failed. Try to refresh page. If you are logged in, try " "to log out and login again." msgstr "" -#: includes/custom-texts.php:1348 includes/notices.php:546 +#: includes/custom-texts.php:1354 includes/notices.php:546 msgid "Selected record(s) updated." msgstr "" -#: includes/custom-texts.php:1349 +#: includes/custom-texts.php:1355 msgid "Updating..." msgstr "" -#: includes/custom-texts.php:1350 +#: includes/custom-texts.php:1356 msgid "Username" msgstr "" -#: includes/custom-texts.php:1351 +#: includes/custom-texts.php:1357 msgid "Username or email" msgstr "" -#: includes/custom-texts.php:1352 +#: includes/custom-texts.php:1358 msgid "Use Server Timezone" msgstr "" -#: includes/custom-texts.php:1356 +#: includes/custom-texts.php:1362 msgid "Add to Waiting List" msgstr "" -#: includes/custom-texts.php:1357 +#: includes/custom-texts.php:1363 msgid "" "Unfortunately this slot has been reserved. Please wait for another " "notification message from us." msgstr "" -#: includes/custom-texts.php:1362 includes/functions.internal.php:1597 +#: includes/custom-texts.php:1368 includes/functions.internal.php:1597 msgid "Weekday" msgstr "" -#: includes/custom-texts.php:1363 includes/functions.internal.php:1598 +#: includes/custom-texts.php:1369 includes/functions.internal.php:1598 msgid "Weekend" msgstr "" -#: includes/custom-texts.php:1364 +#: includes/custom-texts.php:1370 msgid "Weekly" msgstr "" -#: includes/custom-texts.php:1365 +#: includes/custom-texts.php:1371 msgid "SERVICE - START_END" msgstr "" -#: includes/custom-texts.php:1366 +#: includes/custom-texts.php:1372 msgid "weeks" msgstr "" -#: includes/custom-texts.php:1370 +#: includes/custom-texts.php:1376 #, php-format msgid "Please check submitted %s entry!" msgstr "" -#: includes/custom-texts.php:1371 +#: includes/custom-texts.php:1377 msgid "Year" msgstr "" -#: includes/custom-texts.php:1373 +#: includes/custom-texts.php:1379 msgid "Your Rate" msgstr "" -#: includes/custom-texts.php:1401 +#: includes/custom-texts.php:1406 msgid "Custom Texts" msgstr "" -#: includes/custom-texts.php:1452 +#: includes/custom-texts.php:1457 msgid "" "Here you can quickly customize <b>admin side</b> terms and localize " "(translate) some or all of the <b>front end</b> texts (javascript messages, " "column names, day names, field titles, etc)." msgstr "" -#: includes/custom-texts.php:1453 +#: includes/custom-texts.php:1458 msgid "" "<b>Admin side text replace</b> is intended for quick terminology change, not " "for translation. To make a full localization for the admin side, use a " "translation tool, e.g. Loco Translate, instead." msgstr "" -#: includes/custom-texts.php:1455 +#: includes/custom-texts.php:1460 msgid "" "<b>Front end text replace</b> usage: Search for the original text using the " "Search field. Matching results will be dynamically filtered. Enter your " @@ -22411,7 +23343,7 @@ "the default text will be used." msgstr "" -#: includes/custom-texts.php:1457 +#: includes/custom-texts.php:1462 msgid "" "Note for <b>shortcode texts:</b> When a shortcode parameter (e.g. " "monthly_title: Title of monthly calendar) is not explicitly set, it will be " @@ -22421,17 +23353,17 @@ "not set, the default text." msgstr "" -#: includes/custom-texts.php:1466 +#: includes/custom-texts.php:1471 msgid "Admin Side Text Replace" msgstr "" -#: includes/custom-texts.php:1470 +#: includes/custom-texts.php:1475 msgid "" "Enter find|replace pairs. Example: service provider|specialist, provider|" "specialist, services|facilities, service|facility" msgstr "" -#: includes/custom-texts.php:1472 +#: includes/custom-texts.php:1477 msgid "" "Here you can enter old text|new text pairs to replace a term globally on " "admin side. Separate multiple entries by comma, e.g. \"service provider|" @@ -22443,23 +23375,23 @@ "as well. For example, Service will be replaced with Facility." msgstr "" -#: includes/custom-texts.php:1480 +#: includes/custom-texts.php:1485 msgid "Front End Text Replace" msgstr "" -#: includes/custom-texts.php:1486 +#: includes/custom-texts.php:1491 msgid "Descr." msgstr "" -#: includes/custom-texts.php:1487 +#: includes/custom-texts.php:1492 msgid "Default Text (Not editable)" msgstr "" -#: includes/custom-texts.php:1488 +#: includes/custom-texts.php:1493 msgid "Your Text (Editable)" msgstr "" -#: includes/custom-texts.php:1527 +#: includes/custom-texts.php:1532 msgid "Save Custom Texts" msgstr "" @@ -22559,11 +23491,11 @@ msgid "Not possible to book" msgstr "" -#: includes/freeons/categories/categories.php:299 +#: includes/freeons/categories/categories.php:292 msgid "Category:" msgstr "" -#: includes/freeons/categories/categories.php:359 +#: includes/freeons/categories/categories.php:352 msgid "" "Service categories are optional. They can be used in order to group your " "services. Once you define categories, you will need to assign each service " @@ -22571,19 +23503,19 @@ "at the front end." msgstr "" -#: includes/freeons/categories/categories.php:368 +#: includes/freeons/categories/categories.php:361 msgid "Add New Category" msgstr "" -#: includes/freeons/categories/categories.php:400 +#: includes/freeons/categories/categories.php:393 msgid "No categories defined" msgstr "" -#: includes/freeons/categories/categories.php:408 +#: includes/freeons/categories/categories.php:401 msgid "<i>Tip: To delete a category, just clear its name and save.</i>" msgstr "" -#: includes/freeons/categories/categories.php:415 +#: includes/freeons/categories/categories.php:408 msgid "Save Categories" msgstr "" @@ -23156,19 +24088,6 @@ msgid "FE Booking Management" msgstr "" -#: includes/freeons/front-end-edit.php:339 -#: includes/freeons/front-end-edit.php:364 -msgid "Edit Booking" -msgstr "" - -#: includes/freeons/front-end-edit.php:824 -msgid "Front End Edit" -msgstr "" - -#: includes/freeons/front-end-edit.php:849 -msgid "Display, but do not change" -msgstr "" - #: includes/freeons/limited-availability.php:67 msgid "Availability" msgstr "" @@ -23213,10 +24132,6 @@ msgstr "" #: includes/freeons/manual-payments/manual-payments.php:108 -msgid "Transaction ID" -msgstr "" - -#: includes/freeons/manual-payments/manual-payments.php:108 msgid "e.g. receipt no, check no" msgstr "" @@ -23450,24 +24365,24 @@ msgid " %1$s confirmed appointment of %2$s having ID: %3$s" msgstr "" -#: includes/front-listing.php:126 +#: includes/front-listing.php:195 msgid "Check \"status\" parameter in List shortcode" msgstr "" -#: includes/front-listing.php:174 +#: includes/front-listing.php:243 msgid "" "Not enough capability to view bookings when \"what\" attribute is \"all\"" msgstr "" -#: includes/front-listing.php:177 includes/front-listing.php:484 +#: includes/front-listing.php:246 includes/front-listing.php:625 msgid "Check \"what\" parameter in List shortcode" msgstr "" -#: includes/front-listing.php:329 +#: includes/front-listing.php:470 msgid "Connected bookings" msgstr "" -#: includes/front-listing.php:612 +#: includes/front-listing.php:754 #, php-format msgid "Click to manage booking #%s" msgstr "" @@ -23484,7 +24399,7 @@ msgid "Connected with mobile device. Content wrapped by shortcode ignored." msgstr "" -#: includes/front.php:2011 +#: includes/front.php:2013 msgid "Check \"Unit\" parameter in Pagination shortcode" msgstr "" @@ -23496,21 +24411,21 @@ msgid "Select country" msgstr "" -#: includes/functions.booking.php:447 +#: includes/functions.booking.php:436 msgid "User does not exist" msgstr "" -#: includes/functions.front.php:764 +#: includes/functions.front.php:766 #, php-format msgid "Check \"%s\" attribute(s) in Book shortcode" msgstr "" -#: includes/functions.front.php:804 +#: includes/functions.front.php:806 #, php-format msgid "Check \"%s\" attribute in Book shortcode" msgstr "" -#: includes/functions.front.php:1264 +#: includes/functions.front.php:1266 msgid "Check \"range\" attribute in book shortcode" msgstr "" @@ -23617,52 +24532,52 @@ "Required: 3.5.0 - Installed: %s" msgstr "" -#: includes/functions.internal.php:2934 +#: includes/functions.internal.php:2969 msgid "below" msgstr "" -#: includes/functions.internal.php:2937 +#: includes/functions.internal.php:2972 #, php-format msgid "%s is not activated" msgstr "" -#: includes/functions.internal.php:2941 +#: includes/functions.internal.php:2976 msgid "Monthly calendar" msgstr "" -#: includes/functions.internal.php:2942 +#: includes/functions.internal.php:2977 msgid "Weekly calendar - 2 weeks" msgstr "" -#: includes/functions.internal.php:2943 +#: includes/functions.internal.php:2978 msgid "Table view - 10 booking rows" msgstr "" -#: includes/functions.internal.php:2944 +#: includes/functions.internal.php:2979 msgid "Table view - 2 days" msgstr "" -#: includes/functions.internal.php:2946 +#: includes/functions.internal.php:2981 msgid "Flex view - Vertical, 2 weeks" msgstr "" -#: includes/functions.internal.php:2947 +#: includes/functions.internal.php:2982 msgid "Flex view - Horizontal, 10 days" msgstr "" -#: includes/functions.internal.php:2951 +#: includes/functions.internal.php:2986 msgid "Create Page Now" msgstr "" -#: includes/functions.internal.php:2959 +#: includes/functions.internal.php:2994 msgid "Also create a My Account Page" msgstr "" -#: includes/functions.internal.php:2963 +#: includes/functions.internal.php:2998 msgid "Also redirect client to My Account Page" msgstr "" -#: includes/functions.internal.php:2968 +#: includes/functions.internal.php:3003 #, php-format msgid "" "Immediately creates a front end booking page with title \"%s\" with the " @@ -23671,25 +24586,25 @@ "customize this page later." msgstr "" -#: includes/functions.internal.php:2969 +#: includes/functions.internal.php:3004 #, php-format msgid "For layout examples, please visit our %s." msgstr "" -#: includes/functions.internal.php:2972 +#: includes/functions.internal.php:3007 msgid "" "Checking \"Create a My Account Page\" checkbox will additionally create a " "page with title \"My Account\" with <code>[app_account]</code> shortcode." msgstr "" -#: includes/functions.internal.php:2973 +#: includes/functions.internal.php:3008 #, php-format msgid "" "Checking \"Redirect client...\" checkbox will automatically fill the " "Redirect Url field %s." msgstr "" -#: includes/functions.internal.php:2982 +#: includes/functions.internal.php:3017 #, php-format msgid "" "<b>Note:</b> You already have a \"%s\" page. If you click Create page Now " @@ -23697,10 +24612,31 @@ "page:" msgstr "" -#: includes/functions.internal.php:2985 +#: includes/functions.internal.php:3020 msgid "To view the page:" msgstr "" +#: includes/functions.listing.php:148 includes/schedules.php:401 +#, php-format +msgid "EDIT BOOKING (%d)" +msgstr "" + +#: includes/functions.listing.php:377 +msgid "This is not your booking" +msgstr "" + +#: includes/functions.listing.php:506 includes/schedules.php:812 +msgid "Changes saved. Closing shortly..." +msgstr "" + +#: includes/functions.listing.php:812 +msgid "Dock to left" +msgstr "" + +#: includes/functions.listing.php:813 +msgid "Dock to right" +msgstr "" + #: includes/gateways.php:88 #, php-format msgid "" @@ -24082,64 +25018,43 @@ "the plugin (DO NOT delete the plugin). You will not lose any data." msgstr "" -#: includes/schedules.php:185 -msgid "Role not supported at the moment" -msgstr "" - -#: includes/schedules.php:386 -#, php-format -msgid "EDIT BOOKING (%d)" -msgstr "" - -#: includes/schedules.php:495 +#: includes/schedules.php:510 msgid "If checked and email provided, new client will be created" msgstr "" -#: includes/schedules.php:529 +#: includes/schedules.php:544 msgid "Notify" msgstr "" -#: includes/schedules.php:530 +#: includes/schedules.php:545 msgid "Send Email to Client" msgstr "" -#: includes/schedules.php:785 +#: includes/schedules.php:810 msgid "New appointment successfully saved. Closing shortly..." msgstr "" -#: includes/schedules.php:787 -msgid "Changes saved. Closing shortly..." -msgstr "" - -#: includes/schedules.php:1011 -msgid "Dock to left" -msgstr "" - -#: includes/schedules.php:1012 -msgid "Dock to right" -msgstr "" - -#: includes/schedules.php:1036 +#: includes/schedules.php:1248 msgid "All Statuses" msgstr "" -#: includes/schedules.php:1054 +#: includes/schedules.php:1266 msgid "All Stores" msgstr "" -#: includes/schedules.php:1054 +#: includes/schedules.php:1266 msgid "All Locations" msgstr "" -#: includes/schedules.php:1069 +#: includes/schedules.php:1281 msgid "All Services" msgstr "" -#: includes/schedules.php:1085 +#: includes/schedules.php:1297 msgid "All Providers" msgstr "" -#: includes/schedules.php:1116 +#: includes/schedules.php:1328 msgid "All Days" msgstr "" @@ -24154,33 +25069,33 @@ "continue to checkout or purchase the booking." msgstr "" -#: includes/user.php:695 +#: includes/user.php:703 #, php-format msgid "" "Spam attack from IP %1$s has been avoided. User Agent: %2$s. User ID: %3$s. " "Submitted data: %4$s" msgstr "" -#: includes/user.php:1199 +#: includes/user.php:1201 #, php-format msgid "Provider %1$s cancelled booking with ID: %2$s" msgstr "" -#: includes/user.php:1202 +#: includes/user.php:1204 #, php-format msgid "Client %1$s cancelled booking with ID: %2$s" msgstr "" -#: includes/user.php:1230 +#: includes/user.php:1232 #, php-format msgid "Service Provider %1$s manually confirmed appointment with ID: %2$s" msgstr "" -#: includes/user.php:1237 +#: includes/user.php:1239 msgid "Selected appointment has been confirmed" msgstr "" -#: includes/user.php:1285 +#: includes/user.php:1287 #, php-format msgid "%s Bookings & Settings" msgstr "" @@ -1,10 +1,10 @@ === WP BASE Booking of Appointments, Services and Events === Contributors: PuckRobin -Tags: appointment booking, service booking, booking calendar, multi vendor, buddypress +Tags: appointment booking, service booking, booking calendar, multi vendor, buddyboss Requires at least: 4.4.0 -Tested up to: 6.9 -Stable tag: 5.9.0 -Requires PHP: 5.5.0 +Tested up to: 7.0 +Stable tag: 6.0.0 +Requires PHP: 7.0.0 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -147,7 +147,6 @@ * [Easy Digital Downloads Integration](https://wp-base.com/downloads/easy-digital-downloads-integration/): WP BASE services can be sold as digital products (downloads) of EDD alone, with other services or with other downloads. * [Export & Import](https://wp-base.com/downloads/export-import/): Allows export and import of WP BASE settings and database tables to/from another site/subsite. Includes import option from [Appointments by WPMU DEV](https://github.com/wpmudev/appointments). * [Extended Service Features & Categories Addon](https://wp-base.com/downloads/extended-service-features-categories/) allows several website settings to be applied per service. It also adds category support to services. -* [Front End Edit](https://wp-base.com/downloads/front-end-edit/): Allows client edit their bookings, reschedule appointments, modify user fields on the front end. Admins or any user with selected capability, e.g. editors, can also edit others' bookings using the same interface. * [Front End Booking Management](https://wp-base.com/downloads/front-end-booking-management/): Allows admin or any user with selected capability add and edit all bookings and submitted user fields on the front end. * [Limited Availability](https://wp-base.com/downloads/limited-availability/): Availability of each service can be easily set on a full calendar making them suitable for event or Airbnb type rental bookings. * [Manual Payments](https://wp-base.com/downloads/manual-payments/): Allows adding and editing records for offline (bank transfer, cheque, cash) payments. @@ -156,7 +155,7 @@ * [Test Bookings](https://wp-base.com/knowledge-base/test-bookings/): Given number of partly or fully random test bookings can be created for test purposes. = Premium Addons = -* [BuddyPress](https://wp-base.com/downloads/buddypress/): Adds settings, list of bookings and calendars on BuddyPress front end user pages. +* [BuddyPress](https://wp-base.com/downloads/buddypress/): Adds settings, list of bookings and calendars on BuddyPress/BuddyBoss front end user pages. Integrates with notifications and groups. * [Coupons](https://wp-base.com/downloads/coupons/): Applies discount over total payable amount upon submission of coupon code. Start and end dates, maximum usage, applicable services and/or providers can be selected. * [Custom Pricing](https://wp-base.com/downloads/custom-variable-pricing/): Payment and down payment amounts can be formulated depending on any variable, for example to apply special price for happy hours * [Digital Wallet](https://wp-base.com/downloads/credits/): Adds a deposit system to your website that allows your clients to purchase credit points or service packages and then redeem it at a later point for your services. @@ -202,6 +201,21 @@ With unlimited services, unrestricted bookings, email sending feature, WP BASE Core is a fully functional booking system which is sufficient for most of *individual* booking needs. However, if your business requires more, we do have Premium [addons](https://wp-base.com/addons/). WP BASE Core which you can download from wordpress.org, will always stay free. == Changelog == += V6.0.0 March 10, 2026 = +- New: Clients can view their bookings in Schedules and use it to edit their bookings +- Tweak: Better caching for Schedules +- Tweak: Datatables assets separated, reducing file size loaded on booking pages +- Change: Front End Edit addon has been retired and its functions integrated into the core +- Dev: Compatibility with WordPress 7.0 +- Dev: moment.js will now be used from WP library +- Fix: Date/time columns of List of Bookings, Credit History and Vendor Commissions tables are not sorted correctly +- Changes and fixes related to premium addons: +- New: Commissions can be paid with Stripe Connect +- Tweak: In Online Meetings, Agora video interface is renewed and SDK updated +- Tweak: Grid element support for [app_vendor_services] shortcode +- Change: In Google Calendar, when service providers use their calendar, and Google Meet is activated, website account no more records Meet and sends invitation (otherwise there will be two invitations) +- Fix: In Recurring Appointments, when a booking is created on admin side, UDF values of parent are not copied to children + = V5.9.0 January 5, 2026 = - New: Additional log file for API messages and setting changes. Log display can be reversed - Changes and fixes related to premium addons: @@ -336,162 +350,6 @@ - Change: Social Login of Advanced Features has been rewritten. wordpress.com support added, Twitter support removed - Fix: Better Messages button does not show in BP list of bookings -= V4.9.2 December 14, 2024 = -- Fix: Get More link has wrong styling -- Fix: Code strengthening - -= V4.9.1 October 27, 2024 = -- Tweak: Improvements in Setup Wizard -- Tweak: Better support for themes having pages with narrow container width -- Fix: PHP warning in front.ajax when updating calendars - -= V4.9.0 October 23, 2024 = -- New: Setup Wizard -- New: Calendar Time Slot Display setting allows time slot display selection globally. Default display mode is "with_break" now -- New: "Default" time slot color set -- Tweak: Working Hour setting UI improvements -- Tweak: Now more than one service can point the same CPT as description page -- Change: When there are multiple calendars on the same page, only one of the forms is displayed now -- Fix: In PHP8.3, warning message in admin dashboard when there are no providers -- Changes and fixes related to premium addons: -- Tweak: Geodirectory listing price and vendor price sync'ed -- Change: When UDF values are changed on admin bookings, Google Calendar Event is also updated -- Fix: Seasonal Working Hours schedule is not applied for the last week of the year - -= V4.8.0 September 26, 2024 = -- New: Services fee per hour, day, week, month, booking -- Tweak: Flexslider is not refreshed at first load, thus preventing flickering of images -- Fix: When service duration is 1 day and Selectable Durations not configured, JavaScript error prevents opening of the checkout form -- Fix: Single Click Booking summary info shows updated service instead of service of the selected slot after calendar updated -- Fix: Contrary to the description, Limited Availability requires service working hours to be set -- Dev: Refactoring of front.php -- Changes and fixes related to premium addons: -- Change: Even when Credits is the only active payment method, Payment Method box at checkout is displayed to be able to show credit balance of the customer -- Tweak: When recurring bookings are created on admin side, client and UDF info are also copied from parent to children -- Tweak: Admin emails are slighly different for pending and confirmed bookings -- Fix: Uploaded video may not be displayed in Multi Vendor Marketplace Geodirectory integration -- Fix: Extras addon is pulling the wrong description or not pulling at all at checkout -- Fix: WooCommerce does not respect minimum and maximum time slot settings -- Fix: Event attendees print does not function correctly -- Fix: User fields in Account Settings tab are repeated -- Fix: If post content is not empty and [app_book] is on a template or Geodir tab, calendar is not updated on the first load -- Fix: If service is zero priced, Extra selection with price does not open payment method selection at checkout -- Fix: Recurring Appointments checks far further dates and may not allow booking at checkout -- Fix: If some items of a recurring appointment package is removed at checkout, booking is not allowed with too less error -- Fix: Participant fields in Front End Edit dialog are misaligned -- Fix: Editing booking record with Front End Edit gives PHP error if PDF addon is active -- Fix: Changes in Front End Edit for UDF fields are not saved - -= V4.7.0 August 23, 2024 = -- Fix: Limited availability dates do not always work for services with duration 2+ days -- Fix: At account page, calendars are updated at first load -- Changes and fixes related to premium addons: -- New: 1 month to 12 months booking duration can be selected in Selectable Durations -- Tweak/Fix: Old confirmation form is not working for Event Bookings. Replaced with the new Checkout form -- Fix: When editing an admin booking record, checking/unchecking send email check box affects other UDF check boxes -- Fix: PHP8 error when a non logged in user makes a booking and UDF addon enabled -- Fix: Event Bookings selected guest number drops down to 1 when payment method selected - -= V4.6.0 August 04, 2024 = -- New: Confirmation Form now uses the same markup and styling of Flex Steps Checkout -- Change: Remember Me field retired -- Change: Several settings about confirmation form layout and css retired -- Change: Theme Builder Compatibility setting retired. Now compatibility is always on -- Change: Lazy Load, Use Cache settings retired -- Fix: When service duration is exactly 7 days, service availabilities are incorrect -- Fix: Deprecated messages in PHP8.3.9 -- Changes and fixes related to premium addons: -- Fix: Wrong escaping of paginate links in Coupons, Custom Pricing, Extras, Locations, Seasonal Working Hours, UDF - -= V4.5.0 June 29, 2024 = -- New: Booking lasting longer than 24 hours are displayed on a monthly calendar on admin schedules and provider/owner account -- Tweak: WordPress V6.6 tested for compatibility -- Tweak: Flex Steps now support Shopping Cart -- Fix: Permanently Delete Selected Records button is not working -- Changes and fixes related to premium addons: -- Fix: Provider Free bookings should show in service owner's account under manage bookings and should be counted in the dashboard -- Fix: PM button should show for Provider Free bookings -- Fix: WooCommerce Order ID is not displayed in admin bookings in HPOS if compatibility mode deactivated - -= V4.4.0 June 04, 2024 = -- New: "Flex Steps" booking process -- Changes and fixes related to premium addons: -- Tweak: Admin can upload provider and vendor avatar -- Tweak: Admin can enter description for provider -- Fix: Only one of Location, Service or Worker (top prior one) is allowed to use slider -- Fix: Provider display name cannot be changed on admin Providers page -- Fix: When Multi Language is activated, after payment with Credits client is redirected to a non-existing page -- Fix: When Recurring Appointments + Selectable Durations are used at the same time, booking end times are not correct -- Fix: Editing Recurring Appointments children gives unexpected results - -= V4.3.0 April 10, 2024 = -- Tweak: When a non logged in user enters email of an existing member during checkout, now login is handled better -- Fix: When slide count is entered as zero, slide should have fixed width -- Fix: If service image file is deleted, it is not possible to replace image with another one on Services page -- Changes and fixes related to premium addons: -- New: Integration with Better Messages: Now vendors and clients can write each other at meeting and waiting room pages. Users can send message to vendor at their bio pages -- New: Each service can be selected to have Online Meeting or not -- New: New shortcode [app_vendor_meta] which prints vendor info on bio page -- New: Trial services can be set to be free of charge -- New: UsersWP forms or lightboxes can be used as login and register methods -- Tweak: Clearer hints for adding a slot to waiting list -- Change: When Multi Vendor addon is active and there are vendors defined, [app_book] is regarded as [app_book worker=auto] -- Fix: When Zoom API token is expired, it may not be possible to regenerate it -- Fix: Services in vendor pages does not obey default sort order - -= V4.2.0 February 26, 2024 = -- New: List of Bookings can be printed -- Tweak: WP6.5 compatibility -- Fix: Flexslider conflicts with WooCommerce default theme Storefront -- Fix: When slider is active, category opt_group should not be on -- Changes and fixes related to premium addons: -- New: Credit history and Commissions list can be printed - -= V4.1.0 February 6, 2024 = -- Change: On user profile settings, only vendors can set WP fields (name, email, first name, last name ), for the rest users these fields are readonly -- Tweak: Better sync with WP fields in Vendors, Clients and user profile -- Fix: Flexslider height can be excessive if slider image aspect ratio > 1 -- Fix: Flexslider does not load correctly in Astra theme -- Changes and fixes related to premium addons: -- New: "Provider Free" services in Multi Vendor -- Tweak: Service lock: When vendor/provider is editing a service, record is locked and admin can know who is editing. He can then take over -- Fix: BuddyPress group "Book Us" page always chooses services for Group 1 -- Fix: Not possible to use Jitsi and Agora at the same website -- Fix: After vendors edit a service, they lose ownership -- Fix: Preferred Language selection at profile is not reflected to displayed language -- Fix: Services owned, but not provided by vendor cannot be displayed at the front end -- Fix: When BuddyPress Groups/Locations connected, locations aren't supposed to be selected by menu -- Fix: Registration form cannot be submitted -- Fix: Previously declined or suspended vendors should not apply to be vendor again - -= V4.0.1 January 12, 2024 = -- Change: For daily services, if Limited Availability is enabled service working hours are no more needed -- Fix: If a price is not entered as download price previously, EDD bookings become free downloads -- Changes and fixes related to premium addons: -- Tweak: Credit records can be individually deleted -- Tweak: Note can be written when adding a credit record -- Tweak: PERSON_TYPES placeholder can be used in email templates -- Tweak: Multi Language support for person type labels and template -- Change: For daily services, if Limited Availability is enabled service working hours are no more needed -- Fix: When Group Bookings is used for a Package service, person types are not displayed on the front end - -= V4.0.0 December 23, 2023 = -- New: Free addons are now delivered with WP BASE Core -- New: "Limited Availability" addon -- New: New setting "Show End Date Based on Venue Bookings" at Display Settings -- Change: Front End Edit and Front End Booking Management are now free addons -- Change: Sidebar widgets are no more loaded by default -- Changes and fixes related to addons: -- New: Person Types in Group Bookings -- New: Ultimate Member and UsersWP support in Multi Vendor -- New: "Flexible Price" feature for services in Multi Vendor Marketplace -- New: Support for WooCommerce checkout page that is created with WooCommerce Blocks -- Tweak: JWT settings in Online Meetings - Zoom have been completely removed -- Fix: PHP8.1+ error at time slot selection from Multi Vendor Marketplace when "Vendor can Set Own Price" is set as fixed, and min/max prices are set as zero and vendor did not enter any price yet -- Fix: In WP BASE DEV, repeated "FeaturesUtil::declare_compatibility … is not a known WordPress plugin" WooCommerce log messages -- Fix: PHP error in BuddyPress when Group component is deactivated and WooCommerce cart is selected as payment method -- Fix: Vendors cannot make booking in BuddyPress + WooCommerce configuration due to change in V3.9.7.2 - = For older logs see changelog.txt file in plugin folder = == Screenshots == @@ -3,7 +3,7 @@ * Plugin Name: WP BASE Booking of Appointments, Services and Events * Description: A complete e-commerce solution for appointment, service and event bookings. * Plugin URI: https://wp-base.com - * Version: 5.9.0 + * Version: 6.0.0 * Author: Hakan Ozevin <hakan@wp-base.com> * Author URI: https://wp-base.com * Text Domain: wp-base @@ -42,7 +42,7 @@ } else if ( version_compare( PHP_VERSION, '7.0.0' ) < 0 ) { add_action( 'admin_notices', '_wpb_plugin_php_version' ); } else { - define( 'WPB_VERSION', '5.9.0' ); + define( 'WPB_VERSION', '6.0.0' ); define( 'WPB_LATEST_DB_VERSION', '3060' ); define( 'WPBASE_URL', 'https://wp-base.com/' ); define( 'WPB_PLUGIN_URL', untrailingslashit( plugin_dir_url( __FILE__ ) ) );
Exploit Outline
1. Navigate to a page where the plugin's booking or registration shortcode (like [app_book]) is active to extract a security nonce from the localized 'app_data.nonce' JavaScript variable. 2. Send an unauthenticated POST request to /wp-admin/admin-ajax.php using the action 'app_registration'. 3. In the POST body, provide required user data (user_login, user_email, user_pass) and explicitly include the 'role' parameter set to 'administrator'. 4. Alternatively, if the 'role' parameter is filtered, attempt to inject the 'meta[wp_capabilities][administrator]' parameter with a value of 1. 5. Upon successful response, use the new credentials to log in to the WordPress dashboard with full administrative access.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.