ownCloudのカレンダーアプリでタイムゾーンが認識されない

1. 事象

ownCloudのカレンダーでタイムゾーンがうまく認識されず表示がおかしくなる。
「タイムゾーン[Etc/GMT-9]が不明なため、代わりにUTCを使用します。」

正しく表示された場合は以下のようになる。

2. 環境

ownCloud : 10.8.0
– calender : 1.6.4

クライアント(再現を確認したもの)

Google Chrone : 92.0.4515.131(Windows)
Firefox : 91.0(Windows)

※LinuxのGoogle Chromeでは発生しない

3. 解決策

すでに参考に挙げたリンク先で議論されており、パッチも存在していた。ブラウザ側のバグだとも考えられるが、一向に修正される気配がないのでパッチを適用することにした。

【参考】

https://github.com/clear-code/statistics/issues/189

https://github.com/nextcloud/calendar/issues/496#issuecomment-326791894

3-1. 修正方針

パッチを適用してビルドしたファイルのうち問題箇所の「TimezoneService」が定義されている以下の3ファイルを置き換える。

OC/apps/calendar/js/public
・app.js
・app.min.js
・app.min.js.map

3-2. 修正手順

3-2-1. カレンダーアプリのコードを取得

git clone https://github.com/owncloud/calendar.git

3-2-2. パッチを適用する

クローンしたカレンダーのディレクトリに移動して以下の差分を参考に修正する。

$ git diff
diff --git a/js/app/service/timezoneService.js b/js/app/service/timezoneService.js
index 3c90ed0e..d5d7f371 100644
--- a/js/app/service/timezoneService.js
+++ b/js/app/service/timezoneService.js
@@ -43,7 +43,10 @@ app.service('TimezoneService', function (TimezoneDataProvider, Timezone) {
         * @returns {string}
         */
        this.current = function () {
+               const dateTimeFormat = Intl.DateTimeFormat;
+               Intl.DateTimeFormat = function() {return {resolvedOptions: function() {return {};}};};
                const tz = jstz.determine();
+               Intl.DateTimeFormat = dateTimeFormat;
                let tzname = tz ? tz.name() : 'UTC';
 
                if (TimezoneDataProvider.aliases[tzname]) {

以下を参考にしています。

https://github.com/Hakuyume/nextcloud-calendar/commit/ea1c314e6c4e925d440a64d2ca0d52d9a18812e2

3-2-3. ビルド

makeではうまくいかなく、原因探すのがめんどくさかったので手動でコマンドを実行した。

$ npm install yarn
$ npm run build

3-2-4. 配置

ビルドが成功すると以下のファイルが出来ているのでこれを取得しサーバのファイルを置換する。

./js/public
・app.js
・app.min.js
・app.min.js.map

4. 修正結果確認

正しく表示されるようになった。

以上

owncloud (Ver. 8.1.1) texteditor Shift-JIS の文字化け対処

以前にもtexteditorのShift-JISの文字化けの対処法を書いているが,バージョンの変更に伴い構成も変わっていたのでVer. 8.1.1での文字化けの対処法を記録しておく。

変更内容は以前の対処法と変わりないが,書き換えるファイルが
OC/apps/files_texteditor/controller/filehandlingcontroller.php
となった。このファイルに次のように”SJIS-win”を追加する

$encoding = mb_detect_encoding($filecontents . "a", "UTF-8, WINDOWS-1252, ISO-8859-15, ISO-8859-1, ASCII", true);
  ↓
$encoding = mb_detect_encoding($filecontents . "a", "SJIS-win, UTF-8, WINDOWS-1252, ISO-8859-15, ISO-8859-1, ASCII", true);

Owncloud update Ver8.0.x → Ver8.1.x

運用しているOwncloudのアップデートを行った。

普段のアップデート同様に管理画面のアップデートの項目でクリックしていくだけでアップデートは完了する。
しかし,今まで使用していたアプリを有効にするとページが応答しなくなるという問題が発生した。しかたないので対象のアプリをサーバ側で削除した。Owncloud のアプリのページを見ているとアプリのダウンロードがVer8.0.xとVer8.1.xで分かれておりアプリについても更新しないといけないみたいで,更新した結果正常に動作するよになった。

今回のバージョンアップでは,サイトの応答速度がかなり早くなったように感じる。またアプリの一覧が表示されるまでの時間が大幅に早くなった。

owncloud text editor文字化け対処

* (注) owncloud version 8.1.x 以降では構成が変わっており,この方法では対処できません 変更方法は→owncloud (Ver. 8.1.1) texteditor Shift-JIS の文字化け対処

検索したら既にやっている方がいて

http://blog.shironoo.org/blog/2014/11/21/owncloud-texteditor-sjis/
リンク切れ

のページのように
owncloud/apps/files_texteditor/ajax/loadfile.php
のファイルの
$encoding = mb_detect_encoding($filecontents."a", "UTF-8, WINDOWS-1252, ISO-8859-15, ISO-8859-1, ASCII", true);
の部分に”SJIS-win”を追加して
$encoding = mb_detect_encoding($filecontents."a", "SJIS-win, UTF-8, WINDOWS-1252, ISO-8859-15, ISO-8859-1, ASCII", true);
と書き換えればOK!

owncloud 8.0.2 の文字化け対処法

owncloud に置いてあるファイルを一括ダウンロードした際の圧縮ファイル(zip)をWindows7以前のマシンで解凍すると日本語が文字化けする。この問題について対処ができたので記録しておく。

言ってしまえば、Windows7以前の人が7zipなどのutf8に対応している解凍ソフトを使うのが一番楽だし早いんだけどね・・・

この問題を調べているときに圧縮ファイルを日本語対応するowncloudのアプリを見つけた。
http://owncloud.jp/forum/index.php/Thread/29-zip-7/
このページの一番下にあります。これを導入しました。

導入方法は簡単で、リンクをたどって”zipstream_ja-master.zip”をダウンロードして展開し、できたディレクトリ名を”zipstream_ja”にリネームしたものをowncloudディレクトリ以下にあるappsというディレクトリ内に放り込み、あとはWeb上で”Zipstream Ja”というアプリを有効にすれば導入完了です。

ダウンロードしてテストをしている際に、基本的には文字化けしていない形で展開することができましたが、’表’という文字が入っていると、文字化けしたフォルダとしていないフォルダの2つが圧縮ファイル中に作られていました。ちなみにファイル名は文字化けしない。

とりあえず使用できるので、時間があるときにソースをチェックして訂正しようと思う。

———- 追記 ———-

PHPについてはよく知らないがソースをチェックしていてzipstream_ja/lib/ 以下のfiles.phpの中の212~216行目

$rootDir = $internalDir.$dirname;
if (!empty($rootDir)) {
$isJaWin ? $zip->addEmptyDir(self::convertFilename($rootDir)) : $zip->addEmptyDir($rootDir);
}

をコメントアウトすると文字化けしたフォルダが生成されないことが分かった。この部分が正常に機能していなく文字化けが起こっていると考えられるのでphpについて調べて訂正しようと思う。