Helper
in package
Table of Contents
Properties
- $cacheField : AdapterInterface
- $deleteField : Field
- extract()後の削除フィールドを一時保存
- $Get : Field
- $Post : Field
- $Q : Field
- $appSalt : string|null
- アプリの固定ソルト
- $currentSalt : string|null
- 現在のソルト
- $isForceV1Build : bool
- 強制的にV1ビルドを行うかどうかのフラグ
- $isV2Module : bool
- V2モジュールかどうか判定用のフラグ
- $managedDomainsCache : array<string|int, string>|null
- 管理ドメインリスト(キャッシュ)
- $mediaDeliveryUrl : string
- メディアの配信URL
- $mimeTypeValidator : MimeTypeValidator
- MIMEタイプ検証クラス
- $previousSalt : string|null
- 1つ前のソルト
Methods
- __construct() : mixed
- Constructor
- addCsrfToken() : string
- CSRFトークンをFromに付与
- addSecurityHeader() : mixed
- セキュリティヘッダー
- backgroundRedirect() : mixed
- すぐにリダイレクトし、同一プロセスのバックグラウンドで処理を実行
- camelize() : string
- checkCsrfToken() : bool
- CSRFトークンのチェック
- clientCacheHeader() : void
- セキュリティヘッダーを追加
- convertAssetUrlsToAbsolute() : string
- HTML内のアセット参照(画像・動画・スタイルシート等)を絶対URLに変換する。
- convertRelativeUrlToAbsolute() : string
- 単一の相対URLを絶対URL(フルURL)に変換する
- createCsrfToken() : string
- CSRFトークンを生成
- csrfTokenExists() : bool
- CSRFトークンの存在チェック
- decrypt() : string
- deleteField() : void
- カスタムフィールドの削除
- deleteFieldCache() : mixed
- カスタムフィールドキャッシュの削除
- download() : never
- ファイルダウンロード
- encrypt() : string
- exceptionArray() : array<string|int, string|int>
- 例外情報を連想配列に変換
- extract() : Field_Validation
- POSTデータからデータの抜き出し
- fixAliasPath() : string
- 管理画面でテンプレート直で書かれているパスを、エイリアスを含んだURLに修正
- flushCache() : mixed
- genPass() : string
- パスワードジェネレータ
- getAppSalt() : string
- アプリの固定ソルトを取得
- getCurrentSalt() : string
- 現在のソルトを取得
- getDeleteField() : Field
- extract()後の削除フィールドを取得
- getEncryptIv() : string
- getHttpHeader() : string
- ToDo: リファクタリング
- getInheritedThemes() : array<string|int, string>
- 指定されたテーマの継承テーマ・システムテーマすべてのテーマの配列を取得
- getJsModules() : array<string|int, mixed>
- getMailTxt() : string
- メールテンプレートの解決
- getMailTxtFromTxt() : string
- getPreviousSalt() : string
- 1つ前のソルトを取得
- getTagsFromString() : array<string|int, string>
- タグの配列化
- getUriObject() : Field
- URIオブジェクトの取得
- isAuthorizedAjaxRequest() : bool
- 許可されたajaxアクセスか判定(どのようなtpl指定であっても許可する)
- isForceV1Build() : bool
- 強制的にV1ビルドを行うか判定
- isLocalPrivateStorage() : bool
- プライベートストレージの設定がローカルかどうか
- isLocalPublicStorage() : bool
- パブリックストレージの設定がローカルかどうか
- isManagedDomain() : bool
- 指定されたドメインが管理ドメインかどうかを判定
- isSafeUrl() : bool
- a-blog cms で管理しているドメインのURLかチェックする
- isV2Module() : bool
- V2モジュールとして実行中か判定
- loadBlogFulltext() : string
- ブログのフルテキストを取得
- loadCategoryFulltext() : string
- カテゴリのフルテキストを取得
- loadEntryFulltext() : string
- エントリーのフルテキストを取得
- loadField() : Field
- ブログID, カテゴリーID, エントリーID,ユーザーIDの いずれか指定されたカスタムフィールドをFieldオブジェクトで返す
- loadUserFulltext() : string
- ユーザーのフルテキストを取得
- logLockPost() : mixed
- mailConfig() : mixed
- メール設定の取得
- parseMarkdown() : string
- マークダウン文字列を解析する
- replaceDeliveryUrl() : string
- メディアの配信先URLを書き換え
- replaceDeliveryUrlAll() : string
- メディアの配信先URLを書き換え(全て)
- resolveUrl() : string
- V2モジュール、V2APIビルド時に、URLを絶対URLに変換 それ以外はそのままのURLを返す
- responseJson() : mixed
- saveCache() : mixed
- saveField() : bool
- カスタムフィールドの保存
- saveFulltext() : void
- フルテキストの保存
- setAppSalt() : void
- アプリ全体で使用するSaltを更新・設定
- setCurrentSalt() : void
- 現在のソルトを設定
- setForceV1Build() : void
- 強制的にV1ビルドを行うか設定
- setPreviousSalt() : void
- 1つ前のソルトを設定
- setSafeHeadersWithoutCache() : void
- キャッシュ無効で安全なレスポンスヘッダーを組み立てます。
- setV2Module() : void
- V2モジュールとして実行中か設定
- toAbsoluteUrl() : string
- URL を完全な absolute URL(scheme + host + path)に変換する。
- toRootRelativeUrl() : string
- URL を root-relative URL(`/path` 形式、scheme/host を含まない)に変換する。
- uploadAssetDirectory() : void
- ローカルのディレクトリをS3などのリモートストレージにアップロード
- validateFileUpload() : void
- ファイルアップロードを検証
- validateLockPost() : bool
- getManagedDomains() : array<string|int, string>
- 管理ドメインのリストを取得(キャッシュあり)
- isUrlFromManagedDomain() : bool
- 指定URLが管理ドメインからのものかどうかを判定
- collectMarkedFieldFiles() : array<int, array{path: string, type: "image"|"file"}>
- Field のメタ情報 'removeOld' に積まれた削除予約を収集する。
- collectOrphanedFieldPaths() : array<int, array{path: string, type: "image"|"file"}>
- グループフィールド行削除で孤児化する @path のリストを収集する。
- deletePhysicalFieldFile() : void
- カスタムフィールド image/file 型のファイルを物理削除する。
- extractOrigin() : string
- URI から origin(scheme + host + port)を抽出する。
- getEncryptKey() : string
- 暗号化キーを取得
- isAbsoluteUri() : bool
- URL が "absolute URI" として自己解決可能かを判定する。
- isReferencedByField() : bool
- 指定パスが field / field_rev テーブルのいずれかのレコードで使われているか判定する。
- markFieldFileForRemoval() : void
- 削除チェック・差し替え時に旧ファイルを saveField() 後に物理削除するよう Field にマーキングする。
- removeUnreferencedFieldFiles() : void
- 削除候補パスのうち、field / field_rev テーブルのどこからも参照されていないものを物理削除する。
- resolveAgainstBase() : string
- resolveSrcset() : string
- `srcset` 属性値内の各 URL を base URL に対して解決する。
Properties
$cacheField
protected
AdapterInterface
$cacheField
$deleteField
extract()後の削除フィールドを一時保存
protected
Field
$deleteField
$Get
protected
Field
$Get
$Post
protected
Field
$Post
$Q
protected
Field
$Q
$appSalt
アプリの固定ソルト
private
string|null
$appSalt
= null
$currentSalt
現在のソルト
private
string|null
$currentSalt
= null
$isForceV1Build
強制的にV1ビルドを行うかどうかのフラグ
private
bool
$isForceV1Build
= false
$isV2Module
V2モジュールかどうか判定用のフラグ
private
bool
$isV2Module
= false
$managedDomainsCache
管理ドメインリスト(キャッシュ)
private
array<string|int, string>|null
$managedDomainsCache
= null
$mediaDeliveryUrl
メディアの配信URL
private
string
$mediaDeliveryUrl
= ''
$mimeTypeValidator
MIMEタイプ検証クラス
private
MimeTypeValidator
$mimeTypeValidator
$previousSalt
1つ前のソルト
private
string|null
$previousSalt
= null
Methods
__construct()
Constructor
public
__construct() : mixed
addCsrfToken()
CSRFトークンをFromに付与
public
addCsrfToken(string $tpl) : string
Parameters
- $tpl : string
Return values
stringaddSecurityHeader()
セキュリティヘッダー
public
addSecurityHeader() : mixed
backgroundRedirect()
すぐにリダイレクトし、同一プロセスのバックグラウンドで処理を実行
public
backgroundRedirect(string $url) : mixed
Parameters
- $url : string
camelize()
public
camelize(mixed $str) : string
Parameters
- $str : mixed
Return values
stringcheckCsrfToken()
CSRFトークンのチェック
public
checkCsrfToken(string $token) : bool
Parameters
- $token : string
Return values
boolclientCacheHeader()
セキュリティヘッダーを追加
public
clientCacheHeader([bool $noCache = false ]) : void
Parameters
- $noCache : bool = false
convertAssetUrlsToAbsolute()
HTML内のアセット参照(画像・動画・スタイルシート等)を絶対URLに変換する。
public
convertAssetUrlsToAbsolute(string $html, string $baseUrl) : string
APIビルド/V2モジュールなどヘッドレス出力向けの正規化。クロスドメインで配信 される API レスポンスでは、フロント(Next.js 等)が別ドメインから取得する都合上、 画像・動画等は CMS ドメインの絶対URLになっている必要がある。
- 対象:
/
- 非対象(一切触らない): /
- 非対象(CSRF・実行コンテキストへの影響回避):
- スキーム付き URL(mailto:, tel:, javascript:, data:, blob: など)、 プロトコル相対(//host/...)、フラグメントのみ(#hash)、空文字は変換しない。
- base が origin(scheme + host)を含む場合のみ絶対URL化し、path のみの base のときはルート相対のまま保持する。
Parameters
- $html : string
- $baseUrl : string
Return values
stringconvertRelativeUrlToAbsolute()
単一の相対URLを絶対URL(フルURL)に変換する
public
convertRelativeUrlToAbsolute(string $url, string $baseUrl) : string
- 空文字、
http(s)://、プロトコル相対 (//)、data:始まりの URL はそのまま返す /始まりのルート相対パスは baseUrl のスキーム + ホスト (+ ポート) を前置する- それ以外の相対パスは baseUrl 全体を前置する
Parameters
- $url : string
- $baseUrl : string
Return values
stringcreateCsrfToken()
CSRFトークンを生成
public
createCsrfToken() : string
Return values
stringcsrfTokenExists()
CSRFトークンの存在チェック
public
csrfTokenExists() : bool
Return values
booldecrypt()
public
decrypt(string $cipherText, string $iv) : string
Parameters
- $cipherText : string
- $iv : string
Tags
Return values
stringdeleteField()
カスタムフィールドの削除
public
deleteField("bid"|"uid"|"cid"|"mid"|"eid"|"unit_id" $type, ($type is "unit_id" ? string : int) $id[, int|null $rvid = null ][, int|null $blogId = null ]) : void
Parameters
- $type : "bid"|"uid"|"cid"|"mid"|"eid"|"unit_id"
- $id : ($type is "unit_id" ? string : int)
- $rvid : int|null = null
- $blogId : int|null = null
deleteFieldCache()
カスタムフィールドキャッシュの削除
public
deleteFieldCache("bid"|"uid"|"cid"|"mid"|"eid"|"unit_id" $type, ($type is "unit_id" ? string : int) $id[, int|null $rvid = null ]) : mixed
Parameters
- $type : "bid"|"uid"|"cid"|"mid"|"eid"|"unit_id"
- $id : ($type is "unit_id" ? string : int)
- $rvid : int|null = null
download()
ファイルダウンロード
public
download(string $path, string $fileName[, string|false $extension = false ][, bool $remove = false ][, Filesystem $storage = null ]) : never
Parameters
- $path : string
- $fileName : string
- $extension : string|false = false
-
// 指定すると、Content-Disposition: inline になります。
- $remove : bool = false
- $storage : Filesystem = null
Return values
neverencrypt()
public
encrypt(string $string, string $iv) : string
Parameters
- $string : string
- $iv : string
Return values
stringexceptionArray()
例外情報を連想配列に変換
public
exceptionArray(Throwable $th[, array<string|int, mixed> $add = [] ]) : array<string|int, string|int>
Parameters
- $th : Throwable
- $add : array<string|int, mixed> = []
Return values
array<string|int, string|int>extract()
POSTデータからデータの抜き出し
public
extract([string $scp = 'field' ][, ACMS_Validator|null $V = null ][, Field|null $deleteField = null ]) : Field_Validation
image/file カスタムフィールドで旧ファイルを消す操作(削除チェック・差し替え)があった場合、 物理削除は即時には行わず Field のメタ情報 'removeOld' に記録する。 実際の物理削除はバリデーション通過後に呼ばれる saveField() 内で参照チェック (field / field_rev の両テーブルを検索)の上で行う。 よって旧ファイルを残すべきかどうか(新バージョン保存・作業領域のみの保存)は 呼び出し元が判定する必要はなく、参照チェックが自動的に判断する。
Parameters
- $scp : string = 'field'
- $V : ACMS_Validator|null = null
- $deleteField : Field|null = null
Return values
Field_ValidationfixAliasPath()
管理画面でテンプレート直で書かれているパスを、エイリアスを含んだURLに修正
public
fixAliasPath(string $txt) : string
Parameters
- $txt : string
Return values
stringflushCache()
public
flushCache() : mixed
genPass()
パスワードジェネレータ
public
genPass(int $len) : string
Parameters
- $len : int
-
パスワードの長さ
Return values
stringgetAppSalt()
アプリの固定ソルトを取得
public
getAppSalt() : string
Return values
stringgetCurrentSalt()
現在のソルトを取得
public
getCurrentSalt() : string
Return values
stringgetDeleteField()
extract()後の削除フィールドを取得
public
getDeleteField() : Field
Return values
FieldgetEncryptIv()
public
getEncryptIv() : string
Return values
stringgetHttpHeader()
ToDo: リファクタリング
public
getHttpHeader(string $name) : string
Parameters
- $name : string
Return values
stringgetInheritedThemes()
指定されたテーマの継承テーマ・システムテーマすべてのテーマの配列を取得
public
getInheritedThemes(string $theme) : array<string|int, string>
Parameters
- $theme : string
Return values
array<string|int, string>getJsModules()
public
getJsModules() : array<string|int, mixed>
Return values
array<string|int, mixed>getMailTxt()
メールテンプレートの解決
public
getMailTxt(string $path, Field $field[, string|null $charset = null ]) : string
Parameters
- $path : string
- $field : Field
- $charset : string|null = null
Return values
stringgetMailTxtFromTxt()
public
getMailTxtFromTxt(string $txt, Field $field) : string
Parameters
- $txt : string
- $field : Field
Return values
stringgetPreviousSalt()
1つ前のソルトを取得
public
getPreviousSalt() : string
Return values
stringgetTagsFromString()
タグの配列化
public
getTagsFromString(mixed $string[, bool $checkReserved = true ]) : array<string|int, string>
Parameters
- $string : mixed
- $checkReserved : bool = true
Return values
array<string|int, string>getUriObject()
URIオブジェクトの取得
public
getUriObject(Field $Post) : Field
Parameters
- $Post : Field
Return values
FieldisAuthorizedAjaxRequest()
許可されたajaxアクセスか判定(どのようなtpl指定であっても許可する)
public
isAuthorizedAjaxRequest([int $level = 1 ]) : bool
level-0: チェックをしない level-1: RefererとAjaxリクエスト判定 level-2: CSRFトークンチェック
Parameters
- $level : int = 1
Return values
boolisForceV1Build()
強制的にV1ビルドを行うか判定
public
isForceV1Build() : bool
Return values
boolisLocalPrivateStorage()
プライベートストレージの設定がローカルかどうか
public
isLocalPrivateStorage() : bool
Return values
boolisLocalPublicStorage()
パブリックストレージの設定がローカルかどうか
public
isLocalPublicStorage() : bool
Return values
boolisManagedDomain()
指定されたドメインが管理ドメインかどうかを判定
public
isManagedDomain(string $domain[, array<string|int, string> $additionalDomains = [] ]) : bool
Parameters
- $domain : string
-
チェックするドメイン
- $additionalDomains : array<string|int, string> = []
-
追加で許可するドメインのリスト
Return values
boolisSafeUrl()
a-blog cms で管理しているドメインのURLかチェックする
public
isSafeUrl(string $url) : bool
Parameters
- $url : string
Return values
boolisV2Module()
V2モジュールとして実行中か判定
public
isV2Module() : bool
Return values
boolloadBlogFulltext()
ブログのフルテキストを取得
public
loadBlogFulltext(int $bid) : string
Parameters
- $bid : int
Return values
stringloadCategoryFulltext()
カテゴリのフルテキストを取得
public
loadCategoryFulltext(int $cid) : string
Parameters
- $cid : int
Return values
stringloadEntryFulltext()
エントリーのフルテキストを取得
public
loadEntryFulltext(int $eid) : string
Parameters
- $eid : int
Return values
stringloadField()
ブログID, カテゴリーID, エントリーID,ユーザーIDの いずれか指定されたカスタムフィールドをFieldオブジェクトで返す
public
loadField([null|int $bid = null ][, null|int $uid = null ][, null|int $cid = null ][, null|int $mid = null ][, null|int $eid = null ][, null|string $unitId = null ][, null|int $rvid = null ][, bool $rewrite = false ]) : Field
Parameters
- $bid : null|int = null
- $uid : null|int = null
- $cid : null|int = null
- $mid : null|int = null
- $eid : null|int = null
- $unitId : null|string = null
- $rvid : null|int = null
- $rewrite : bool = false
Return values
FieldloadUserFulltext()
ユーザーのフルテキストを取得
public
loadUserFulltext(int $uid) : string
Parameters
- $uid : int
Return values
stringlogLockPost()
public
logLockPost(string $lockKey) : mixed
Parameters
- $lockKey : string
mailConfig()
メール設定の取得
public
mailConfig([array{smtp-host?: string, smtp-port?: string, smtp-user?: string, smtp-pass?: string, smtp-verify-peer?: string, mail_from?: string, sendmail_path?: string, additional_headers?: string, smtp-google?: string, smtp-google-user?: string} $argConfig = [] ]) : mixed
Parameters
- $argConfig : array{smtp-host?: string, smtp-port?: string, smtp-user?: string, smtp-pass?: string, smtp-verify-peer?: string, mail_from?: string, sendmail_path?: string, additional_headers?: string, smtp-google?: string, smtp-google-user?: string} = []
parseMarkdown()
マークダウン文字列を解析する
public
parseMarkdown(string $txt) : string
Parameters
- $txt : string
Return values
stringreplaceDeliveryUrl()
メディアの配信先URLを書き換え
public
replaceDeliveryUrl(string $url) : string
Parameters
- $url : string
Return values
stringreplaceDeliveryUrlAll()
メディアの配信先URLを書き換え(全て)
public
replaceDeliveryUrlAll(string $html) : string
Parameters
- $html : string
Return values
stringresolveUrl()
V2モジュール、V2APIビルド時に、URLを絶対URLに変換 それ以外はそのままのURLを返す
public
resolveUrl(string $path[, string $offset = '' ]) : string
Parameters
- $path : string
- $offset : string = ''
Return values
stringresponseJson()
public
responseJson(mixed $data) : mixed
Parameters
- $data : mixed
saveCache()
public
saveCache(string $chid, string $contents, string $mime) : mixed
Parameters
- $chid : string
- $contents : string
- $mime : string
saveField()
カスタムフィールドの保存
public
saveField("bid"|"uid"|"cid"|"mid"|"eid"|"unit_id" $type, ($type is "unit_id" ? string : int) $id[, Field|null $field = null ][, Field|null $deleteField = null ][, int|null $rvid = null ][, int $targetBid = BID ]) : bool
Parameters
- $type : "bid"|"uid"|"cid"|"mid"|"eid"|"unit_id"
- $id : ($type is "unit_id" ? string : int)
- $field : Field|null = null
- $deleteField : Field|null = null
- $rvid : int|null = null
- $targetBid : int = BID
Return values
boolsaveFulltext()
フルテキストの保存
public
saveFulltext(string $type, int $id[, string|null $fulltext = null ][, int $targetBid = BID ]) : void
Parameters
- $type : string
-
フルテキストのタイプ
- $id : int
- $fulltext : string|null = null
- $targetBid : int = BID
setAppSalt()
アプリ全体で使用するSaltを更新・設定
public
setAppSalt() : void
setCurrentSalt()
現在のソルトを設定
public
setCurrentSalt(string $salt) : void
Parameters
- $salt : string
setForceV1Build()
強制的にV1ビルドを行うか設定
public
setForceV1Build(bool $isForceV1Build) : void
Parameters
- $isForceV1Build : bool
setPreviousSalt()
1つ前のソルトを設定
public
setPreviousSalt(string $salt) : void
Parameters
- $salt : string
setSafeHeadersWithoutCache()
キャッシュ無効で安全なレスポンスヘッダーを組み立てます。
public
setSafeHeadersWithoutCache([int $code = 200 ][, string $mime = 'text/html' ]) : void
Parameters
- $code : int = 200
- $mime : string = 'text/html'
setV2Module()
V2モジュールとして実行中か設定
public
setV2Module(bool $isV2Module) : void
Parameters
- $isV2Module : bool
toAbsoluteUrl()
URL を完全な absolute URL(scheme + host + path)に変換する。
public
toAbsoluteUrl(string $path[, string $offset = '' ][, string|null $baseUrl = null ]) : string
グローバル状態に依存しない pure 関数($baseUrl を省略した場合のみ BASE_URL を読む)。
- 既に scheme 付き / protocol-relative の場合はそのまま返す。
- ルート相対
/fooは base の origin(scheme + host + port)と結合する。 base のサブパス(/site/)は無視される。 - ドキュメント相対
fooは base 全体(origin + path)と結合する。
Parameters
- $path : string
-
入力パス
- $offset : string = ''
-
URL の前置オフセット(DIR_OFFSET 相当)
- $baseUrl : string|null = null
-
解決の基準とする base URL。null の場合は BASE_URL を使用
Return values
stringtoRootRelativeUrl()
URL を root-relative URL(`/path` 形式、scheme/host を含まない)に変換する。
public
toRootRelativeUrl(string $path[, string $offset = '' ][, string|null $baseUrl = null ]) : string
V1 / V2 の HTML テンプレート出力で「ブラウザが現在のホストで解決する」前提の URL を生成するときに使う。グローバル状態に依存しない pure 関数($baseUrl を 省略した場合のみ BASE_URL を読む)。
- 既に scheme 付き / protocol-relative の場合はそのまま返す。
- ルート相対
/fooはそのまま返す(既に root-relative なので変換不要)。 - ドキュメント相対
fooは base の path+query 部分のみと結合する。
Parameters
- $path : string
-
入力パス
- $offset : string = ''
-
URL の前置オフセット(DIR_OFFSET 相当)
- $baseUrl : string|null = null
-
解決の基準とする base URL。null の場合は BASE_URL を使用
Return values
stringuploadAssetDirectory()
ローカルのディレクトリをS3などのリモートストレージにアップロード
public
uploadAssetDirectory(string $from, string $to, bool $isPublic) : void
Parameters
- $from : string
- $to : string
- $isPublic : bool
validateFileUpload()
ファイルアップロードを検証
public
validateFileUpload(string $name) : void
Parameters
- $name : string
Tags
validateLockPost()
public
validateLockPost(string $lockKey[, int $trialTime = 5 ][, int $trialNumber = 5 ][, int $lockTime = 15 ][, bool $remoteAddr = true ]) : bool
Parameters
- $lockKey : string
- $trialTime : int = 5
-
試行時間
- $trialNumber : int = 5
-
試行回数
- $lockTime : int = 15
-
ロックタイム
- $remoteAddr : bool = true
-
接続元IPアドレスをチェックするかどうか
Return values
boolgetManagedDomains()
管理ドメインのリストを取得(キャッシュあり)
protected
getManagedDomains([array<string|int, string> $additionalDomains = [] ]) : array<string|int, string>
Parameters
- $additionalDomains : array<string|int, string> = []
-
追加で許可するドメインのリスト
Return values
array<string|int, string>isUrlFromManagedDomain()
指定URLが管理ドメインからのものかどうかを判定
protected
isUrlFromManagedDomain(string $url) : bool
Parameters
- $url : string
Return values
boolcollectMarkedFieldFiles()
Field のメタ情報 'removeOld' に積まれた削除予約を収集する。
private
collectMarkedFieldFiles(Field|null $field) : array<int, array{path: string, type: "image"|"file"}>
extract() 内で markFieldFileForRemoval() によって積まれた削除候補を removeUnreferencedFieldFiles() と同じ形式のリストに変換して返す。
Parameters
- $field : Field|null
Return values
array<int, array{path: string, type: "image"|"file"}>collectOrphanedFieldPaths()
グループフィールド行削除で孤児化する @path のリストを収集する。
private
collectOrphanedFieldPaths(string $tableName, string $type, int|string $id, Field|null $field[, int|null $rvid = null ]) : array<int, array{path: string, type: "image"|"file"}>
saveField() の DB DELETE 前に呼び出す。DB に残っている @path 値のうち、 今回保存しようとしている Field に含まれていないものを「削除された行」とみなし、 パスと image/file の種別をペアで返す。
実際の物理削除は DELETE → INSERT 完了後に removeUnreferencedFieldFiles() で行う。
Parameters
- $tableName : string
-
'field' | 'field_rev'
- $type : string
-
'bid'|'uid'|'cid'|'mid'|'eid'|'unit_id'
- $id : int|string
- $field : Field|null
-
保存しようとしている新 Field
- $rvid : int|null = null
-
リビジョンID(field_rev テーブルの場合のみ使用)
Return values
array<int, array{path: string, type: "image"|"file"}> —削除候補パスのリスト
deletePhysicalFieldFile()
カスタムフィールド image/file 型のファイルを物理削除する。
private
deletePhysicalFieldFile(string $relPath, "image"|"file" $type) : void
Parameters
- $relPath : string
-
archives ディレクトリからの相対パス
- $type : "image"|"file"
extractOrigin()
URI から origin(scheme + host + port)を抽出する。
private
extractOrigin(Uri|null $uri) : string
Parameters
- $uri : Uri|null
Return values
stringgetEncryptKey()
暗号化キーを取得
private
getEncryptKey() : string
Return values
stringisAbsoluteUri()
URL が "absolute URI" として自己解決可能かを判定する。
private
isAbsoluteUri(string $url) : bool
以下のいずれかなら true:
- scheme 付き URI(
http(s):,mailto:,tel:,data:,blob:,javascript:,ftp:など) - protocol-relative(
//host/...)
/foo foo ../foo #anchor ?q=1 '' のような base に対して
解決が必要な参照 は false。「ルート相対 /foo も解決済み扱いにしたい」
のような V1 互換の判定が必要な場合は、呼び出し側で
str_starts_with($path, '/') を別途チェックする。
Parameters
- $url : string
Return values
boolisReferencedByField()
指定パスが field / field_rev テーブルのいずれかのレコードで使われているか判定する。
private
isReferencedByField(string $path) : bool
Parameters
- $path : string
-
検査するファイルパス(相対パス)
Return values
bool —いずれかのレコードが参照していれば true
markFieldFileForRemoval()
削除チェック・差し替え時に旧ファイルを saveField() 後に物理削除するよう Field にマーキングする。
private
markFieldFileForRemoval(Field $field, string $fieldKey, string $relPath, "image"|"file" $type) : void
extract() 内では即時削除せず、saveField() の DB 書き込み完了後に removeMarkedFieldFiles() で参照チェックを通してから削除する。
Parameters
- $field : Field
-
extract 中の Field
- $fieldKey : string
-
image/file フィールドの key(例: 'photo')
- $relPath : string
-
archives ディレクトリからの相対パス
- $type : "image"|"file"
removeUnreferencedFieldFiles()
削除候補パスのうち、field / field_rev テーブルのどこからも参照されていないものを物理削除する。
private
removeUnreferencedFieldFiles(array<int, array{path: string, type: "image"|"file"}> $candidates) : void
saveField() の DELETE → INSERT 完了後に呼び出す。 DB 更新後なので自分自身の除外条件は不要。
Parameters
- $candidates : array<int, array{path: string, type: "image"|"file"}>
-
collectOrphanedFieldPaths() と collectMarkedFieldFiles() をマージした候補リスト
resolveAgainstBase()
private
resolveAgainstBase(string $url, string $baseUrl) : string
Parameters
- $url : string
- $baseUrl : string
Return values
stringresolveSrcset()
`srcset` 属性値内の各 URL を base URL に対して解決する。
private
resolveSrcset(string $srcset, string $baseUrl) : string
HTML Living Standard §4.8.4.3.2 "parse a srcset attribute" のアルゴリズムに準拠する。 URL は「ASCII whitespace でない連続」として読み取り、カンマでは分割しないため、 データURL内のカンマも誤分割されずに URL の一部として扱われる。
Parameters
- $srcset : string
-
srcset 属性値(例: "/a.jpg 1x, /b.jpg 2x")
- $baseUrl : string
-
解決の基準となる URL
Return values
string —各 URL を解決した srcset 文字列