PowerCMS X ブログ
2024-12-03
PowerCMS X ではスペースを削除するとそのスペースに所属しているオブジェクトが自動で削除されます。
不要なデータが残らないように設計されているため、出力済みのファイルが削除されると共に、データベースに格納されているデータも物理削除が行われます。
しかし URL オブジェクトのデータだけは物理削除ではなく論理削除が行われ、データ自体は残ります。(所属スペースが「*削除されました*」という表記になります。[1])
この『所属スペースが「*削除されました*」となっているデータ』だけを抽出して、URL データを物理削除したいという要望があったのですが、製品標準のフィルタ機能だけでは絞り込むことが出来ませんでした。
そこで、SystemFilterDeletedSpaceURL プラグインを作成しました。
このプラグインを有効化すると、システムの URL 一覧画面にシステムフィルタ「削除済みスペースのURL」が追加されます。
システムフィルタ「削除済みスペースのURL」を適用すると、所属スペースが「*削除されました*」となっている URL だけを絞り込めます。
ダウンロード: SystemFilterDeletedSpaceURL (1.9KB)
{
"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
}
}
}
}
}
<?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';
}
}
}