「承認不要のコメント投稿」権限をコンテンツタイプごとに細分化する

コメントの投稿には、投稿を許可する権限と、投稿されたコメントを管理者の承認無しで公開する権限の2つがあり、それぞれユーザグループごとに与えることができます。
これらの権限のうち後者は、「承認不要のコメント投稿」として「アクセスコントロール」のページで指定することができますが、これを指定した場合、すべてのコメント投稿に対して同権限を与えることになります。
しかし、サイトによっては、フォーラムでのコメントは承認不要にしたいが、ブログやブックでは承認後に公開したいという場合があります。

そのような場合、以下のようにコードを改造することで、コンテンツタイプごとに細分化された権限を指定できるようになります。

対象は modules/comment.module です。
以下は、2006年9月9日現在の最新バージョン(4.7.3)をもとにしています。

// $Id: comment.module,v 1.455.2.7 2006/07/18 10:46:24 unconed Exp $
152 行目

function comment_perm() {
//  return array('access comments', 'post comments', 'administer comments', 'post comments without approval');
  // ここから
  $arr = array('access comments', 'post comments', 'administer comments');
  $ntype = node_get_types();
  foreach ($ntype as $type => $val) {
    $arr[] = 'post comments without approval ' . "($type)";
  }
  return $arr;
  // ここまでを追加
}

569 行目

        // Add the comment to database.
//        $status = user_access('post comments without approval') ? COMMENT_PUBLISHED : COMMENT_NOT_PUBLISHED;
        // ここから
        $t_node = node_load($edit['nid']);
        $status = user_access('post comments without approval (' . $t_node->type . ')') ? COMMENT_PUBLISHED : COMMENT_NOT_PUBLISHED;
        // ここまでを追加
        $roles = variable_get('comment_roles', array());

上記のように変更すると、アクセスコントロールのページに

post comments without approval (blog)
post comments without approval (forum)

などのように、利用できるコンテンツタイプの数だけ「承認不要のコメント投稿」権限が増えますので、ユーザグループごとに任意で指定してください。

なお、表記が英語になってしまいますが、すべて「承認不要のコメント投稿 (xxxx)」という意味です。
必要であれば admin/locale/string/searchpost comments without approval を検索し、それぞれを「承認不要のコメント投稿 (xxxx)」と編集すれば日本語表記になります。