{"id":220348,"date":"2025-05-04T17:38:33","date_gmt":"2025-05-04T17:38:33","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/legal-services-management\/"},"modified":"2026-03-04T22:49:47","modified_gmt":"2026-03-04T22:49:47","slug":"legal-services-management","status":"publish","type":"plugin","link":"https:\/\/mai.wordpress.org\/plugins\/legal-services-management\/","author":23214144,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.0.0","stable_tag":"2.0.0","tested":"6.9.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"Legal Services Management","header_author":"Mati Ullah","header_description":"A WordPress plugin to manage legal services, including appointment booking and payment integration.","assets_banners_color":"313e47","last_updated":"2026-03-04 22:49:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/samthrive.com","header_author_uri":"https:\/\/samsol.co","rating":0,"author_block_rating":0,"active_installs":0,"downloads":498,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"matiullahpro","date":"2025-05-04 17:35:46"},"1.0.1":{"tag":"1.0.1","author":"matiullahpro","date":"2025-09-20 15:28:40"},"1.0.2":{"tag":"1.0.2","author":"matiullahpro","date":"2025-09-20 15:28:40"},"2.0.0":{"tag":"2.0.0","author":"matiullahpro","date":"2026-03-04 22:49:47"},"2.0.1":{"tag":"2.0.1","author":"matiullahpro","date":"2026-03-04 23:24:33"}},"upgrade_notice":{"2.0.0":"<p>Major security and architecture update. Please back up your database before upgrading.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3287262,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3287262,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500-rtl.png":{"filename":"banner-1544x500-rtl.png","revision":3287262,"resolution":"1544x500","location":"assets","locale":""},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3287262,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250-rtl.png":{"filename":"banner-772x250-rtl.png","revision":3287262,"resolution":"772x250","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3287262,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2","2.0.0","2.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.jpeg":{"filename":"screenshot-1.jpeg","revision":3475026,"resolution":"1","location":"assets","locale":""},"screenshot-2.jpeg":{"filename":"screenshot-2.jpeg","revision":3475026,"resolution":"2","location":"assets","locale":""},"screenshot-3.jpeg":{"filename":"screenshot-3.jpeg","revision":3475026,"resolution":"3","location":"assets","locale":""},"screenshot-4.jpeg":{"filename":"screenshot-4.jpeg","revision":3475026,"resolution":"4","location":"assets","locale":""},"screenshot-5.jpeg":{"filename":"screenshot-5.jpeg","revision":3475026,"resolution":"5","location":"assets","locale":""},"screenshot-6.jpeg":{"filename":"screenshot-6.jpeg","revision":3475026,"resolution":"6","location":"assets","locale":""},"screenshot-7.jpeg":{"filename":"screenshot-7.jpeg","revision":3475026,"resolution":"7","location":"assets","locale":""},"screenshot-8.jpeg":{"filename":"screenshot-8.jpeg","revision":3475026,"resolution":"8","location":"assets","locale":""}},"screenshots":{"1":"<strong>Admin Dashboard<\/strong> \u2013 Overview with stats cards and monthly appointment calendar.","2":"<strong>Client Management<\/strong> \u2013 Full client database with add\/edit\/delete support.","3":"<strong>Case Management<\/strong> \u2013 Track cases with types, priorities, and statuses.","4":"<strong>Appointment Scheduling<\/strong> \u2013 Schedule appointments with calendar integration.","5":"<strong>Invoice System<\/strong> \u2013 Create and manage invoices with tax calculations.","6":"<strong>Frontend Booking Form<\/strong> \u2013 Clean booking form rendered via shortcode.","7":"<strong>Client Portal<\/strong> \u2013 Self-service portal for logged-in clients.","8":"<strong>Settings Page<\/strong> \u2013 Configure company info, Stripe, and Twilio integrations."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[8132,14793,17989,28984,1903],"plugin_category":[],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-220348","plugin","type-plugin","status-publish","hentry","plugin_tags-appointments","plugin_tags-case-management","plugin_tags-client-portal","plugin_tags-law-firm","plugin_tags-legal","plugin_committers-matiullahpro"],"banners":{"banner":"https:\/\/ps.w.org\/legal-services-management\/assets\/banner-772x250.png?rev=3287262","banner_2x":"https:\/\/ps.w.org\/legal-services-management\/assets\/banner-1544x500.png?rev=3287262","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/legal-services-management\/assets\/icon-128x128.png?rev=3287262","icon_2x":"https:\/\/ps.w.org\/legal-services-management\/assets\/icon-256x256.png?rev=3287262","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/legal-services-management\/assets\/screenshot-1.jpeg?rev=3475026","caption":"<strong>Admin Dashboard<\/strong> \u2013 Overview with stats cards and monthly appointment calendar."},{"src":"https:\/\/ps.w.org\/legal-services-management\/assets\/screenshot-2.jpeg?rev=3475026","caption":"<strong>Client Management<\/strong> \u2013 Full client database with add\/edit\/delete support."},{"src":"https:\/\/ps.w.org\/legal-services-management\/assets\/screenshot-3.jpeg?rev=3475026","caption":"<strong>Case Management<\/strong> \u2013 Track cases with types, priorities, and statuses."},{"src":"https:\/\/ps.w.org\/legal-services-management\/assets\/screenshot-4.jpeg?rev=3475026","caption":"<strong>Appointment Scheduling<\/strong> \u2013 Schedule appointments with calendar integration."},{"src":"https:\/\/ps.w.org\/legal-services-management\/assets\/screenshot-5.jpeg?rev=3475026","caption":"<strong>Invoice System<\/strong> \u2013 Create and manage invoices with tax calculations."},{"src":"https:\/\/ps.w.org\/legal-services-management\/assets\/screenshot-6.jpeg?rev=3475026","caption":"<strong>Frontend Booking Form<\/strong> \u2013 Clean booking form rendered via shortcode."},{"src":"https:\/\/ps.w.org\/legal-services-management\/assets\/screenshot-7.jpeg?rev=3475026","caption":"<strong>Client Portal<\/strong> \u2013 Self-service portal for logged-in clients."},{"src":"https:\/\/ps.w.org\/legal-services-management\/assets\/screenshot-8.jpeg?rev=3475026","caption":"<strong>Settings Page<\/strong> \u2013 Configure company info, Stripe, and Twilio integrations."}],"raw_content":"<!--section=description-->\n<p><strong>Legal Services Management<\/strong> is a powerful, all-in-one WordPress plugin designed specifically for law firms, solo attorneys, and legal service providers. Manage your entire practice workflow without leaving your WordPress dashboard.<\/p>\n\n<p>Whether you're a solo practitioner or managing a multi-attorney firm, this plugin gives you everything you need: client records, case tracking, appointment scheduling, document templates, invoicing, and frontend portals for both clients and attorneys.<\/p>\n\n<h3>Core Features<\/h3>\n\n<p><strong>Client Management<\/strong>\n* Complete client database with contact details, status tracking, and activity history\n* Auto-link WordPress user accounts to client records\n* Supports guest and logged-in client bookings<\/p>\n\n<p><strong>Case Management<\/strong>\n* Track cases with case numbers, types (civil, criminal, family, corporate, immigration, real estate), priorities, and statuses\n* Assign lawyers and link clients to each case\n* Store court info and full case descriptions with the WordPress editor<\/p>\n\n<p><strong>Appointment Scheduling<\/strong>\n* Book in-person, video call, and phone appointments\n* Interactive monthly calendar view in the admin dashboard\n* Automated email reminders via WP-Cron\n* Frontend booking form via shortcode<\/p>\n\n<p><strong>Invoice &amp; Billing<\/strong>\n* Create professional invoices with subtotals, tax rates, and balance tracking\n* Track invoice status: Draft, Sent, Paid, Overdue, and Cancelled\n* Link invoices to specific cases and clients\n* Stripe payment integration (configurable via settings)<\/p>\n\n<p><strong>Document Templates<\/strong>\n* Create reusable document templates with placeholders (<code>{client_name}<\/code>, <code>{case_number}<\/code>, <code>{date}<\/code>)\n* Manage uploaded files linked to cases and clients<\/p>\n\n<p><strong>Client Portal (Frontend)<\/strong>\n* Logged-in clients can view their cases, appointments, and invoices\n* Accessible via <code>[lsm_client_portal]<\/code> shortcode on any page or post<\/p>\n\n<p><strong>Attorney\/Lawyer Dashboard (Frontend)<\/strong>\n* Attorneys can view their assigned cases, appointment calendar, and invoices\n* Accessible via <code>[lsm_lawyer_dashboard]<\/code> shortcode<\/p>\n\n<p><strong>REST API<\/strong>\n* Full RESTful API (<code>\/wp-json\/lsm\/v1\/<\/code>) for integration with external tools\n* Permission-controlled endpoints for clients, cases, and appointments<\/p>\n\n<p><strong>Cron Automation<\/strong>\n* Hourly appointment reminder emails\n* Daily cleanup of old activity logs and expired sessions<\/p>\n\n<p><strong>Activity Logging<\/strong>\n* Records all create\/update operations for audit trail purposes<\/p>\n\n<h3>Available Shortcodes<\/h3>\n\n\n\n\n  Shortcode\n  Description\n\n\n\n\n  <code>[lsm_booking_form]<\/code>\n  Frontend appointment booking form\n\n\n  <code>[lsm_client_portal]<\/code>\n  Client self-service portal\n\n\n  <code>[lsm_lawyer_dashboard]<\/code>\n  Lawyer\/attorney frontend dashboard\n\n\n  <code>[lsm_lawyer_list]<\/code>\n  Display all active lawyers\n\n\n  <code>[lsm_service_list]<\/code>\n  Display all available services\n\n\n  <code>[lsm_appointment_calendar]<\/code>\n  Client appointment calendar view\n\n\n\n\n<h3>Custom Roles &amp; Capabilities<\/h3>\n\n<p>The plugin registers the following custom WordPress roles and capabilities:<\/p>\n\n<ul>\n<li><strong>LSM Lawyer<\/strong> \u2013 Can manage cases, appointments, and view clients<\/li>\n<li><strong>LSM Client<\/strong> \u2013 Can access the client portal<\/li>\n<\/ul>\n\n<p>Custom capabilities: <code>manage_clients<\/code>, <code>manage_cases<\/code>, <code>manage_appointments<\/code>, <code>manage_invoices<\/code><\/p>\n\n<h3>Security<\/h3>\n\n<ul>\n<li>All form submissions protected with nonces (CSRF protection)<\/li>\n<li>All input sanitized with appropriate WordPress functions (<code>sanitize_text_field<\/code>, <code>sanitize_email<\/code>, <code>wp_kses_post<\/code>, etc.)<\/li>\n<li>All output escaped before rendering (<code>esc_html<\/code>, <code>esc_attr<\/code>, <code>esc_url<\/code>)<\/li>\n<li>Database queries use <code>$wpdb-&gt;prepare()<\/code> with placeholders to prevent SQL injection<\/li>\n<li>Direct file access protection on all PHP files<\/li>\n<li>Safe redirects via <code>wp_safe_redirect()<\/code><\/li>\n<\/ul>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Log in to your WordPress admin panel.<\/li>\n<li>Go to <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Search for <strong>Legal Services Management<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin ZIP file.<\/li>\n<li>Go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Upload the ZIP file and click <strong>Install Now<\/strong>.<\/li>\n<li>After installation, click <strong>Activate Plugin<\/strong>.<\/li>\n<\/ol>\n\n<h4>After Activation<\/h4>\n\n<ol>\n<li>Navigate to <strong>LSM \u2192 Settings<\/strong> to configure your company name, Stripe keys, and Twilio SMS integration.<\/li>\n<li>Create your first service under <strong>LSM \u2192 Services<\/strong>.<\/li>\n<li>Add client records under <strong>LSM \u2192 Clients<\/strong>.<\/li>\n<li>Add the <code>[lsm_booking_form]<\/code> shortcode to any page to enable online bookings.<\/li>\n<li>Add the <code>[lsm_client_portal]<\/code> shortcode to a members-only page for client self-service.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20woocommerce%3F\"><h3>Does this plugin require WooCommerce?<\/h3><\/dt>\n<dd><p>No. Legal Services Management is a standalone plugin and does not depend on WooCommerce or any other plugin.<\/p><\/dd>\n<dt id=\"can%20clients%20book%20appointments%20without%20creating%20a%20wordpress%20account%3F\"><h3>Can clients book appointments without creating a WordPress account?<\/h3><\/dt>\n<dd><p>Yes. The <code>[lsm_booking_form]<\/code> shortcode supports guest bookings. Guest clients are automatically added to your client database.<\/p><\/dd>\n<dt id=\"how%20do%20i%20set%20up%20the%20client%20portal%3F\"><h3>How do I set up the client portal?<\/h3><\/dt>\n<dd><ol>\n<li>Create a new page (e.g., \"My Portal\").<\/li>\n<li>Add the shortcode <code>[lsm_client_portal]<\/code> to the page content.<\/li>\n<li>Make the page accessible only to logged-in users (use a membership plugin or WordPress login redirect if needed).<\/li>\n<li>In the LSM admin, link each client record to their WordPress user account.<\/li>\n<\/ol><\/dd>\n<dt id=\"how%20do%20i%20display%20my%20services%20on%20the%20frontend%3F\"><h3>How do I display my services on the frontend?<\/h3><\/dt>\n<dd><p>Add <code>[lsm_service_list]<\/code> to any page or post. Services are pulled from <strong>LSM \u2192 Services<\/strong> where <code>is_active = 1<\/code>.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20appointment%20reminder%20emails%3F\"><h3>Does the plugin send appointment reminder emails?<\/h3><\/dt>\n<dd><p>Yes. The plugin uses WordPress WP-Cron to send automated email reminders for upcoming appointments (within the next 24 hours). This requires your server's cron to be running.<\/p><\/dd>\n<dt id=\"can%20i%20integrate%20stripe%20for%20payments%3F\"><h3>Can I integrate Stripe for payments?<\/h3><\/dt>\n<dd><p>Stripe API keys can be configured in <strong>LSM \u2192 Settings \u2192 Stripe Integration<\/strong>. Full Stripe payment processing requires additional customization using the stored API keys.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20translation-ready%3F\"><h3>Is the plugin translation-ready?<\/h3><\/dt>\n<dd><p>Yes. All strings are wrapped in WordPress internationalization functions and the plugin includes a <code>\/languages<\/code> directory for <code>.po<\/code>\/<code>.mo<\/code> translation files. The text domain is <code>legal-services-management<\/code>.<\/p><\/dd>\n<dt id=\"what%20database%20tables%20does%20the%20plugin%20create%3F\"><h3>What database tables does the plugin create?<\/h3><\/dt>\n<dd><p>The plugin creates the following tables:\n- <code>{prefix}lsm_clients<\/code>\n- <code>{prefix}lsm_cases<\/code>\n- <code>{prefix}lsm_services<\/code>\n- <code>{prefix}lsm_appointments<\/code>\n- <code>{prefix}lsm_invoices<\/code>\n- <code>{prefix}lsm_documents<\/code>\n- <code>{prefix}lsm_notifications<\/code>\n- <code>{prefix}lsm_activity_logs<\/code>\n- <code>{prefix}lsm_sessions<\/code><\/p>\n\n<p>All tables are removed on plugin uninstall.<\/p><\/dd>\n<dt id=\"will%20it%20work%20with%20my%20theme%3F\"><h3>Will it work with my theme?<\/h3><\/dt>\n<dd><p>Yes. The plugin renders standard HTML with minimal inline styles and enqueues its own frontend CSS. It is compatible with all standard WordPress themes.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Major release: Complete rewrite with improved architecture and security hardening<\/li>\n<li>Added custom capabilities and role management (<code>manage_clients<\/code>, <code>manage_cases<\/code>, <code>manage_appointments<\/code>, <code>manage_invoices<\/code>)<\/li>\n<li>Added interactive monthly calendar view in admin dashboard<\/li>\n<li>Added lawyer frontend dashboard (<code>[lsm_lawyer_dashboard]<\/code> shortcode)<\/li>\n<li>Added appointment calendar shortcode (<code>[lsm_appointment_calendar]<\/code>)<\/li>\n<li>Added service list shortcode (<code>[lsm_service_list]<\/code>)<\/li>\n<li>Added lawyer list shortcode (<code>[lsm_lawyer_list]<\/code>)<\/li>\n<li>Added full REST API with permission callbacks<\/li>\n<li>Added WP-Cron for automated appointment reminders and log cleanup<\/li>\n<li>Added activity logging for audit trails<\/li>\n<li>Added Stripe and Twilio settings fields<\/li>\n<li>Replaced all <code>wp_redirect()<\/code> with <code>wp_safe_redirect()<\/code><\/li>\n<li>Added nonce verification to all form submissions<\/li>\n<li>Added <code>wp_unslash()<\/code> + sanitization to all <code>$_POST<\/code>\/<code>$_GET<\/code> inputs<\/li>\n<li>Added <code>$wpdb-&gt;prepare()<\/code> for all dynamic database queries<\/li>\n<li>Added <code>wp_cache_get\/set<\/code> for all list-view database queries<\/li>\n<li>Replaced <code>date()<\/code> with <code>gmdate()<\/code> throughout for timezone safety<\/li>\n<li>Added ABSPATH direct file access protection to all PHP files<\/li>\n<li>Added <code>sanitize_callback<\/code> to <code>register_setting()<\/code><\/li>\n<li>Removed discouraged <code>load_plugin_textdomain()<\/code> call (translations auto-load for WP.org plugins)<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Manage clients, cases, appointments, invoices &amp; documents for law firms directly from WordPress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mai.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/220348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mai.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mai.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mai.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=220348"}],"author":[{"embeddable":true,"href":"https:\/\/mai.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/matiullahpro"}],"wp:attachment":[{"href":"https:\/\/mai.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=220348"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mai.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=220348"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mai.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=220348"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mai.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=220348"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mai.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=220348"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mai.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=220348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}