Zabbixの日時入力カレンダーを日曜始まりにする

# Zabbixの日時入力カレンダーを日曜始まりにする

## 目的
Zabbixで日時入力する際のカレンダーポップアップが
月曜始まりになっていて使いにくさヘイトが爆発してしまったため
日曜始まりにしてやる。

## 理由
急なメンテナンス設定依頼をもらったが、入力にミスしてしまう。
（ミスしてしまって設定ができずにメンテナンス日時を変更してしまった。）

## 対象

確認したバージョンは
Zabbix 3.2 及び 3.4

## 実装
Zabbixフロントエンドを改造します。
フロントエンドを配置しているパスのjsディレクトリのファイルを触ります。

パッケージでインストールしている場合は
/usr/share/zabbix/js/
に入っているかもしれません。

[手動インストール](https://qiita.com/130cmWolf/items/a21cf839c5399c78ff60)だと
/var/www/html/zabbix/js/
かもしれません。

### カレンダーテーブル開始日付計算の変更

0-6 = 日曜～土曜
となっているgetDay()を何やら書き換えているため、やめさせます。
せっかくjavascriptでは日曜始まりになっているのに月曜始まりにしている仕様を
書き換えて使っているコードに対し勝手に憤りを感じています。

ユーザー毎にこの部分が設定できたらいいのですが、
今回はハードコーディングをいじります。

class.calendar.jsファイル内のcreateDaysTabを修正します。
diffはVer3.2ベース

```diff
462c462
<               var prev_days = this.cdt.getDay() - 1;
---
>               var prev_days = this.cdt.getDay();
```

```js:class.calendar.js
        createDaysTab: function() {
                var tbody = this.clndr_days;
                tbody.update('');

                var cur_month = this.cdt.getMonth();

                // make 0 - Monday, not Sunday (as default)
                var prev_days = this.cdt.getDay() - 1;
                if (prev_days < 0) {
                        prev_days = 6;
                }
                if (prev_days > 0) {
                        this.cdt.setTime(this.cdt.getTime() - prev_days * 86400000);
                }
```
↓↓↓↓↓

```js:class.calendar.js
        createDaysTab: function() {
                var tbody = this.clndr_days;
                tbody.update('');

                var cur_month = this.cdt.getMonth();

                // make 0 - Monday, not Sunday (as default)
                var prev_days = this.cdt.getDay();
                if (prev_days < 0) {
                        prev_days = 6;
                }
                if (prev_days > 0) {
                        this.cdt.setTime(this.cdt.getTime() - prev_days * 86400000);
                }
```




以下の部分はデッドコードになるので消しても消さなくてもよいかと思います。

```
if (prev_days < 0) {
        prev_days = 6;
}
```

### カレンダーテーブルヘッダー並び変更
表示用テーブルを生成している部分の
曜日ヘッダーの順番を変更します。

class.calendar.jsファイル内のcalendarcreateを修正します。

```diff
577a578,581
>               td.appendChild(document.createTextNode(locale['S_SUNDAY_SHORT_BIG']));
> 
>               var td = document.createElement('th');
>               tr.appendChild(td);
599,602d602
< 
<               var td = document.createElement('th');
<               tr.appendChild(td);
<               td.appendChild(document.createTextNode(locale['S_SUNDAY_SHORT_BIG']));
```

```js:class.calendar.js
                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_MONDAY_SHORT_BIG']));

                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_TUESDAY_SHORT_BIG']));

                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_WEDNESDAY_SHORT_BIG']));

                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_THURSDAY_SHORT_BIG']));

                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_FRIDAY_SHORT_BIG']));

                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_SATURDAY_SHORT_BIG']));

                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_SUNDAY_SHORT_BIG']));
```
↓↓↓↓↓

```js:class.calendar.js
                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_SUNDAY_SHORT_BIG']));

                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_MONDAY_SHORT_BIG']));

                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_TUESDAY_SHORT_BIG']));

                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_WEDNESDAY_SHORT_BIG']));

                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_THURSDAY_SHORT_BIG']));

                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_FRIDAY_SHORT_BIG']));

                var td = document.createElement('th');
                tr.appendChild(td);
                td.appendChild(document.createTextNode(locale['S_SATURDAY_SHORT_BIG']));
```

## 完成

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150940/a25a762f-485e-1d77-b2d4-169bd7219cc8.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150940/f5072a25-0e29-7438-8aa6-4fbf6f3b3025.png)