{"id":252011,"date":"2025-09-20T11:32:46","date_gmt":"2025-09-20T11:32:46","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/myrentbook\/"},"modified":"2025-09-23T15:50:47","modified_gmt":"2025-09-23T15:50:47","slug":"myrentbook","status":"publish","type":"plugin","link":"https:\/\/scn.wordpress.org\/plugins\/myrentbook\/","author":7390731,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"0.1.5","stable_tag":"0.1.5","tested":"6.8.5","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"MyRentBook","header_author":"Stan Furtovsky Pro","header_description":"\u041f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u0443\u0447\u0451\u0442 \u0430\u0440\u0435\u043d\u0434\u044b: \u0430\u0432\u0442\u043e\u043d\u0430\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u043c\u043c\u0443\u043d\u0430\u043b\u044c\u043d\u044b\u0435 (\u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u043e), \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0435 \u043e\u043f\u043b\u0430\u0442\u044b, \u0441\u0442\u0430\u0442\u0443\u0441\u044b, \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f. \u0414\u0430\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435.","assets_banners_color":"a0ada5","last_updated":"2025-09-23 15:50:47","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/wise.com\/pay\/r\/DO2Z3vnWLZfydZY","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":274,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.4":{"tag":"0.1.4","author":"konion","date":"2025-09-20 11:47:34"},"0.1.5":{"tag":"0.1.5","author":"konion","date":"2025-09-23 15:50:47"}},"upgrade_notice":{"0.1.5":"<p>Screenshots<\/p>","0.1.4":"<p>Critical fixes and correct date display. Please update.<\/p>","0.1.2":"<p>Initial public build. Review your Settings \u2192 currency\/pages before going live.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":3364937,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":3364938,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3364936,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3364935,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3366658,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"preferredVersions\":{\"wp\":\"latest\",\"php\":\"8.2\"},\"landingPage\":\"\\\/wp-admin\\\/plugins.php\",\"features\":{\"networking\":true},\"steps\":[{\"step\":\"login\"},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"myrentbook\"}},{\"step\":\"activatePlugin\",\"pluginPath\":\"myrentbook\\\/myrentbook.php\"},{\"step\":\"installPlugin\",\"pluginZipFile\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"myrentbook\"},\"options\":{\"activate\":true}}]}"}},"all_blocks":[],"tagged_versions":["0.1.4","0.1.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3365026,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3365064,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3365025,"resolution":"3","location":"assets","locale":""}},"screenshots":{"1":"Lease payments overview","2":"Lease editor","3":"Charge editor"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[248117,5071,13656,5075,248118],"plugin_category":[],"plugin_contributors":[236253],"plugin_business_model":[],"class_list":["post-252011","plugin","type-plugin","status-publish","hentry","plugin_tags-landlord","plugin_tags-property-management","plugin_tags-rent","plugin_tags-rental","plugin_tags-tenant","plugin_contributors-konion","plugin_committers-konion"],"banners":{"banner":"https:\/\/ps.w.org\/myrentbook\/assets\/banner-772x250.jpg?rev=3364935","banner_2x":"https:\/\/ps.w.org\/myrentbook\/assets\/banner-1544x500.jpg?rev=3364936","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/myrentbook\/assets\/icon-128x128.jpg?rev=3364937","icon_2x":"https:\/\/ps.w.org\/myrentbook\/assets\/icon-256x256.jpg?rev=3364938","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/myrentbook\/assets\/screenshot-1.png?rev=3365026","caption":"Lease payments overview"},{"src":"https:\/\/ps.w.org\/myrentbook\/assets\/screenshot-2.png?rev=3365064","caption":"Lease editor"},{"src":"https:\/\/ps.w.org\/myrentbook\/assets\/screenshot-3.png?rev=3365025","caption":"Charge editor"}],"raw_content":"<!--section=description-->\n<h3>Why this plugin<\/h3>\n\n<p>Most of us have lived through long-term rentals and know how quickly calculations get messy: due dates, partial payments, utilities, unexpected expenses. Without a clear record and a shared view, transparency\u2014and trust\u2014suffer on both sides.<br \/>\n<strong>MyRentBook<\/strong> fixes that with a clear, lightweight bookkeeping layer where landlord and tenant see the same numbers and stay on the same page. No black boxes, no external services\u2014everything runs inside your WordPress.<\/p>\n\n<h3>What you get<\/h3>\n\n<p>\u2013 <strong>Unified rent + utilities.<\/strong> Charges per lease (rent \/ utilities \/ miscellaneous) in one place.<br \/>\n\u2013 <strong>Partial payments &amp; running balance.<\/strong> Record partial payments\u2014remaining balance and statuses update automatically.<br \/>\n\u2013 <strong>Credit balance (overpayments) with auto-apply.<\/strong> Overpayments accumulate as a credit you can optionally auto-apply to the next due charge.<br \/>\n\u2013 <strong>Clear statuses.<\/strong> Paid \/ Partially paid \/ Unpaid\u2014easy to read for both sides.<br \/>\n\u2013 <strong>Two dashboards.<\/strong> Shortcodes for a landlord panel and a tenant cabinet\u2014place them on any page.<br \/>\n\u2013 <strong>Notices &amp; reminders.<\/strong> Reminders via WP-Cron, no third-party services.<br \/>\n\u2013 <strong>Privacy by default.<\/strong> Data stays in your database; you control access to pages.<br \/>\n\u2013 <strong>Translation-ready.<\/strong> English, Spanish, and Russian included; easy to add more.<\/p>\n\n<h3>How it works (quickly)<\/h3>\n\n<p>1) Create a <strong>Property<\/strong>.<br \/>\n2) Create a <strong>Lease<\/strong> and link it to the property.<br \/>\n3) Add <strong>Charges<\/strong> (rent, utilities, miscellaneous) and record incoming payments.<br \/>\n4) The system recalculates balance and statuses, taking partial payments and credit into account.<\/p>\n\n<h3>Fit, customization, and branding<\/h3>\n\n<p><strong>MyRentBook<\/strong> adapts to your site and brand:\n\u2013 <strong>Shortcodes<\/strong> work anywhere (Gutenberg, Elementor, etc.).<br \/>\n\u2013 <strong>Easy styling<\/strong> with <code>myrentbook-<\/code> CSS class prefixes.<br \/>\n\u2013 <strong>Text &amp; terminology<\/strong> editable via translation tools (Loco Translate \/ Poedit).<br \/>\n\u2013 <strong>Branding<\/strong>: add your logo\/colors around shortcode pages; use your theme blocks and UI components.<br \/>\n\u2013 <strong>Settings<\/strong> for currency, dashboard pages, credit auto-apply, notices, and more.<\/p>\n\n<p>If you\u2019re a small agency, you can present branded dashboards to clients without building a SaaS and without monthly vendor lock-in.<\/p>\n\n<h3>Who is it for<\/h3>\n\n<p>\u2013 Individual landlords (from 1\u201310 properties and up).<br \/>\n\u2013 Small agencies \/ property managers.<br \/>\n\u2013 Anyone who values <strong>transparency<\/strong>, <strong>simple bookkeeping rules<\/strong>, and <strong>self-hosted data<\/strong>.<\/p>\n\n<h3>Roadmap<\/h3>\n\n<p>There is an active roadmap and we keep improving the plugin based on feedback. Your support directly helps it grow faster.<\/p>\n\n<h3>Shortcodes<\/h3>\n\n<p>\u2013 <code>[myrentbook_tenant]<\/code> \u2014 tenant cabinet for the current logged-in user.<br \/>\n\u2013 <code>[myrentbook_landlord]<\/code> \u2014 landlord panel (requires appropriate capability).<br \/>\n\u2013 <code>[myrentbook_notice]<\/code> \u2014 notices block for the selected receiver page.<\/p>\n\n<p>(Restrict access to these pages with your membership\/roles plugin or custom capabilities.)<\/p>\n\n<h3>Privacy Policy<\/h3>\n\n<p>This plugin does not send personal data to outside servers. Data is stored locally in your WordPress database. If you export\/delete personal data in WordPress, include related lease and charge records as needed.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install via <strong>Plugins \u2192 Add New<\/strong>.  <\/li>\n<li>Activate <strong>MyRentBook<\/strong>.  <\/li>\n<li>Go to <strong>MyRentBook \u2192 Settings<\/strong> to configure:\n\u2013 default currency,\n\u2013 pages for <code>[myrentbook_tenant]<\/code> and <code>[myrentbook_landlord]<\/code>,\n\u2013 credit auto-apply, notices, and other behavior.  <\/li>\n<li>Create a <strong>Property<\/strong>, then a <strong>Lease<\/strong>, then add <strong>Charges<\/strong> (rent \/ utility \/ misc).  <\/li>\n<li>Place the shortcodes on the pages you want:\n\u2013 Tenant view: <code>[myrentbook_tenant]<\/code><br \/>\n\u2013 Landlord view: <code>[myrentbook_landlord]<\/code><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='en%3A%20how%20do%20i%20create%20a%20modal%20for%20messages%20in%20gutenberg%20%28no%20extra%20plugins%29%3F'><h3>EN: How do I create a modal for messages in Gutenberg (no extra plugins)?<\/h3><\/dt>\n<dd><p>Short version: add one Group block with id=msg1 and class myrentbook-modal, nest one inner Group with class myrentbook-modal__dialog, place your Shortcode block and a Close button underneath. Paste a small CSS snippet above the modal block and a JS snippet in the site footer.<\/p>\n\n<p>Steps\n1) In the target page, create a Group block \u2192 in \u201cHTML Anchor\u201d enter: msg1 (this yields id=\"msg1\").\n   In \u201cAdditional CSS class(es)\u201d enter: myrentbook-modal\n2) Inside this group, add another Group block \u2192 in \u201cAdditional CSS class(es)\u201d enter: myrentbook-modal__dialog\n3) Inside the inner group (\u201ccard\u201d), add:\n   \u2013 a Shortcode block (important: NOT \u201cCustom HTML\u201d),\n   \u2013 below it, a Buttons block with a single button whose link (URL) is #close.\n   Resulting structure:\n   Group (id=msg1, class=myrentbook-modal)\n     \u2514\u2500 Group (class=myrentbook-modal__dialog)\n          \u251c\u2500 Shortcode  [your plugin prints the message here]\n          \u2514\u2500 Buttons    [one button with URL #close]<\/p>\n\n<p>4) Directly ABOVE the modal, add a \u201cCustom HTML\u201d block and paste this CSS:<\/p>\n\n\n\/* Hide modal by default; show when class is added *\/\n.myrentbook-modal{ display:none; }\n.myrentbook-modal.myrentbook--open{ display:block; }\n\/* Full-surface overlay and positioning *\/\n.myrentbook-modal{\n  position:fixed !important; inset:0 !important;\n  display:none; align-items:flex-start; justify-content:center;\n  padding-top:10vh; background:transparent !important;\n  z-index:2147483647; margin:0 !important; max-width:none !important;\n}\n.myrentbook-modal.myrentbook--open{ display:flex !important; }\n.myrentbook-modal::before{ content:\"\"; position:absolute; inset:0; background:rgba(0,0,0,.6); }\n\n\/* Dialog \u201ccard\u201d (inner group = message + button) *\/\n.myrentbook-modal__dialog{\n  position:relative; z-index:1;\n  width:min(720px, calc(100% - 32px));\n  background:#fff; border-radius:12px;\n  padding:20px 24px 18px;\n  box-shadow:0 18px 50px rgba(0,0,0,.30);\n  margin:0 !important;\n}\n\n\/* Tame Gutenberg layout wrappers inside the card *\/\n.myrentbook-modal__dialog [class*=\"is-layout-\"],\n.myrentbook-modal__dialog [class*=\"wp-container-\"]{\n  margin:0 !important; max-width:none !important; gap:0 !important;\n}\n\n\/* Center the shortcode\/text content *\/\n.myrentbook-modal__dialog .myrentbook-notice__inner,\n.myrentbook-modal__dialog .wp-block-shortcode{ text-align:center !important; }\n.myrentbook-modal__dialog .myrentbook-notice__inner &gt; *,\n.myrentbook-modal__dialog .wp-block-shortcode &gt; *{\n  margin-left:auto !important; margin-right:auto !important;\n}\n.myrentbook-modal__dialog p{ text-align:center !important; }\n\n\/* Button(s) under the message *\/\n.myrentbook-modal__dialog &gt; .wp-block-buttons{\n  display:flex; justify-content:center; \/* change to flex-end if you prefer right-aligned *\/\n  margin-top:12px !important;\n}\n\n\n<p>5) Paste this JS into the site footer (choose one: Site Editor \u2192 Footer \u2192 \u201cCustom HTML\u201d block; or a \u201cheaders &amp; footers\u201d helper plugin; or directly into footer.php before ):<\/p>\n\n\n\/* ===== MyRentBook: auto-modal when a message exists ===== *\/\n\/* No design changes here \u2014 just show\/hide *\/\n\ndocument.addEventListener('DOMContentLoaded', function(){\n  var modal = document.getElementById('msg1');\n  if(!modal) return;\n\n  \/\/ If there is any notice inside \u2014 open the modal\n  if(modal.querySelector('.myrentbook-notice')){\n    modal.classList.add('myrentbook--open');\n\n    \/\/ Optional: auto-close success after 3 seconds\n    if(modal.querySelector('.myrentbook-notice--success')){\n      setTimeout(function(){ modal.classList.remove('myrentbook--open'); }, 3000);\n    }\n  }\n});\n\n\/\/ Close on link with href=\"#close\"\ndocument.addEventListener('click', function(e){\n  var a = e.target.closest('a[href=\"#close\"]');\n  if(!a) return;\n  e.preventDefault();\n  var modal = a.closest('.myrentbook-modal');\n  if(modal){ modal.classList.remove('myrentbook--open'); }\n});\n\n\/\/ Close on Esc\ndocument.addEventListener('keydown', function(e){\n  if(e.key === 'Escape'){\n    document.querySelectorAll('.myrentbook-modal.myrentbook--open')\n      .forEach(function(m){ m.classList.remove('myrentbook--open'); });\n  }\n});\n\n\n<p>How it works\n\u2013 On page load, the script looks for #msg1. If it contains .myrentbook-notice (success or error), the modal opens with a dark overlay.\n\u2013 Closing works via the #close button and the Esc key.\n\u2013 Shortcodes must be added via the \u201cShortcode\u201d block (NOT \u201cCustom HTML\u201d), or WordPress will not render them.<\/p>\n\n<p>Troubleshooting\n\u2013 Modal doesn\u2019t open: ensure the outer group has id=\"msg1\" and class myrentbook-modal, and that the inner content actually outputs a .myrentbook-notice element.\n\u2013 Button does nothing: its link must be exactly #close.\n\u2013 Shortcode shows as plain text: replace \u201cCustom HTML\u201d with the \u201cShortcode\u201d block.\n\u2013 Cache\/minification: clear caches after adding CSS\/JS.\n\u2013 Polylang: create the modal on each language version of the page (content is just regular blocks).<\/p>\n\n<p>Multiple modals (optional)\nDuplicate the structure with different anchors (msg2, msg3). Then either duplicate the JS block with the new IDs or generalize the code to loop over all .myrentbook-modal elements. For most setups, one modal (msg1) is enough.<\/p>\n\n<p>Notes\n\u2013 You can adjust the auto-close timeout (3000 ms) or remove that block if you don\u2019t want auto-closing for success.\n\u2013 If your theme has very aggressive styles, the provided CSS already neutralizes common layout wrappers inside the dialog card without affecting the rest of the site.<\/p><\/dd>\n<dt id='does%20it%20expose%20anything%20publicly%3F'><h3>Does it expose anything publicly?<\/h3><\/dt>\n<dd><p>Only the pages where you place shortcodes will render dashboards. Typically you keep tenant pages behind login; the plugin does not publish public archives for sensitive CPTs by default.<\/p><\/dd>\n<dt id='how%20do%20partial%20payments%20work%3F'><h3>How do partial payments work?<\/h3><\/dt>\n<dd><p>When you record a payment smaller than the charge, the remaining balance stays open; totals and statuses are recalculated per lease.<\/p><\/dd>\n<dt id='what%20is%20%E2%80%9Ccredit%20auto-apply%E2%80%9D%3F'><h3>What is \u201ccredit auto-apply\u201d?<\/h3><\/dt>\n<dd><p>When enabled, overpayments (credit) are automatically applied to the nearest open debt of the lease. You can also trigger \u201cApply credit now\u201d manually from the landlord panel.<\/p><\/dd>\n<dt id='multilingual%20support%3F'><h3>Multilingual support?<\/h3><\/dt>\n<dd><p>The plugin is fully localized. English (en_US), Spanish (es_ES) and Russian (ru_RU) are included; you can add more via translate.wordpress.org or tools like Loco Translate \/ Poedit.<\/p><\/dd>\n<dt id='does%20it%20send%20data%20to%20third%20parties%3F'><h3>Does it send data to third parties?<\/h3><\/dt>\n<dd><p>No. Everything runs on your WordPress (including reminders via WP-Cron).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.5<\/h4>\n\n<p>Screenshots<\/p>\n\n<h4>0.1.4<\/h4>\n\n<p>Critical bug fixes.\nDate display standardized.<\/p>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>First public review build.  <\/li>\n<li>Tenant and landlord shortcodes.  <\/li>\n<li>Charges (rent\/utilities), partial payments, and credit auto-apply.  <\/li>\n<li>Settings page and notices block.  <\/li>\n<li>Translations: en_US, es_ES, ru_RU.<\/li>\n<\/ul>","raw_excerpt":"Self-hosted rental bookkeeping: rent &amp; utilities, partial payments, credit auto-apply, statuses and reminders. Transparent for landlord and tenant.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/252011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=252011"}],"author":[{"embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/konion"}],"wp:attachment":[{"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=252011"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=252011"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=252011"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=252011"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=252011"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=252011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}