とりあえず,既に壊れたグループ権限情報を一括で修正するスクリプトを書いてみました.
function fixXoopsGroupPermissions() {
global $xoopsDB;
// get invalid group ids
$table = $xoopsDB->prefix( 'group_permission' );
$table2 = $xoopsDB->prefix( 'groups' );
$sql = sprintf( 'SELECT DISTINCT `gperm_groupid` FROM `%s` LEFT JOIN `%s` ON `%s`.`gperm_groupid`=`%s`.`groupid` WHERE `gperm_modid`=1 AND `groupid` IS NULL', $table, $table2, $table, $table2 );
$result = $xoopsDB->query( $sql );
if ( ! $result ) {
return false;
}
$gids = array();
while ( $myrow = $xoopsDB->fetchArray( $result ) ) {
$gids[] = $myrow['gperm_groupid'];
}
$xoopsDB->freeRecordSet( $result );
// remove all invalid group id entries
if ( count( $gids ) != 0 ) {
$sql = sprintf( 'DELETE FROM `%s` WHERE `gperm_groupid` IN (%s) AND `gperm_modid`=1', $table, implode( ',', $gids ) );
$result = $xoopsDB->query( $sql );
if ( ! $result ) {
return false;
}
}
return true;
}
minahito さん、対応ありがとうございました。
また、mumincacao さん、sf.net へのトラッカー投稿ありがとうございました。
http://sourceforge.net/tracker/index.php?func=detail&aid=2173864&grou...このスクリプトを自分たちの開発中 module のインストール部に組み込んでしまってたので最悪自分たちのは正常にインストールされるハズとか思ってました。
XCL 根幹側で対応して頂ければ助かります。
# 2.0 互換のために module の方はとりあえず残しておこう...っと