デフォルトダッシュボードの変更

(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
Last-modified: 2012-09-26 (水) 00:56:30 (1854d)