| 开发者 | sasonikolov |
|---|---|
| 更新时间 | 2026年7月24日 17:53 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
/wp-content/plugins/ or install directly via the WordPress plugin search.No. Customers check their repair status by scanning the QR code or using a direct link. The public status page uses secure token URLs — no login required.
The default flow covers most workshops: received, diagnosis, quote, waiting for parts, in progress, quality check, done, and delivered. With the Pro add-on, you can define your own custom statuses.
Each repair gets a unique QR code. Print it as a label and attach it to the item. When the customer scans it, they see the current status, timeline, and any messages from your shop.
This is a Pro feature. The Pro add-on provides a staff management system with auth tokens and a mobile intake PWA, so reception staff can create repairs from their phone without a WordPress account. The free plugin requires staff to have a WordPress login.
No. Vollstart Repair Desk works fully standalone. WooCommerce integration is available in the Pro add-on for creating orders from repair billing.
Parts and inventory tracking is available in the Pro add-on. You can manage stock levels per item and track which parts are used in each repair.
Yes. All data is stored in your WordPress database. No external services are used for core functionality. GDPR tools for export, anonymization, and deletion are included in the free version.
Yes. The messaging system lets customers and staff exchange messages per repair. You can configure it as read-only, reply-only, or full two-way messaging.
db.php declared their variadic argument as mixed, a type that only exists in PHP 8.0. On the plugin's stated minimum of PHP 7.4, mixed is read as a class name, so every database query threw a fatal "must be an instance of mixed" the moment it ran — which is immediately, on the first admin screen. The type hint has been removed (an untyped variadic accepts any value anyway), so the plugin now genuinely runs on PHP 7.4 as documented. No behaviour change on PHP 8.ini_set('display_errors', '0') from the admin AJAX handler. A plugin must not change PHP's global error-reporting configuration — it would interfere with debugging on the site owner's server. Clean JSON responses are still guaranteed by wpdb->hide_errors() and the existing output buffer that strips any stray noise before the payload, so behaviour is unchanged.db.php no longer suppresses the SQL-injection sniff file-wide. Every $wpdb query is built with $wpdb->prepare() and %i/%s/%d placeholders; the few unavoidable static-analysis false positives (a generic prepared-query wrapper whose template is a hardcoded internal literal) now each carry a narrowly scoped, justified phpcs:ignore on the exact line instead of a blanket phpcs:disable. No behaviour change.hasPremium() method, and neutralized add-on/license references in code comments throughout the free plugin.ratingShowOnStatusPage and ratingAllowUpdate are now registered in the free options schema — the public customer-rating widget on the status page is fully controllable without Pro.enableRatings option alone.translators: comments on placeholders). Nothing user-visible is left untranslatable.getimagesizefromstring() / finfo instead of trusting the client-declared data: prefix, enforces the same 10 MB limit and image-type whitelist as the regular upload path, and rejects anything outside it.loadTextDomain() stub and its init hook — WordPress 4.6+ loads translations for WordPress.org-hosted plugins automatically. uninstall.php now also removes the vollstart_rd_first_activated_at option.assets/js/libs/CREDITS.txt documenting the bundled third-party JS/CSS libraries, their versions, licenses and upstream sources (WordPress.org guideline for minified bundled assets).: in their 00:00:00 default, so the columns were never created. The very first admin screen query then ordered by the missing repairs.created_at, threw a fatal, and the resulting error page replaced the JSON — which the UI showed as "Connection error. Please try again." The validator now accepts time literals, the timestamp columns default to CURRENT_TIMESTAMP (valid on strict MySQL too), and the DB version was bumped so existing installs self-repair on update. Verified end to end on a clean install (activate → read → create → display).vollstart_rd_option_sections) — Pro can inject options into existing Free sections by key (Tax under General, email-body templates under Email Notifications, pickup-reminder body under Pickup Reminder, customer-facing rating settings under Ratings) and register its own new sections (License at top, Invoice PDF, SMS, Cost Tracking, Billing, Catalog, Maintenance, Warranty, Customer Points, Staff Intake, Customer Portal, Branding). Options UI sticky-nav is alphabetical; the form content follows the array order so License lands at the top.vollstart_rd_enrich_repair, vollstart_rd_enrich_repair_response, vollstart_rd_enrich_status_log_entry, vollstart_rd_pdf_repair_data, vollstart_rd_handle_two_segment_route, vollstart_rd_query_vars, vollstart_rd_options_for_js, vollstart_rd_option_sections, vollstart_rd_support_info.VollstartRD::sanitizePostArray() helper sanitizes $_POST at every AJAX entry point (wp_unslash + sanitize_text_field, with sanitize_textarea_field for declared textarea fields) before reaching manager methods.db.php now use %i identifier placeholders in $wpdb->prepare() (WordPress 6.2+).class_exists('WooCommerce') to function_exists('WC') so the check no longer triggers the WP 6.7 "translation loaded too early" notice.wp-admin/admin-ajax.php location — uses home_url('/') via a new siteUrl localize key.VollstartRD_Options::makeOption() is now public so add-on plugins can build option entries without duplicating the helper.VollstartRD_Notifications exposes getBusinessEmail(), getBusinessName(), getBusinessPhone() (new), getCustomerForRepair(), replacePlaceholders(), sendHtmlEmail(), logEmail() as public so add-on plugins can build their own notification emails without duplicating ~150 lines of helper code.vollstart_rd_max_repairs_per_month, _max_customers, _max_repair_types, _max_photos_per_repair, _max_staff) with neutral error messages, no "Upgrade to Pro" wording.VollstartRD::getFooterLabelHtml() and getFooterLabelText() render an optional credit link on the status page, customer portal, and PDF footer — filtered through vollstart_rd_footer_label_html / vollstart_rd_footer_label_text. Shown only when the admin enables the showFooterLabel option (off by default).renderPage() ships only <div id="rd-app"> with a centered spinner; JS bootApp() renders header, tabs, content, footer and roadmap overlay after the Pro JS has loaded. Pro extends through _proHandler.getTabs/beforeRender/afterRender callbacks.vollstart_rd_options so the Pro plugin can register its own option rows + section headings without touching the free options class.getTcpdfVersion() helper in support info shows the bundled version, plus a warning when a sister plugin has loaded a different copy ("6.11.3 (loaded: 6.4.4)").$_FILES metadata is sanitized at the entry point and the mime type is always re-derived from the filename via wp_check_filetype() (no fallback to attacker-controlled $_FILES[...]['type']). Pro AJAX filter receives wp_unslash()-cleaned data..rd-card-actions wrapper; toolbar switched to display: block + text-align: right; new .rd-info-box helper with a single infoBox(html) JS function used at the top of Repair Types and Work Steps tabs. PDF footer now carries the branding link centered under the document code.vollstart_rd_pre_create_repair / post_create_repair, pre_update_repair / post_update_repair, pre_change_status / post_change_status, vollstart_rd_status_definitions, vollstart_rd_admin_boot_data, vollstart_rd_license_info, vollstart_rd_ajax_action extension hooks for the Pro plugin.