| @@ -194,14 +194,9 @@ | ||
| 194 | 194 | 'icon' => 'dashicons-admin-users', |
| 195 | 195 | 'category' => 'clients', |
| 196 | 196 | 'badge' => null, |
| 197 | 197 | 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/client-portal/', |
| 198 | - // ClientPortal extension stores config at | |
| 199 | - // easy_invoice_pro_client_portal_settings; UI lives as a tab | |
| 200 | - // on the main Settings page. No dedicated slug → leave | |
| 201 | - // settings_url empty so the card doesn't render a misleading | |
| 202 | - // "Settings →" link. | |
| 203 | - 'settings_url' => '', | |
| 198 | + 'settings_url' => admin_url('admin.php?page=easy-invoice-settings§ion=client_portal'), | |
| 204 | 199 | 'pro_class' => 'EasyInvoicePro\\Addons\\ClientPortal\\ClientPortal', |
| 205 | 200 | ], |
| 206 | 201 | [ |
| 207 | 202 | 'id' => 'pdf_toolkit', |
| @@ -206,10 +201,19 @@ | ||
| 206 | 201 | [ |
| 207 | 202 | 'id' => 'pdf_toolkit', |
| 208 | 203 | 'name' => __('PDF Toolkit', 'easy-invoice'), |
| 209 | 204 | 'short_name' => __('PDF Toolkit', 'easy-invoice'), |
| 210 | - 'tagline' => __('Customise every detail of your invoice and quote PDFs.', 'easy-invoice'), | |
| 211 | - 'description' => __('Custom headers and footers, watermark stamps (PAID / DRAFT / OVERDUE / VOID), color and font controls, and per-document branding. Make every PDF look enterprise-grade — not stock WordPress.', 'easy-invoice'), | |
| 205 | + 'tagline' => __('Stamp your invoices and quotes with a custom watermark.', 'easy-invoice'), | |
| 206 | + // Describes what the addon actually offers. It previously advertised | |
| 207 | + // "custom headers and footers" and "color and font controls": those are | |
| 208 | + // not implemented and not exposed anywhere in its settings. The handlers | |
| 209 | + // for them hang off six `easy_invoice_pdf_*` filters that nothing in | |
| 210 | + // either plugin ever fires, because PDFs are rendered in the browser | |
| 211 | + // from the document view rather than by a server-side pipeline there | |
| 212 | + // would be something to hook. Headers, footers and font control need | |
| 213 | + // that server-side renderer first. The watermark is real: it is drawn | |
| 214 | + // into the document view, which is what the PDF is rasterised from. | |
| 215 | + 'description' => __('Watermark your invoices and quotes — text or image, with control over the wording, colour, size and opacity. Use it to stamp PAID, DRAFT, OVERDUE or VOID across a document, or to drop your logo behind the content.', 'easy-invoice'), | |
| 212 | 216 | 'plan' => LicensePlanResolver::PLAN_PERSONAL, |
| 213 | 217 | 'icon' => 'dashicons-pdf', |
| 214 | 218 | 'category' => 'branding', |
| 215 | 219 | 'badge' => null, |
| @@ -230,9 +234,15 @@ | ||
| 230 | 234 | 'icon' => 'dashicons-download', |
| 231 | 235 | 'category' => 'productivity', |
| 232 | 236 | 'badge' => null, |
| 233 | 237 | 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/bulk-operations/', |
| 234 | - 'settings_url' => '', | |
| 238 | + // The addon does own a screen — Export Data. Leaving this empty meant | |
| 239 | + // the Addons card offered no way into it, and, more importantly, the | |
| 240 | + // admin dispatcher uses this list to recognise addon-owned slugs: with | |
| 241 | + // no entry it fell through and painted the Dashboard, then the export | |
| 242 | + // form rendered underneath it (the "two pages stacked" case the | |
| 243 | + // dispatcher's default branch warns about). | |
| 244 | + 'settings_url' => admin_url('admin.php?page=easy-invoice-export'), | |
| 235 | 245 | 'pro_class' => 'EasyInvoicePro\\Addons\\BulkOperations\\BulkOperations', |
| 236 | 246 | ], |
| 237 | 247 | [ |
| 238 | 248 | 'id' => 'item_library', |
| @@ -292,20 +302,16 @@ | ||
| 292 | 302 | [ |
| 293 | 303 | 'id' => 'email_enhancements', |
| 294 | 304 | 'name' => __('Email Enhancements', 'easy-invoice'), |
| 295 | 305 | 'short_name' => __('Email Tools', 'easy-invoice'), |
| 296 | - 'tagline' => __('Send branded HTML emails with PDF attached, CC / BCC, and Reply-To.', 'easy-invoice'), | |
| 297 | - 'description' => __('Branded HTML emails with your colors and logo. Add CC / BCC, auto-attach the PDF, customise the subject and body per invoice, and set a Reply-To so client replies reach the right inbox.', 'easy-invoice'), | |
| 306 | + 'tagline' => __('Your own email layout, and a Reply-To per kind of email.', 'easy-invoice'), | |
| 307 | + 'description' => __('Wrap every email Easy Invoice sends in your own HTML layout, and route replies by kind — invoice questions to accounts, quote replies to sales, receipts and reminders wherever they belong.', 'easy-invoice'), | |
| 298 | 308 | 'plan' => LicensePlanResolver::PLAN_PERSONAL, |
| 299 | 309 | 'icon' => 'dashicons-email', |
| 300 | 310 | 'category' => 'productivity', |
| 301 | 311 | 'badge' => null, |
| 302 | 312 | 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/email-enhancements/', |
| 303 | - // EmailEnhancements appends Reply-To / advanced email | |
| 304 | - // fields to the main Settings page; no dedicated slug → | |
| 305 | - // empty settings_url hides the misleading "Settings →" | |
| 306 | - // link. | |
| 307 | - 'settings_url' => '', | |
| 313 | + 'settings_url' => admin_url('admin.php?page=easy-invoice-addon-email-enhancements'), | |
| 308 | 314 | 'pro_class' => 'EasyInvoicePro\\Addons\\EmailEnhancements\\EmailEnhancements', |
| 309 | 315 | ], |
| 310 | 316 | [ |
| 311 | 317 | 'id' => 'secure_links', |
| @@ -348,13 +354,116 @@ | ||
| 348 | 354 | 'settings_url' => '', |
| 349 | 355 | 'pro_class' => 'EasyInvoicePro\\Addons\\PrivacyTools\\PrivacyTools', |
| 350 | 356 | ], |
| 351 | 357 | [ |
| 358 | + 'id' => 'einvoicing', | |
| 359 | + 'name' => __('E-Invoicing (Factur-X / ZUGFeRD / Peppol UBL)', 'easy-invoice'), | |
| 360 | + 'short_name' => __('E-Invoicing', 'easy-invoice'), | |
| 361 | + 'tagline' => __('Issue and read the structured invoices now required across the EU.', 'easy-invoice'), | |
| 362 | + 'description' => __('Turn any invoice into Factur-X — a PDF your client can read with the EN 16931 machine-readable document carried inside it — or into Peppol BIS 3.0 UBL, which is what Belgium, the Netherlands and the Peppol network run on. Your customer\'s country decides which. Also opens incoming Factur-X, ZUGFeRD, CII and UBL invoices from your suppliers, which is the obligation that lands first: France requires every VAT-registered business to receive structured invoices from September 2026, Germany has since 2025. Produces the compliant file; sending stays with your own Peppol, KSeF or PDP provider.', 'easy-invoice'), | |
| 363 | + 'plan' => LicensePlanResolver::PLAN_PROFESSIONAL, | |
| 364 | + 'icon' => 'dashicons-media-code', | |
| 365 | + 'category' => 'compliance', | |
| 366 | + 'badge' => 'new', | |
| 367 | + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/e-invoicing/', | |
| 368 | + 'settings_url' => admin_url('admin.php?page=easy-invoice-addon-einvoicing'), | |
| 369 | + 'pro_class' => 'EasyInvoicePro\\Addons\\EInvoicing\\EInvoicing', | |
| 370 | + ], | |
| 371 | + [ | |
| 372 | + 'id' => 'client_language', | |
| 373 | + 'name' => __('Client Language', 'easy-invoice'), | |
| 374 | + // Sidebar label: the page it opens is the Translations screen. | |
| 375 | + 'short_name' => __('Translations', 'easy-invoice'), | |
| 376 | + 'tagline' => __('Each client gets invoices, PDFs and emails in their own language.', 'easy-invoice'), | |
| 377 | + 'description' => __('Set a language on the client record and every document for that client — the public page, the PDF, the emails — is produced in it, using the WordPress language pack and the per-language wording from the Translations screen. Invoice French, German and Italian clients from one site without three sites.', 'easy-invoice'), | |
| 378 | + 'plan' => LicensePlanResolver::PLAN_PROFESSIONAL, | |
| 379 | + 'icon' => 'dashicons-translation', | |
| 380 | + 'category' => 'clients', | |
| 381 | + 'badge' => 'new', | |
| 382 | + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/client-language/', | |
| 383 | + // The language is chosen on each client's record; the wording | |
| 384 | + // per language lives on the Translations screen — that is the | |
| 385 | + // one place this addon has settings of its own. | |
| 386 | + 'settings_url' => admin_url('admin.php?page=easy-invoice-pro-translations'), | |
| 387 | + 'settings_label' => __('Translations', 'easy-invoice'), | |
| 388 | + 'pro_class' => 'EasyInvoicePro\\Addons\\ClientLanguage\\ClientLanguage', | |
| 389 | + ], | |
| 390 | + [ | |
| 391 | + 'id' => 'retainers', | |
| 392 | + 'name' => __('Retainers & Prepaid Credit', 'easy-invoice'), | |
| 393 | + 'short_name' => __('Retainers', 'easy-invoice'), | |
| 394 | + 'tagline' => __('Record a prepayment once; let invoices draw it down.', 'easy-invoice'), | |
| 395 | + 'description' => __('A monthly block of hours, a deposit that covers several small jobs, a negotiated prepayment: record it against the client and apply it to invoices as they come, by hand from the client record or automatically the moment an invoice is issued. Applied credit is an ordinary payment, so statements, reports and accounting sync all see money received, and the balance is always on the client record.', 'easy-invoice'), | |
| 396 | + 'plan' => LicensePlanResolver::PLAN_PROFESSIONAL, | |
| 397 | + 'icon' => 'dashicons-vault', | |
| 398 | + 'category' => 'billing', | |
| 399 | + 'badge' => 'new', | |
| 400 | + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/retainers/', | |
| 401 | + 'settings_url' => admin_url('admin.php?page=easy-invoice-settings&tab=invoice'), | |
| 402 | + 'pro_class' => 'EasyInvoicePro\\Addons\\Retainers\\Retainers', | |
| 403 | + ], | |
| 404 | + [ | |
| 405 | + 'id' => 'payment_links', | |
| 406 | + 'name' => __('Payment Links & QR Codes', 'easy-invoice'), | |
| 407 | + 'short_name' => __('Payment Links', 'easy-invoice'), | |
| 408 | + 'tagline' => __('Get paid from a link or a QR code — no invoice needed first.', 'easy-invoice'), | |
| 409 | + 'description' => __('Create a link for a fixed amount, or one where the payer enters the amount, and share it anywhere: an email signature, a social post, a printed QR code at the counter. The payer types their name and email, an invoice is created for them on the spot, and they pay it with any of your gateways — so receipts, the client record, reports and accounting sync all just work. Every link shows what it has collected.', 'easy-invoice'), | |
| 410 | + 'plan' => LicensePlanResolver::PLAN_PERSONAL, | |
| 411 | + 'icon' => 'dashicons-admin-links', | |
| 412 | + 'category' => 'billing', | |
| 413 | + 'badge' => 'new', | |
| 414 | + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/payment-links/', | |
| 415 | + 'settings_url' => admin_url('admin.php?page=easy-invoice-addon-payment-links'), | |
| 416 | + 'pro_class' => 'EasyInvoicePro\\Addons\\PaymentLinks\\PaymentLinks', | |
| 417 | + ], | |
| 418 | + [ | |
| 419 | + 'id' => 'quote_signatures', | |
| 420 | + 'name' => __('Quote E-Signatures', 'easy-invoice'), | |
| 421 | + 'short_name' => __('E-Signatures', 'easy-invoice'), | |
| 422 | + 'tagline' => __('Accepted means signed: a drawn signature, name, time and address on every approval.', 'easy-invoice'), | |
| 423 | + 'description' => __('When a client accepts a quote they sign it — drawn with a mouse or finger, with their typed name, the time and their connection details recorded. The signature block is printed on the quote, its PDF and any invoice made from it, so an approval is something you can show rather than a click in a log. Required or optional, your choice.', 'easy-invoice'), | |
| 424 | + 'plan' => LicensePlanResolver::PLAN_PERSONAL, | |
| 425 | + 'icon' => 'dashicons-edit', | |
| 426 | + 'category' => 'documents', | |
| 427 | + 'badge' => 'new', | |
| 428 | + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/quote-signatures/', | |
| 429 | + 'settings_url' => admin_url('admin.php?page=easy-invoice-settings&tab=quote'), | |
| 430 | + 'pro_class' => 'EasyInvoicePro\\Addons\\QuoteSignatures\\QuoteSignatures', | |
| 431 | + ], | |
| 432 | + [ | |
| 433 | + 'id' => 'quote_forms', | |
| 434 | + 'name' => __('Quote Request Forms', 'easy-invoice'), | |
| 435 | + 'short_name' => __('Quote Forms', 'easy-invoice'), | |
| 436 | + 'tagline' => __('A form submission becomes a draft quote, client included.', 'easy-invoice'), | |
| 437 | + 'description' => __('Connect WPForms, Gravity Forms, Contact Form 7 or Fluent Forms: when someone submits your quote-request form, the client is found or created from their email and a draft quote opens with what they wrote — and a first line item if the form asks for a service or amount. You price it and send it; nothing is retyped. Any other form can feed it through one action hook.', 'easy-invoice'), | |
| 438 | + 'plan' => LicensePlanResolver::PLAN_PERSONAL, | |
| 439 | + 'icon' => 'dashicons-feedback', | |
| 440 | + 'category' => 'integrations', | |
| 441 | + 'badge' => 'new', | |
| 442 | + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/quote-forms/', | |
| 443 | + 'settings_url' => admin_url('admin.php?page=easy-invoice-addon-quote-forms'), | |
| 444 | + 'pro_class' => 'EasyInvoicePro\\Addons\\QuoteForms\\QuoteForms', | |
| 445 | + ], | |
| 446 | + [ | |
| 447 | + 'id' => 'woocommerce', | |
| 448 | + 'name' => __('WooCommerce Invoicing', 'easy-invoice'), | |
| 449 | + 'short_name' => __('WooCommerce', 'easy-invoice'), | |
| 450 | + 'tagline' => __('A real invoice for every shop order — and a credit note for every refund.', 'easy-invoice'), | |
| 451 | + 'description' => __('Issue an Easy Invoice invoice automatically when a WooCommerce order is paid, mirroring its lines and totals exactly. Refunds become credit notes against the invoice. Customers get an Invoice link in My Account, the order screen shows the invoice with its PDF, and with the E-Invoicing addon every order can be sent as Factur-X or Peppol UBL — which no WooCommerce PDF plugin offers without a further paid extension. Works with High-Performance Order Storage.', 'easy-invoice'), | |
| 452 | + 'plan' => LicensePlanResolver::PLAN_PERSONAL, | |
| 453 | + 'icon' => 'dashicons-cart', | |
| 454 | + 'category' => 'integrations', | |
| 455 | + 'badge' => 'new', | |
| 456 | + 'docs_url' => 'https://easy-invoice.matrixaddons.com/docs/addons/woocommerce/', | |
| 457 | + 'settings_url' => admin_url('admin.php?page=easy-invoice-addon-woocommerce'), | |
| 458 | + 'pro_class' => 'EasyInvoicePro\\Addons\\WooCommerce\\WooCommerce', | |
| 459 | + ], | |
| 460 | + [ | |
| 352 | 461 | 'id' => 'reports', |
| 353 | 462 | 'name' => __('Reports & Analytics', 'easy-invoice'), |
| 354 | 463 | 'short_name' => __('Reports', 'easy-invoice'), |
| 355 | 464 | 'tagline' => __('See your revenue, outstanding balances, and best clients at a glance.', 'easy-invoice'), |
| 356 | - 'description' => __('Visual dashboard for invoice revenue, outstanding balances, payment status, and per-client performance. Filter by any date range, export for your accountant, and decide on data instead of guessing.', 'easy-invoice'), | |
| 465 | + 'description' => __('Visual dashboard for invoice revenue, outstanding balances, payment status, and per-client performance, plus a month-by-month profit & loss statement — money received against costs from Expense Tracking, with net and margin. Filter by any date range, export for your accountant, and decide on data instead of guessing.', 'easy-invoice'), | |
| 357 | 466 | 'plan' => LicensePlanResolver::PLAN_PERSONAL, |
| 358 | 467 | 'icon' => 'dashicons-chart-line', |
| 359 | 468 | 'category' => 'analytics', |
| 360 | 469 | 'badge' => null, |