#set_tags(mahara,mahara patch)

* デフォルトダッシュボードの変更 [#nf3379f0]
(Mahara バージョン: 1.5.2)

デフォルトのダッシュボードは、ハードコーディングされている。定義は lib/user.php の install_system_dashboard_view(). ここからid=0のユーザーの dashboard ページが作成され、新規ユーザ追加の際には auth/user.php の install_dashboard_view() でページがコピーされる。

新規ユーザのデフォルトダッシュボードを変更したい場合は、

- id=0のユーザーのダッシュボードページを変える
- 別のユーザーのダッシュボードページをコピーするようにする

の二通りのやり方がある。前者はGUIが使えないので後者でやってみる。

auth/user.php の 586 行目で $systemdashboardviewid を取得してる部分があるので、そこを変える。以下は元々の id=0 を id=1 に変えた。id=1 は admin ユーザ。たぶん、"'owner',1"の部分を"'username','admin'" としてもうまくいくのではないだろうか。

さらに 595 行目、create_from_template の呼び出しのパラメータリストの最後に false を追加。これはアクセス権のチェックを行わずにコピーするという意味である。

    581     protected function install_dashboard_view() {
    582         static $systemdashboardviewid = null;
    583 
    584         db_begin();
    585         if (is_null($systemdashboardviewid)) {
    586           $systemdashboardviewid = get_field('view', 'id', 'owner', 1, 'type', 'dashboard'); // ← 'owner' の次のパラメータを 0 から 1 に変えた。
    587         }
    588 
    589         require_once(get_config('libroot') . 'view.php');
    590         list($view) = View::create_from_template(array(
    591             'owner' => $this->get('id'),
    592             'title' => get_field('view', 'title', 'id', $systemdashboardviewid),
    593             'description' => get_string('dashboarddescription'),
    594             'type'  => 'dashboard',
    595           ), $systemdashboardviewid, $this->get('id'),false); // ← 最後に false を追加
    596 
    597         db_commit();
    598 
    599         return $view;
    600     }

これだけではうまくいかない。ページコピーの際に create_from_template を読んでいるため、該当のページがテンプレートになっていなくてはならない。これはデータベースをいじる。

 db=> update view set template=1 where owner=1 and type='dashboard';
 UPDATE 1

これでユーザを追加すると、サーバーエラーが発生した。調べると全然違う場所で起こっている。blocktype/lib.php の 1210 行目の artefact_get_descendants() で undefined function と言われている。これは別のファイルで定義されているがそれがインクルードされていない??とりあえず以下の1210行目のように、artefact/lib.php を読み込む事でエラーがでなくなった。

   1204         if (!empty($artefactids)
   1205             && $copytype == 'full') {
   1206             // Copy artefacts & put the new artefact ids into the new block.
   1207             // Artefacts may have children (defined using the parent column of the artefact table) and attachments (currently
   1208             // only for blogposts).  If we copy an artefact we must copy all its descendents & attachments too.
   1209 
   1210             require_once(get_config('docroot') . 'artefact/lib.php'); // ←この行追加
   1211             $descendants = artefact_get_descendants($artefactids);
   1212 
   1213             // We need the artefact instance before we can get its attachments
   1214             $tocopy = array();
   1215             $attachmentlists = array();

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS