aipo 4.0.0.0 から 4.0.1.0 手動(強引)アップグレードメモ
はじめになぜ Aipo か
色々とグループウェアの件で悩んだあげくオープンソースの Aipo を使うことに決めました。
携帯電話からも見られるし色々と機能が揃っていていいのですが、やはりあれこれと機能を追加したりカスタマイズしたいですね。
まず必要とされていたのが、スケジュールに参加していない人でもスケジュールの編集・削除できる機能でした。バージョン 4.0.1.0 のリリースにその機能が追加されたと書いてありましたので早速バージョンアップしました。
バージョンアップ前の確認
バージョンアップ前に一度ローカルでインストールして管理画面で他人のスケジュールの編集権限を与えてユーザーとして再ログインし、確認したらちゃんと他人のスケジュールをいじれるようになっていました。
トラブル開始:普通にバージョンアップできない
安心して本番サーバーのバックアップをとってアップグレードしようとしたら、まずは「アンインストールしなければインストールできない」と怒られましたので、アンインストールして 4.0.1.0 をインストールしました。インストールは普通にいきましたが、バックアップを修復しようとしたら「バージョンが古い」と怒られました。
まさかと思いましたが、Aipo の無料インストーラーからアップグレードはできないみたいです。サポートライセンスを購入すればアップグレード版やセキュリティーパッチを入手することが可能だそうです。なるほど。
とりあえずうまくいきました
せっかくオープンソースを採用してコスト削減を図っている最中ですので、ライセンスを購入せずに強引にアップグレードすることにしました。完璧ではないと思いますが、一応 4.0.0.0 のデータを取り込んでスケジュール編集権限もうまくいきました。
まずはデータの取り込み
4.0.0.0 をアンインストールする前に作成したバックアップフォルダーの中(aipo/backup/バックアップを取った日)に version.txt というファイルがありました。その中に以下の2行がありました。
[System]
version=4.0.0.0
これを version=4.0.1.0 に変更してもう一度バックアップの修復をしたらデータはうまく取り込まれました。しかし管理画面を確認すると他人のスケジュールを編集・削除する権限を与えるチェックボックスがありません。実際にユーザーとして再ログインして確認すると、やはり他人のスケジュールは編集できません。
権限設定可に
ローカルではちゃんと他人のスケジュールも編集できていたので、データを見ることにしました。バックアップフォルダーに作成されていた aipo_db_sql.dump を確認すると以下の一行がありました。
112 schedule_other スケジュール(他ユーザーの予定)操作 3
ダウンロードした 4.0.1.0 のソースコード( http://sourceforge.jp/projects/aipo/files/ )の aipo_src/sql/postgres.sql で同じような行を探してみて、以下の行がありました。
INSERT INTO EIP_T_ACL_PORTLET_FEATURE VALUES(112,'schedule_other','スケジュール(他ユーザーの予定)操作',31);
よく見るとバックアップの dump ファイルの自分の予定の操作は次の通りになっています。
111 schedule_self スケジュール(自分の予定)操作 31
最後の数字を比較すると、同じ dump ファイルでも自分のスケジュールは 31、他人のスケジュールが 3 。これかもと思って EIP_T_ACL_PORTLET_FEATURE の CREATE TABLE 文を見たらその数字は ACL_TYPE に該当しています。ACLは何の略か分かりませんが、他にそれらしい物がなかったのでとりあえず UPDATE で ACL_TYPE を 3 から 31 に更新しました。
更新後、管理画面から確認すると「追加」「編集」「削除」のチェックボックスが表示されていました。ということはEIP_T_ACL_PORTLET_FEATURE テーブルの ACL_TYPE が権限なのですね。さすがに DB の定義書は公開していただけないみたいですので、Aipo を利用する限り自力で DB を理解しなければなりません・・・
画面のレイアウト編集権限
ちなみに画面のレイアウトの変更もできなくなっていましたので、同じくソースコードの postgres.sql と aipo_db_sql.dump を比較したら、postgres.sql にレイアウト変更権限が追加されていたと分かりました。
INSERT INTO EIP_T_ACL_PORTLET_FEATURE VALUES(201,'portlet_customize','ポートレット操作',29);
なるほど。そのまま INSERT したら画面のレイアウト編集機能が復活しました。これが全てだと思いませんので、時間があれば postgres.sql と aipo_db_sql.dump を全部比較したいと思います。