拡張フォームの元のソースからのバグが取れました

2012年7月30日 at 17:18

関西勉強会でこの3月か4月に、nanpuuさんから指摘のあったバグが取れました。

そのバグとは、
   「フォームの編集時に、複数のフィールドを削除しても1つしか削除されない」
というものです。
元の「フォーム」でも同じバグがありますが、拡張フォームではなおりました。

以下からユーザ登録してダウンロードしてください。

http://concrete5.tomo.ac

タグ:

Re: 拡張フォームの元のソースからのバグが取れました

2012年7月30日 at 18:07
本家にプルリクエストしたいのでどこ直されたか教えていただけませんか?
 

Re: 拡張フォームの元のソースからのバグが取れました

2012年7月31日 at 15:49
/concrete/blocks/controller.php: 167-168行です。

$vals=array( $this->bID, intval($data['qsID']), join(',',$pendingDeleteQIDs) ;
$unchangedQuestions=$db->query('DELETE FROM btFormQuestions WHERE bID=? AND questionSetId=? AND msqID IN (?)',$vals);

問題点は、167行目の "join(',',$pendingDeleteQIDs)" で作られる文字列の中に、","が含まれるため、168行目のSQL文の
"msqID IN (?)"に、最初のIDしか与えられないのでひとつしか削除されないというのが原因です。
修正方法はいくつかあると思いますが、以下が修正例です。

$vals=array( $this->bID, intval($data['qsID']);
$unchangedQuestions=$db->query('DELETE FROM btFormQuestions WHERE bID=? AND questionSetId=? AND msqID IN ('.join(',',$pendingDeleteQIDs).')',$vals);
 

Re: 拡張フォームの元のソースからのバグが取れました

2012年7月31日 at 16:03
ちょっと忘れたのですが、もうひとつバグがあって修正しています。

それもリクエストいただければと思うのですが、それは昨年のことで、どこだったか、思い出したら連絡します。