aipo 4.0.0.0 から 4.0.1.0 手動(強引)アップグレードメモ

はじめになぜ Aipo か

色々とグループウェアの件で悩んだあげくオープンソースの Aipo を使うことに決めました。

http://aipostyle.com/

携帯電話からも見られるし色々と機能が揃っていていいのですが、やはりあれこれと機能を追加したりカスタマイズしたいですね。

まず必要とされていたのが、スケジュールに参加していない人でもスケジュールの編集・削除できる機能でした。バージョン 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 を全部比較したいと思います。