2011年2月24日

FLATDATAで業務報告

学芸大コミュニティで情報アシスタントの業務報告をさせちゃおうと,FLATDATA を活用してみた.
やっぱ,メモしておかないとすぐ忘れてしまうらしい.
2か月前の手順をまったく忘れて,1時間以上イライラしてしまった.

まずは,登録されたときにメールでも登録データを送信しなければならない.

ということで,FLATDATA - 応用例)お問い合わせ(イベント通知)を使って,登録時にメールが送られるようにした.メール送信先は,情報アシスタント管理者のML,登録者,ペアの担当者,担当する教員.管理者のML以外は固定データではないのが問題.送信先メールアドレスは,参考サイトにある {XOOPS_ROOT_PATH}/preload/FlatdataContactus.class.php の下の方の mail->setToEmails($xoopsConfig['adminmail']); を変更すればよい.複数の宛先に送りたいときには,このメソッドを複数化呼べばよいらしい.

登録者のメールアドレスは,ユーザ情報にあるので,

    $handler = xoops_gethandler('member');
    $user = $handler->getUser( $data["uid"] ) ;
    $email = $user->get('email');

で取り出せる.

一方,教員とペアの担当者のメールアドレスは,とりあえずデータとして入力してもらい,

    for( $i=0; $i < count($allfields); $i++) {
      $fid = $allfields[$i]['fid'] ;
      $fdata = empty($data['data'][$fid]) ? '' : $data['data'][$fid] ;
      if( $fid == 教員メールアドレスのフィールド番号 ){
        $tomail1 = $fdata ;
      }
      else if( $fid == 20 )
      {
        $tomail2 = $fdata ;
      }
    }

として取得.ふぅ....

さて,次は,授業内容などのデータは,特定の人(登録者と管理的立場の人)だけにしか見れないようにしてほしいとのこと.FLATDATA では単純に入力されたデータを見られなくしようとすると,登録もできなくなってしまう.そこで,表示するコードに手を付けて,そのようなデータ項目は一部の人だけにしか表示できないようにした.

FLATDATA で表示内容のコントロールは,管理メニューの中にあるテンプレート管理で行う.これを忘れていて四苦八苦した.*_edit.html が編集画面,*_submi が確認画面,そして,*_single がデータ表示画面のデザインを定義している.編集画面と確認画面はシステム管理者と登録者しか呼び出せないので,データ表示画面だけコントロールすればよい.これには, 一覧表示から特定グループに所属するユーザーのデータを除外するには を参考にした.

  <{elseif ($f.fid==13 || $f.fid==14) }>
    <{if $isadmin || checkUidInGroup($uid,6)}>
        表示したい項目
    <{/if}>
  <{/if}>

とするだけである.

    for( $i=0; $i < count($allfields); $i++) 
    {     
      $fid = $allfields[$i]['fid'] ;
      $fname = $allfields[$i]['fname'] ;
      $fdata = empty($data['data'][$fid]) ? '' : $data['data'][$fid] ;
      $body .= $fname ." : ". $fdata ."\n" ;
      if( $fid == 19 )
      {
        $tomail1 = $fdata ;
      }
      else if( $fid == 20 )
      {
        $tomail2 = $fdata ;
      }
    }
    $ip = getenv("REMOTE_ADDR") ? getenv("REMOTE_ADDR") : "" ;
    $body .= "REMOTE_ADDR : " . $ip ;
    $email = '';
    $handler = xoops_gethandler('member');
    $user = $handler->getUser( $data["uid"] ) ;
//    if (!is_object($user))
      $email = $user->get('email');
    $mail =getMailer();
    $mail->useMail();
    $mail->setToEmails($tomail1);
    $mail->setToEmails($tomail2);
    $mail->setToEmails($email);