【修正コードできました】Re: グローバル下書きブロックを編集時にアクセス拒否

2011年7月28日 at 22:14

一応原因が判明し、対応できました。

原因としては、ブロックの保存後に、
エリア内の編集したブロックをレンダリングしなおす処理が走ってるのですが、
そこに対して以下の誤った情報を送信しているようです。

・編集したのが「グローバルブロックじゃない」($b->bIsGlobal=null)で返ってる
・編集したAreaがそのエリアではなくて、下書きページのエリアIDを返してる

という事っぽかったので、
以下のような修正で対応できました。

ただ、他に影響を与えないかどうかが分かりませんでしたので、
検証のうえ採用してください。

/concrete/tools/edit_block_popup.php
94行目付近の「$bv->renderElement('block_controls', array(」の前あたりに、以下のコードを追加

if($isGlobal && $c->getCollectionID() != $rcID){
$b->bIsGlobal = 1;
$currentAreaHandle = $db->GetOne('SELECT arHandle FROM `CollectionVersionBlocks` WHERE cID = ? AND bID = ? ORDER BY cvID DESC', array($rcID, $b->getBlockID()));
$currentPage = Page::getByID($rcID);
$a = Area::get($currentPage, $currentAreaHandle);
}


ちょっと無理やりな対応になってますので、
もう少しスマートな修正があればご教授ください。