{
    "id": 1039,
    "date": "2026-05-20T18:36:17",
    "date_gmt": "2026-05-20T16:36:17",
    "guid": {
        "rendered": "https:\/\/rewolucjaai.pl\/?page_id=1039"
    },
    "modified": "2026-05-20T18:36:19",
    "modified_gmt": "2026-05-20T16:36:19",
    "slug": "pqm-pro-updates-license-and-security",
    "status": "publish",
    "type": "page",
    "link": "https:\/\/rewolucjaai.pl\/pl\/?page_id=1039",
    "title": {
        "rendered": "PQM Pro \u2013 Aktualizacje, Licencja i Bezpiecze\u0144stwo"
    },
    "content": {
        "rendered": "<p><!--\nTitle: PQM Pro \u2013 Updates, License and Security\nDescription: Updates, license and security guide.\nSuggested URL slug: pqm-pro-updates-license-and-security\nPrepared for: rewolucjaai.pl \/ PQM English documentation\n--><\/p>\n<style>\n.pqm-doc{font-family:Arial,Helvetica,sans-serif;line-height:1.65;color:#1f2937;max-width:1040px;margin:0 auto;padding:24px}\n.pqm-doc h1{font-size:40px;line-height:1.15;margin:0 0 18px;color:#111827}\n.pqm-doc h2{font-size:28px;line-height:1.25;margin:38px 0 14px;color:#111827}\n.pqm-doc h3{font-size:21px;line-height:1.35;margin:26px 0 10px;color:#111827}\n.pqm-doc p{margin:0 0 16px}\n.pqm-doc ul,.pqm-doc ol{margin:0 0 20px 24px;padding:0}\n.pqm-doc li{margin:6px 0}\n.pqm-doc code{background:#f3f4f6;border:1px solid #e5e7eb;padding:2px 6px;border-radius:6px}\n.pqm-doc pre{background:#111827;color:#f9fafb;padding:16px;border-radius:12px;overflow:auto}\n.pqm-doc pre code{background:transparent;border:0;color:inherit;padding:0}\n.pqm-doc .lead{font-size:19px;color:#374151;margin-bottom:24px}\n.pqm-doc .note{background:#f8fafc;border-left:5px solid #2563eb;padding:16px 18px;border-radius:10px;margin:22px 0}\n.pqm-doc .warning{background:#fff7ed;border-left:5px solid #f97316;padding:16px 18px;border-radius:10px;margin:22px 0}\n.pqm-doc .success{background:#f0fdf4;border-left:5px solid #16a34a;padding:16px 18px;border-radius:10px;margin:22px 0}\n.pqm-doc .grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin:22px 0}\n.pqm-doc .card{border:1px solid #e5e7eb;border-radius:16px;padding:18px;background:#fff;box-shadow:0 8px 24px rgba(15,23,42,.06)}\n.pqm-doc .toc{background:#f9fafb;border:1px solid #e5e7eb;border-radius:16px;padding:18px;margin:26px 0}\n.pqm-doc .toc a{color:#2563eb;text-decoration:none}\n.pqm-doc table{width:100%;border-collapse:collapse;margin:20px 0;overflow:hidden;border-radius:12px}\n.pqm-doc th,.pqm-doc td{border:1px solid #e5e7eb;padding:10px;text-align:left;vertical-align:top}\n.pqm-doc th{background:#f3f4f6;color:#111827}\n.pqm-doc .muted{color:#6b7280}\n.pqm-doc .cta{background:#111827;color:#fff;padding:22px;border-radius:18px;margin:32px 0}\n.pqm-doc .cta h2,.pqm-doc .cta h3{color:#fff;margin-top:0}\n.pqm-doc .cta a{color:#bfdbfe}\n<\/style>\n<article class=\"pqm-doc\">\n<h1>PQM Pro \u2013 Aktualizacje, Licencja i Bezpiecze\u0144stwo<\/h1>\n<p class=\"lead\">PQM Pro and its modules can be updated from a dedicated update server. This allows customers to receive new versions and fixes without manually uploading ZIP packages, while access to updates can be controlled by license entitlements.<\/p>\n<h2>How updates work<\/h2>\n<p>WordPress has a built-in plugin update system. PQM Pro can integrate with that system through a custom updater. This allows PQM Pro and its modules to behave like standard WordPress plugins even when update packages are delivered from an external server.<\/p>\n<h2>Where updates appear<\/h2>\n<ul>\n<li><strong>Plugins<\/strong> screen,<\/li>\n<li><strong>Dashboard \u2192 Updates<\/strong>,<\/li>\n<li><strong>PQM \u2192 Modules<\/strong> for module updates,<\/li>\n<li>version details or changelog screen if provided.<\/li>\n<\/ul>\n<h2>PQM Pro updates<\/h2>\n<p>The main PQM Pro plugin should have its own version check. The system compares the installed version with the latest version available on the update server. If a newer version exists and the license allows access, WordPress displays the update.<\/p>\n<h2>Module updates<\/h2>\n<p>Modules should update like normal WordPress plugins. The difference is that version information and package URLs come from the PQM update server. The <strong>PQM \u2192 Modules<\/strong> screen can show an Update button, but the actual update should use WordPress plugin update functions.<\/p>\n<h2>License<\/h2>\n<p>A license defines whether an installation has access to PQM Pro and specific modules. A typical license record may include:<\/p>\n<ul>\n<li>license key,<\/li>\n<li>status: active, expired or blocked,<\/li>\n<li>domain or activation count,<\/li>\n<li>plan,<\/li>\n<li>list of enabled modules,<\/li>\n<li>expiration date for updates or support.<\/li>\n<\/ul>\n<h2>Entitlements<\/h2>\n<p>Entitlements define which modules or features belong to a license. A customer may have PQM Pro plus NASA+ Analytics and Orders, but not Warehouse or Communication.<\/p>\n<pre><code>{\n  \"license_status\": \"active\",\n  \"plan\": \"pro\",\n  \"modules\": [\n    \"pqm-nasa-analytics\",\n    \"pqm-orders\"\n  ]\n}<\/code><\/pre>\n<h2>Secure update packages<\/h2>\n<p>Update packages should be downloaded from a trusted secure endpoint and only when the license allows access. Package URLs may be temporary, tokenized or generated on request.<\/p>\n<h2>Before updating<\/h2>\n<ol>\n<li>Create a full backup of files and database.<\/li>\n<li>Check WordPress and PHP requirements.<\/li>\n<li>For major updates, test on staging first.<\/li>\n<li>Update PQM Pro before updating modules.<\/li>\n<li>After updating, test tasks, reports, email automation and the customer panel.<\/li>\n<\/ol>\n<h2>Common update issues<\/h2>\n<table>\n<thead>\n<tr>\n<th>Issue<\/th>\n<th>Possible reason<\/th>\n<th>Solution<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Update not visible<\/td>\n<td>WordPress update transient cache.<\/td>\n<td>Check updates again or clear the update_plugins transient.<\/td>\n<\/tr>\n<tr>\n<td>Missing update icon<\/td>\n<td>The custom updater does not pass the icons field.<\/td>\n<td>Add icons to update and no_update responses.<\/td>\n<\/tr>\n<tr>\n<td>Package cannot be downloaded<\/td>\n<td>Expired license or invalid package URL.<\/td>\n<td>Check license status and generate a new secure URL.<\/td>\n<\/tr>\n<tr>\n<td>Module fails after update<\/td>\n<td>Requires a newer PQM version.<\/td>\n<td>Update the main PQM plugin first.<\/td>\n<\/tr>\n<tr>\n<td>Critical error<\/td>\n<td>PHP conflict, missing file or incompatible version.<\/td>\n<td>Restore backup and check logs.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Security best practices<\/h2>\n<ul>\n<li>Install module packages only from trusted sources.<\/li>\n<li>Do not share license keys publicly.<\/li>\n<li>Do not update production without a backup.<\/li>\n<li>Keep WordPress, PHP and plugins up to date.<\/li>\n<li>Check error logs after updates.<\/li>\n<li>Use staging for larger changes.<\/li>\n<\/ul>\n<div class=\"success\">\n<p>A well-designed updater makes PQM Pro feel like a professional WordPress product: updates are visible, convenient and controlled by license access.<\/p>\n<\/div>\n<\/article>",
        "protected": false
    },
    "excerpt": {
        "rendered": "<p>PQM Pro \u2013 Updates, License and Security PQM Pro and its modules can be updated from a dedicated update server. This allows customers to receive new versions and fixes without manually uploading ZIP packages, while access to updates can be controlled by license entitlements. How updates work WordPress has a built-in plugin update system. PQM [&hellip;]<\/p>",
        "protected": false
    },
    "author": 1,
    "featured_media": 0,
    "parent": 0,
    "menu_order": 0,
    "comment_status": "closed",
    "ping_status": "closed",
    "template": "",
    "meta": {
        "footnotes": ""
    },
    "class_list": [
        "post-1039",
        "page",
        "type-page",
        "status-publish",
        "hentry"
    ],
    "blocksy_meta": [],
    "jetpack_sharing_enabled": true,
    "_links": {
        "self": [
            {
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=\/wp\/v2\/pages\/1039",
                "targetHints": {
                    "allow": [
                        "GET"
                    ]
                }
            }
        ],
        "collection": [
            {
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=\/wp\/v2\/pages"
            }
        ],
        "about": [
            {
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=\/wp\/v2\/types\/page"
            }
        ],
        "author": [
            {
                "embeddable": true,
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=\/wp\/v2\/users\/1"
            }
        ],
        "replies": [
            {
                "embeddable": true,
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1039"
            }
        ],
        "version-history": [
            {
                "count": 1,
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=\/wp\/v2\/pages\/1039\/revisions"
            }
        ],
        "predecessor-version": [
            {
                "id": 1040,
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=\/wp\/v2\/pages\/1039\/revisions\/1040"
            }
        ],
        "wp:attachment": [
            {
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1039"
            }
        ],
        "curies": [
            {
                "name": "wp",
                "href": "https:\/\/api.w.org\/{rel}",
                "templated": true
            }
        ]
    }
}