PowerCMS X ブログ

2024-12-03

削除済みスペースの URL オブジェクトを抽出できる SystemFilterDeletedSpaceURL プラグイン

PowerCMS X ではスペースを削除するとそのスペースに所属しているオブジェクトが自動で削除されます。
不要なデータが残らないように設計されているため、出力済みのファイルが削除されると共に、データベースに格納されているデータも物理削除が行われます。

しかし URL オブジェクトのデータだけは物理削除ではなく論理削除が行われ、データ自体は残ります。(所属スペースが「*削除されました*」という表記になります。[1]

削除されたスペースの URL オブジェクトの画面

システムフィルタ「削除済みスペースのURL」を追加する

この『所属スペースが「*削除されました*」となっているデータ』だけを抽出して、URL データを物理削除したいという要望があったのですが、製品標準のフィルタ機能だけでは絞り込むことが出来ませんでした。

そこで、SystemFilterDeletedSpaceURL プラグインを作成しました。
このプラグインを有効化すると、システムの URL 一覧画面にシステムフィルタ「削除済みスペースのURL」が追加されます。

システムフィルタ「削除済みスペースのURL」を追加した画面

システムフィルタ「削除済みスペースのURL」を適用すると、所属スペースが「*削除されました*」となっている URL だけを絞り込めます。

SystemFilterDeletedSpaceURL プラグイン [2]

ダウンロード: SystemFilterDeletedSpaceURL (1.9KB)

config.json

{
    "label": "SystemFilterDeletedSpaceURL",
    "id": "systemfilterdeletedspaceurl",
    "component": "SystemFilterDeletedSpaceURL",
    "description": "Adds the system filter \"URLs of deleted spaces\" to the URL list screen.",
    "version": "0.1",
    "author": "Alfasado Inc.",
    "author_link": "https://alfasado.net",
    "system_filters": {
        "filter_urlinfo_deleted_space_url": {
            "urlinfo": {
                "filter_urlinfo_deleted_space_url": {
                    "name": "filter_urlinfo_deleted_space_url",
                    "label": "URL of deleted space",
                    "component": "SystemFilterDeletedSpaceURL",
                    "method": "filter_urlinfo_deleted_space_url",
                    "scope" : "system",
                    "order": 100
                }
            }
        }
    }
}

SystemFilterDeletedSpaceURL.php

<?php
require_once( LIB_DIR . 'Prototype' . DS . 'class.PTPlugin.php' );
class SystemFilterDeletedSpaceURL extends PTPlugin
{
    public function __construct ()
    {
        parent::__construct();
    }
    public function filter_urlinfo_deleted_space_url ( $app, &$terms, $model, $option, &$args, &$extra, &$ex_vals )
    {
        if ( $model === 'urlinfo' ) {
            $terms['workspace_id'] = [ '!=' => 0 ];
            $terms['delete_flag'] = [ 0, 1 ];
            $args['join'] = [ 'workspace', [ 'urlinfo_workspace_id', 'id', 'LEFT OUTER JOIN' ], null, 'name' ];
            $extra .= ' AND ' . $app->db->prefix . 'workspace.workspace_id IS NULL';
        }
    }
}

脚注

  1. 「削除された URL」というデータの存在は製品が意図した挙動です。例えば SiteSync プラグイン では同期するときに「このファイルは削除の対象とする」という判定で論理削除された URL のデータを利用しています。[^1]
  2. 記事執筆時点で最新の PowerCMS X ver.3.62 で動作確認しています。[^2]

カテゴリー:プラグイン | サポート

投稿者:たはかし

ブログ内検索

アーカイブ