diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index f550414..0000000
--- a/.gitattributes
+++ /dev/null
@@ -1,6 +0,0 @@
-# Remove files for archives generated using `git archive`
-Test export-ignore
-.gitattributes export-ignore
-.gitignore export-ignore
-.travis.yml export-ignore
-phpunit.xml.dist export-ignore
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
deleted file mode 100644
index 592d72f..0000000
--- a/.github/workflows/release.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-on:
- push:
- # Sequence of patterns matched against refs/tags
- tags:
- - '3*'
-
-name: create_release
-
-jobs:
- build:
- name: create_release
- runs-on: ubuntu-latest
- steps:
- - name: Checkout code
- uses: actions/checkout@v2
-
- - name: Slack Notification on Start
- uses: rtCamp/action-slack-notify@v2.2.0
- env:
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASE }}
- SLACK_CHANNEL: notify-nc3-release
- SLACK_TITLE: "${{ github.repository }}"
- SLACK_COLOR: "#f0ad4e"
- SLACK_MESSAGE: "Start Job"
-
- - name: Create Release
- id: create_release
- uses: actions/create-release@v1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
- with:
- tag_name: ${{ github.ref }}
- release_name: ${{ github.ref }}
- body: |
- NetCommons ${{ github.ref }} released.
- draft: false
- prerelease: false
-
- # テスト成功時はこちらのステップが実行される
- - name: Slack Notification on Finish
- uses: rtCamp/action-slack-notify@v2.2.0
- if: success()
- env:
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASE }}
- SLACK_CHANNEL: notify-nc3-release
- SLACK_TITLE: "${{ github.repository }}"
- SLACK_COLOR: good
- SLACK_MESSAGE: "Job Success"
-
- # テスト失敗時はこちらのステップが実行される
- - name: Slack Notification on Failure
- uses: rtCamp/action-slack-notify@v2.2.0
- if: failure()
- env:
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASE }}
- SLACK_CHANNEL: notify-nc3-tests
- SLACK_TITLE: "${{ github.repository }}"
- SLACK_COLOR: danger
- SLACK_MESSAGE: "Job Failure"
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
deleted file mode 100644
index 6da4321..0000000
--- a/.github/workflows/tests.yml
+++ /dev/null
@@ -1,168 +0,0 @@
-on:
- push:
- branches:
- - main
- - master
- pull_request:
- branches:
- - main
- - master
-
-name: tests
-
-jobs:
- setup:
- name: setup
- runs-on: ubuntu-latest
- steps:
- - name: Slack Notification on Start
- uses: rtCamp/action-slack-notify@v2.2.0
- if: env.SLACK_WEBHOOK != ''
- env:
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_TESTS }}
- SLACK_CHANNEL: notify-nc3-tests
- SLACK_TITLE: "${{ github.repository }}"
- SLACK_COLOR: "#f0ad4e"
-
- tests:
- name: tests
- needs: setup
- runs-on: ubuntu-latest
- strategy:
- matrix:
- php: [ '7.1', '7.2', '7.3', '7.4' ]
- mysql: [ '5.7', '8.0' ]
-
- env:
- NC3_BUILD_DIR: "/opt/nc3"
- NC3_DOCKER_DIR: "/opt/docker"
- NC3_GIT_URL: "git://github.com/NetCommons3/NetCommons3.git"
- NC3_GIT_BRANCH: "master"
- PLUGIN_BUILD_DIR: ${{ github.workspace }}
- PHP_VERSION: ${{ matrix.php }}
- MYSQL_VERSION: ${{ matrix.mysql }}
- MYSQL_ROOT_PASSWORD: root
- MYSQL_DATABASE: cakephp_test
- COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- steps:
- - uses: actions/checkout@v2
-
- - name: Fix up git URLs
- run: echo -e '[url "https://github.com/"]\n insteadOf = "git://github.com/"' >> ~/.gitconfig
-
- - name: environment
- run: |
- echo "GITHUB_WORKSPACE=${GITHUB_WORKSPACE}"
- echo "PLUGIN_BUILD_DIR=${PLUGIN_BUILD_DIR}"
- echo "PHP_VERSION=${PHP_VERSION}"
- echo "MYSQL_VERSION=${MYSQL_VERSION}"
- ls -al ${PLUGIN_BUILD_DIR}
-
- - name: docker-compose install
- run: |
- curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
- chmod +x ~/docker-compose
- sudo mv ~/docker-compose /usr/local/bin/docker-compose
- docker-compose --version
-
- - name: git clone nc3
- run: git clone -b ${NC3_GIT_BRANCH} ${NC3_GIT_URL} ${NC3_BUILD_DIR}
-
- - name: git clone nc3_docker
- run: git clone https://github.com/NetCommons3/nc3app-docker.git ${NC3_DOCKER_DIR}
-
- - name: docker-compose start
- run: |
- cd ${NC3_DOCKER_DIR}
- docker-compose up -d
- docker-compose start
-
- - run: docker ps
-
- - name: check libraries
- run: |
- cd ${NC3_DOCKER_DIR}
- docker-compose exec -T nc3app bash /opt/scripts/start-on-docker.sh
-
- - name: nc3 build
- run: |
- cd ${NC3_DOCKER_DIR}
- docker-compose exec -T nc3app bash /opt/scripts/app-build.sh
-
- - name: phpcs (PHP CodeSniffer)
- if: always()
- run: |
- cd ${NC3_DOCKER_DIR}
- docker-compose exec -T nc3app bash /opt/scripts/phpcs.sh
-
- - name: phpmd (PHP Mess Detector)
- if: always()
- run: |
- cd ${NC3_DOCKER_DIR}
- docker-compose exec -T nc3app bash /opt/scripts/phpmd.sh
-
- - name: phpcpd (PHP Copy/Paste Detector)
- if: always()
- run: |
- cd ${NC3_DOCKER_DIR}
- docker-compose exec -T nc3app bash /opt/scripts/phpcpd.sh
-
- - name: gjslint (JavaScript Style Check)
- if: always()
- run: |
- cd ${NC3_DOCKER_DIR}
- docker-compose exec -T nc3app bash /opt/scripts/gjslint.sh
-
- - name: phpdoc (PHP Documentor)
- if: always()
- run: |
- cd ${NC3_DOCKER_DIR}
- docker-compose exec -T nc3app bash /opt/scripts/phpdoc.sh
-
- - name: phpunit (PHP UnitTest)
- if: always()
- run: |
- cd ${NC3_DOCKER_DIR}
- docker-compose exec -T nc3app bash /opt/scripts/phpunit.sh
- sudo -s chmod a+w -R ${NC3_BUILD_DIR}/build
-
-# - name: push coveralls
-# env:
-# COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-# COVERALLS_FLAG_NAME: ${{ matrix.php }}
-# run: |
-# cd ${NC3_BUILD_DIR}
-# ls -la ${NC3_BUILD_DIR}
-# vendors/bin/php-coveralls --coverage_clover=build/logs/clover.xml -v
-
- - name: docker-compose remove
- if: always()
- run: |
- cd ${NC3_DOCKER_DIR}
- docker-compose rm -f
-
- # テスト失敗時はこちらのステップが実行される
- - name: Slack Notification on Failure
- uses: rtCamp/action-slack-notify@v2.2.0
- if: env.SLACK_WEBHOOK != '' && failure()
- env:
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_TESTS }}
- SLACK_CHANNEL: notify-nc3-tests
- SLACK_TITLE: "${{ github.repository }}(php${{ matrix.php }}, mysql${{ matrix.mysql }})"
- SLACK_COLOR: danger
-
- teardown:
- name: teardown
- runs-on: ubuntu-latest
- needs: tests
- steps:
- # テスト成功時はこちらのステップが実行される
- - name: Slack Notification on Success
- uses: rtCamp/action-slack-notify@v2.2.0
- if: env.SLACK_WEBHOOK != '' && success()
- env:
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_TESTS }}
- SLACK_CHANNEL: notify-nc3-tests
- SLACK_TITLE: "${{ github.repository }}"
- SLACK_COLOR: good
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index bd743c4..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-tmp/*
-[Cc]onfig/core.php
-[Cc]onfig/database.php
-app/tmp/*
-app/[Cc]onfig/core.php
-app/[Cc]onfig/database.php
-!empty
diff --git a/.phpcpdignore b/.phpcpdignore
deleted file mode 100644
index ad49132..0000000
--- a/.phpcpdignore
+++ /dev/null
@@ -1,2 +0,0 @@
-ReservationImportController.php
-ReservationPlansController.php
diff --git a/Config/Migration/002_mail_setting_records.php b/Config/Migration/002_mail_setting_records.php
deleted file mode 100644
index 359f7e2..0000000
--- a/Config/Migration/002_mail_setting_records.php
+++ /dev/null
@@ -1,116 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('MailsMigration', 'Mails.Config/Migration');
-
-/**
- * メール設定データのMigration
- *
- * @package NetCommons\Reservations\Config\Migration
- */
-class ReservationMailSettingRecords extends MailsMigration {
-
-/**
- * プラグインキー
- *
- * @var string
- */
- const PLUGIN_KEY = 'reservations';
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'mail_setting_records';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(),
- 'down' => array(),
- );
-
-/**
- * mail setting data
- *
- * @var array $migration
- */
- public $records = array(
- 'MailSetting' => array(
- //コンテンツ通知 - 設定
- array(
- 'plugin_key' => self::PLUGIN_KEY,
- 'block_key' => null,
- 'is_mail_send' => false,
- 'is_mail_send_approval' => true,
- ),
- ),
- 'MailSettingFixedPhrase' => array(
- //コンテンツ通知 - 定型文
- // * 英語
- array(
- 'language_id' => '1',
- 'plugin_key' => self::PLUGIN_KEY,
- 'block_key' => null,
- 'type_key' => 'contents',
- 'mail_fixed_phrase_subject' => '', //デフォルト(__d('mails', 'MailSetting.mail_fixed_phrase_subject'))
- 'mail_fixed_phrase_body' => '', //デフォルト(__d('mails', 'MailSetting.mail_fixed_phrase_body'))
- ),
- // * 日本語
- array(
- 'language_id' => '2',
- 'plugin_key' => self::PLUGIN_KEY,
- 'block_key' => null,
- 'type_key' => 'contents',
- 'mail_fixed_phrase_subject' => '[{X-SITE_NAME}]予約通知',
- 'mail_fixed_phrase_body' => '施設に予約が追加されたのでお知らせします。
-
-件名:{X-SUBJECT}
-公開対象:{X-ROOM}
-開始日時:{X-START_TIME}
-終了日時:{X-END_TIME}
-場所:{X-LOCATION}
-連絡先:{X-CONTACT}
-繰返し:{X-RRULE}
-記入者:{X-USER}
-記入日時:{X-TO_DATE}
-
-{X-BODY}
-
-この予約を見るには、下記アドレスへ
-{X-URL}
-',
- ),
- ));
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return parent::updateAndDelete($direction, self::PLUGIN_KEY);
- }
-}
diff --git a/Config/Migration/1462873994_init.php b/Config/Migration/1462873994_init.php
deleted file mode 100644
index 208d9d1..0000000
--- a/Config/Migration/1462873994_init.php
+++ /dev/null
@@ -1,177 +0,0 @@
- array(
- 'create_table' => array(
- 'reservation_event_contents' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'model' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'content_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'CONTENTキー', 'charset' => 'utf8'),
- 'reservation_event_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- 'reservation_event_share_users' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'reservation_event_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'share_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '情報共有者'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- 'reservation_events' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'reservation_rrule_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'room_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'comment' => 'ルームID'),
- 'language_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 6, 'unsigned' => false, 'comment' => '言語ID'),
- 'target_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '対象者'),
- 'title' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'タイトル', 'charset' => 'utf8'),
- 'title_icon' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'タイトル アイコン', 'charset' => 'utf8'),
- 'location' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '場所', 'charset' => 'utf8'),
- 'contact' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '連絡先', 'charset' => 'utf8'),
- 'description' => array('type' => 'text', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '詳細', 'charset' => 'utf8'),
- 'is_allday' => array('type' => 'boolean', 'null' => true, 'default' => '1', 'comment' => '終日かどうか | 0:終日ではない | 1:終日'),
- 'start_date' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 8, 'collate' => 'utf8_general_ci', 'comment' => '開始日 (YYYYMMDD形式)', 'charset' => 'utf8'),
- 'start_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 6, 'collate' => 'utf8_general_ci', 'comment' => '開始時刻 (hhmmss形式)', 'charset' => 'utf8'),
- 'dtstart' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'comment' => '開始日時 (YYYYMMDDhhmmss) iReservationのDTDSTARTからTとZを外したもの', 'charset' => 'utf8'),
- 'end_date' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 8, 'collate' => 'utf8_general_ci', 'comment' => '終了日 (YYYYMMDD形式)', 'charset' => 'utf8'),
- 'end_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 6, 'collate' => 'utf8_general_ci', 'comment' => '終了時刻 (hhmmss形式)', 'charset' => 'utf8'),
- 'dtend' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'comment' => '終了日時 (YYYYMMDDhhmmss形式) iReservationのDTENDからTとZをはずしたもの', 'charset' => 'utf8'),
- 'timezone_offset' => array('type' => 'float', 'null' => false, 'default' => '0.0', 'length' => '3,1', 'unsigned' => false, 'comment' => 'タイムゾーンオフセット-12.0~+12.0'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- 'reservation_frame_setting_select_rooms' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'reservation_frame_setting_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'comment' => '施設予約フレームセッティングのid'),
- 'room_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'comment' => 'ルームID'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- 'reservation_frame_settings' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'frame_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'フレームKey', 'charset' => 'utf8'),
- 'display_type' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 4, 'unsigned' => false, 'comment' => '表示方法'),
- 'start_pos' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 4, 'unsigned' => false, 'comment' => '開始位置'),
- 'display_count' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 4, 'unsigned' => false, 'comment' => '表示日数'),
- 'is_myroom' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'プライベートルームの施設予約コンポーネント(イベント等)を表示するかどうか 0:表示しない 1:表示する'),
- 'is_select_room' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '指定したルームのみ表示するかどうか 0:表示しない 1:表示する'),
- 'room_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'comment' => 'ルームID'),
- 'timeline_base_time' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'comment' => '単一日タイムライン基準時'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- 'reservation_rrules' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'reservation_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '施設予約コンポーネント(イベント等)繰返し規則 キー', 'charset' => 'utf8'),
- 'name' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '施設予約コンポーネント(イベント等)繰返し規則名称', 'charset' => 'utf8'),
- 'rrule' => array('type' => 'text', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '繰返し規則', 'charset' => 'utf8'),
- 'ireservation_uid' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'iReservation specification UID. | iReservation仕様のUID', 'charset' => 'utf8'),
- 'ireservation_comp_name' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'iReservation仕様のコンポーネント名 (vevent,vtodo,vjournal 等)', 'charset' => 'utf8'),
- 'room_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false, 'comment' => 'ルームID'),
- 'language_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 6, 'unsigned' => false, 'comment' => '言語ID'),
- 'status' => array('type' => 'integer', 'null' => false, 'default' => null, 'length' => 4, 'unsigned' => false, 'comment' => '公開状況 1:公開中、2:公開申請中、3:下書き中、4:差し戻し'),
- 'is_active' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'Is active, 0:deactive 1:acive | アクティブなコンテンツかどうか 0:アクテ ィブでない 1:アクティブ | | '),
- 'is_latest' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '最新コンテンツかどうか 0:最新でない 1:最新'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- 'reservations' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'block_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'Block キー', 'charset' => 'utf8'),
- 'use_workflow' => array('type' => 'boolean', 'null' => false, 'default' => '1', 'comment' => 'Use workflow, 0:Unused 1:Use | コンテンツの
-承認機能 0:使わない 1:使う | | '),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- ),
- ),
- 'down' => array(
- 'drop_table' => array(
- 'reservation_event_contents', 'reservation_event_share_users', 'reservation_events', 'reservation_frame_setting_select_rooms', 'reservation_frame_settings', 'reservation_rrules', 'reservations'
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1463911022_status_and_others_move_rrule_to_event.php b/Config/Migration/1463911022_status_and_others_move_rrule_to_event.php
deleted file mode 100644
index f91f60a..0000000
--- a/Config/Migration/1463911022_status_and_others_move_rrule_to_event.php
+++ /dev/null
@@ -1,121 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsMigration', 'NetCommons.Config/Migration');
-
-/**
- * 施設予約status他をrruleからeventへ移すMigration
- *
- * @package NetCommons\Reservations\Config\Migration
- */
-class StatusAndOthersMoveRruleToEvent extends NetCommonsMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'status_and_others_move_rrule_to_event';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_field' => array(
- 'reservation_events' => array(
- 'key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'イベントKey', 'charset' => 'utf8', 'after' => 'reservation_rrule_id'),
- 'status' => array('type' => 'integer', 'null' => false, 'default' => null, 'length' => 4, 'unsigned' => false, 'comment' => '公開状況 1:公開中>、2:公 開申請中、3:下書き中、4:差し戻し', 'after' => 'timezone_offset'),
- 'is_active' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'アクティブなコンテンツかどうか 0:アクティブでない 1:アクティブ', 'after' => 'status'),
- 'is_latest' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '最新コンテンツかどうか 0:最新でない 1:最新', 'after' => 'is_active'),
- 'recurrence_event_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false, 'comment' => '1以上のとき、再発(置換)イベントidを指す。VCALENDERのRECURRENCE-ID機能実現のための項目', 'after' => 'is_latest'),
- 'exception_event_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false, 'comment' => '1以上のとき、例外(削除)イベントidを指す。vreservationの EXDATE機能実現のための項目', 'after' => 'recurrence_event_id'),
- ),
- ),
- 'drop_field' => array(
- 'reservation_rrules' => array('language_id', 'status', 'is_active', 'is_latest'),
- ),
- ),
- 'down' => array(
- 'drop_field' => array(
- 'reservation_events' => array('key', 'status', 'is_active', 'is_latest', 'recurrence_event_id', 'exception_event_id'),
- ),
- 'create_field' => array(
- 'reservation_rrules' => array(
- 'language_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 6, 'unsigned' => false, 'comment' => '言語ID'),
- 'status' => array('type' => 'integer', 'null' => false, 'default' => null, 'length' => 4, 'unsigned' => false, 'comment' => '公開状況 1:公開中、2:公開申請中、3:下書き中、4:差し戻し'),
- 'is_active' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'Is active, 0:deactive 1:acive | アクティブなコンテンツかどうか 0:アクテ ィブでない 1:アクティブ | | '),
- 'is_latest' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '最新コンテンツかどうか 0:最新でない 1:最新'),
- ),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- $this->ReservationRrule = $this->generateModel('ReservationRrule');
- $this->ReservationEvent = $this->generateModel('ReservationEvent');
-
- if ($direction == 'up') {
- $events = $this->ReservationEvent->find('all', array(
- 'recursive' => -1,
- 'callbacks' => false,
- ));
- foreach ($events as &$event) {
- $event['key'] = 'init' . $event['id'];
- $event['status'] = 1; //publish
- $event['is_active'] = 1;
- $event['is_latest'] = 1;
- $event['recurrence_event_id'] = 0;
- $event['exception_event_id'] = 0;
-
- $this->ReservationEvent->save($event, array(
- 'validate' => false, //Currentを期待したvalidateなのでoffする
- 'callbacks' => false,
- ));
- }
- } elseif ($direction == 'down') {
- $rrules = $this->ReservationRrule->find('all', array(
- 'recursive' => -1,
- 'callbacks' => false,
- ));
- foreach ($rrules as &$rrule) {
- $rrule['language_id'] = 2; //日本語
- $rrule['status'] = 1; //publish
- $rrule['is_active'] = 1;
- $rrule['is_latest'] = 1;
-
- $this->ReservationRrule->save($rrule, array(
- 'validate' => false, //Currentを期待したvalidateなのでoffする
- 'callbacks' => false,
- ));
- }
- }
- return true;
- }
-}
diff --git a/Config/Migration/1464065650_add_email_send_timing.php b/Config/Migration/1464065650_add_email_send_timing.php
deleted file mode 100644
index 25fed67..0000000
--- a/Config/Migration/1464065650_add_email_send_timing.php
+++ /dev/null
@@ -1,66 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * reservation_eventsにemai_send_timing他を足すMigration
- *
- * @package NetCommons\Reservations\Config\Migration
- */
-class AddEmailSendTiming extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'add_email_send_timing';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_field' => array(
- 'reservation_events' => array(
- 'is_enable_mail' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'イベント前にメール通知するかどうか 0:通知しない 1:通知する', 'after' => 'exception_event_id'),
- 'email_send_timing' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false, 'comment' => 'イベントN分前メール通知の値N。単位は分。', 'after' => 'is_enable_mail'),
- ),
- ),
- ),
- 'down' => array(
- 'drop_field' => array(
- 'reservation_events' => array('is_enable_mail', 'email_send_timing'),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1469698346_delete_columns_use_workflow.php b/Config/Migration/1469698346_delete_columns_use_workflow.php
deleted file mode 100644
index 987d076..0000000
--- a/Config/Migration/1469698346_delete_columns_use_workflow.php
+++ /dev/null
@@ -1,66 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * DeleteColumnsUseWorkflow
- *
- * @author Mitsuru Mutaguchi
- * @package NetCommons\Reservations\Config\Migration
- */
-class DeleteColumnsUseWorkflow extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'delete_columns_use_workflow';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'drop_field' => array(
- 'reservations' => array('use_workflow'),
- ),
- ),
- 'down' => array(
- 'create_field' => array(
- 'reservations' => array(
- 'use_workflow' => array('type' => 'boolean', 'null' => false, 'default' => '1', 'comment' => 'Use workflow, 0:Unused 1:Use | コンテンツの
-承認機能 0:使わない 1:使う | | '),
- ),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1470022458_change_ireservation_uid.php b/Config/Migration/1470022458_change_ireservation_uid.php
deleted file mode 100644
index 223d4ee..0000000
--- a/Config/Migration/1470022458_change_ireservation_uid.php
+++ /dev/null
@@ -1,67 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * reservation_eventsにemai_send_timing他を足すMigration
- *
- * @package NetCommons\Reservations\Config\Migration
- */
-class ChangeIreservationUid extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'change_ireservation_uid';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'alter_field' => array(
- 'reservation_rrules' => array(
- 'ireservation_uid' => array('type' => 'text', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'iReservationUIDの元となる情報。rrule分割元と分割先の関連性を記録する。', 'charset' => 'utf8'),
- ),
- ),
- ),
- 'down' => array(
- 'alter_field' => array(
- 'reservation_rrules' => array(
- 'ireservation_uid' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'iReservation specification UID. | iReservation仕様のUID', 'charset' => 'utf8'),
- ),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1482110197_add_fields_for_m17n.php b/Config/Migration/1482110197_add_fields_for_m17n.php
deleted file mode 100644
index 2b7ee3e..0000000
--- a/Config/Migration/1482110197_add_fields_for_m17n.php
+++ /dev/null
@@ -1,68 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsMigration', 'NetCommons.Config/Migration');
-
-/**
- * 多言語化対応
- *
- * @author Shohei Nakajima
- * @package NetCommons\Reservations\Config\Migration
- */
-class AddFieldsForM17n extends NetCommonsMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'add_fields_for_m17n';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_field' => array(
- 'reservation_events' => array(
- 'is_origin' => array('type' => 'boolean', 'null' => false, 'default' => '1', 'comment' => 'オリジナルかどうか', 'after' => 'language_id'),
- 'is_translation' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '翻訳したかどうか', 'after' => 'is_origin'),
- ),
- ),
- ),
- 'down' => array(
- 'drop_field' => array(
- 'reservation_events' => array('is_origin', 'is_translation'),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1484544981_add_is_original_copy.php b/Config/Migration/1484544981_add_is_original_copy.php
deleted file mode 100644
index 20e65e1..0000000
--- a/Config/Migration/1484544981_add_is_original_copy.php
+++ /dev/null
@@ -1,67 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsMigration', 'NetCommons.Config/Migration');
-
-/**
- * 多言語化対応
- *
- * @author Shohei Nakajima
- * @package NetCommons\Reservations\Config\Migration
- */
-class AddIsOriginalCopy extends NetCommonsMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'add_is_original_copy';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_field' => array(
- 'reservation_events' => array(
- 'is_original_copy' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'オリジナルのコピー。言語を新たに追加したときに使用する', 'after' => 'is_translation'),
- ),
- ),
- ),
- 'down' => array(
- 'drop_field' => array(
- 'reservation_events' => array('is_original_copy'),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1488612405_add_locations.php b/Config/Migration/1488612405_add_locations.php
deleted file mode 100644
index 7dbdd25..0000000
--- a/Config/Migration/1488612405_add_locations.php
+++ /dev/null
@@ -1,101 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsMigration', 'NetCommons.Config/Migration');
-
-/**
- * 施設追加
- *
- * @author Shohei Nakajima
- * @package NetCommons\Reservations\Config\Migration
- */
-class AddLocations extends NetCommonsMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'add_locations';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_field' => array(
- 'reservation_events' => array(
- 'location_key' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8', 'after' => 'timezone_offset'),
- ),
- ),
- 'create_table' => array(
- 'reservation_locations' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => true, 'key' => 'primary'),
- 'key' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'language_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'is_translation' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '翻訳したかどうか'),
- 'is_origin' => array('type' => 'boolean', 'null' => false, 'default' => '1', 'comment' => 'オリジナルかどうか'),
- 'is_original_copy' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'オリジナルのコピー。言語を新たに追加したときに使用する'),
- 'category_id' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => true, 'key' => 'index'),
- 'location_name' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'comment' => '施設名', 'charset' => 'utf8'),
- 'detail' => array('type' => 'text', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'add_authority' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'time_table' => array('type' => 'string', 'null' => false, 'length' => 32, 'collate' => 'utf8_general_ci', 'comment' => '利用可能な曜日', 'charset' => 'utf8'),
- 'start_time' => array('type' => 'string', 'null' => false, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'end_time' => array('type' => 'string', 'null' => false, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'use_private' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'use_auth_flag' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'use_all_rooms' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'display_sequence' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => true),
- 'contact' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- 'category_id' => array('column' => array('category_id', 'display_sequence'), 'unique' => 0),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- ),
- ),
- 'down' => array(
- 'drop_field' => array(
- 'reservation_events' => array('location_key'),
- ),
- 'drop_table' => array(
- 'reservation_locations'
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1490295274_alter_frame_settings.php b/Config/Migration/1490295274_alter_frame_settings.php
deleted file mode 100644
index 41eba8f..0000000
--- a/Config/Migration/1490295274_alter_frame_settings.php
+++ /dev/null
@@ -1,99 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsMigration', 'NetCommons.Config/Migration');
-
-/**
- * 表示方法変更テーブルの修正
- *
- * @author Your Name
- * @package NetCommons\Reservations\Config\Migration
- */
-class AlterFrameSettings extends NetCommonsMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'alter_frame_settings';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_field' => array(
- 'reservation_frame_settings' => array(
- 'category_id' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false, 'comment' => 'カテゴリ', 'after' => 'display_type'),
- 'location_key' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '最初に表示する施設', 'charset' => 'utf8', 'after' => 'category_id'),
- 'display_timeframe' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '時間枠表時', 'after' => 'location_key'),
- 'display_start_time_type' => array('type' => 'integer', 'null' => true, 'default' => '0', 'length' => 4, 'unsigned' => false, 'comment' => '0:閲覧時刻により変動 1:固定', 'after' => 'display_timeframe'),
- 'display_interval' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false, 'comment' => '表示幅(時間)', 'after' => 'timeline_base_time'),
- ),
- 'reservation_locations' => array(
- 'weight' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => true, 'after' => 'use_all_rooms'),
- 'indexes' => array(
- 'category_id' => array('column' => array('category_id', 'weight'), 'unique' => 0),
- ),
- ),
- ),
- 'alter_field' => array(
- 'reservation_frame_settings' => array(
- 'timeline_base_time' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'comment' => '表示開始時'),
- ),
- ),
- 'drop_field' => array(
- 'reservation_locations' => array('display_sequence', 'indexes' => array('category_id')),
- ),
- ),
- 'down' => array(
- 'drop_field' => array(
- 'reservation_frame_settings' => array('category_id', 'location_key', 'display_timeframe', 'display_start_time_type', 'display_interval'),
- 'reservation_locations' => array('weight', 'indexes' => array('category_id')),
- ),
- 'alter_field' => array(
- 'reservation_frame_settings' => array(
- 'timeline_base_time' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'comment' => '単一日タイムライン基準時'),
- ),
- ),
- 'create_field' => array(
- 'reservation_locations' => array(
- 'display_sequence' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => true),
- 'indexes' => array(
- 'category_id' => array(),
- ),
- ),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1490395568_add_timeframes_locations_rooms.php b/Config/Migration/1490395568_add_timeframes_locations_rooms.php
deleted file mode 100644
index 6e07c10..0000000
--- a/Config/Migration/1490395568_add_timeframes_locations_rooms.php
+++ /dev/null
@@ -1,94 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-App::uses('NetCommonsMigration', 'NetCommons.Config/Migration');
-
-/**
- * Class AddTimeframesLocationsRooms
- */
-class AddTimeframesLocationsRooms extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'add_timeframes_locations_rooms';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_table' => array(
- 'reservation_locations_rooms' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'reservation_location_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'room_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'index'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- 'room_id' => array('column' => 'room_id', 'unique' => 0),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- 'reservation_timeframes' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'key' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'language_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'is_translation' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '翻訳したかどうか'),
- 'is_origin' => array('type' => 'boolean', 'null' => false, 'default' => '1', 'comment' => 'オリジナルかどうか'),
- 'is_original_copy' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'オリジナルのコピー。言語を新たに追加したときに使用する'),
- 'title' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'start_time' => array('type' => 'string', 'null' => false, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'end_time' => array('type' => 'string', 'null' => false, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'color' => array('type' => 'string', 'null' => false, 'length' => 16, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- ),
- ),
- 'down' => array(
- 'drop_table' => array(
- 'reservation_locations_rooms', 'reservation_timeframes'
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1490495118_remove_framesettings_category_id.php b/Config/Migration/1490495118_remove_framesettings_category_id.php
deleted file mode 100644
index 92d22f5..0000000
--- a/Config/Migration/1490495118_remove_framesettings_category_id.php
+++ /dev/null
@@ -1,61 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class RemoveFrameSettingsCategoryId
- */
-class RemoveFrameSettingsCategoryId extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'remove_frameSettings_category_id';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'drop_field' => array(
- 'reservation_frame_settings' => array('category_id'),
- ),
- ),
- 'down' => array(
- 'create_field' => array(
- 'reservation_frame_settings' => array(
- 'category_id' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false, 'comment' => 'カテゴリ'),
- ),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1491883506_add_framesetting_category_id.php b/Config/Migration/1491883506_add_framesetting_category_id.php
deleted file mode 100644
index b90f8c7..0000000
--- a/Config/Migration/1491883506_add_framesetting_category_id.php
+++ /dev/null
@@ -1,93 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class AddFramesettingCategoryId
- */
-class AddFramesettingCategoryId extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'add_framesetting_category_id';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_field' => array(
- 'reservation_frame_settings' => array(
- 'category_id' => array('type' => 'integer', 'null' => true, 'default' => null, 'length' => 10, 'unsigned' => true, 'comment' => '最初に表示する施設カテゴリID', 'after' => 'location_key'),
- ),
- ),
- 'alter_field' => array(
- 'reservation_locations' => array(
- 'key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'location_name' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '施設名', 'charset' => 'utf8'),
- 'time_table' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 32, 'collate' => 'utf8_general_ci', 'comment' => '利用可能な曜日', 'charset' => 'utf8'),
- 'start_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'end_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- ),
- 'reservation_timeframes' => array(
- 'key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'title' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'start_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'end_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'color' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 16, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- ),
- ),
- ),
- 'down' => array(
- 'drop_field' => array(
- 'reservation_frame_settings' => array('category_id'),
- ),
- 'alter_field' => array(
- 'reservation_locations' => array(
- 'key' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'location_name' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'comment' => '施設名', 'charset' => 'utf8'),
- 'time_table' => array('type' => 'string', 'null' => false, 'length' => 32, 'collate' => 'utf8_general_ci', 'comment' => '利用可能な曜日', 'charset' => 'utf8'),
- 'start_time' => array('type' => 'string', 'null' => false, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'end_time' => array('type' => 'string', 'null' => false, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- ),
- 'reservation_timeframes' => array(
- 'key' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'title' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'start_time' => array('type' => 'string', 'null' => false, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'end_time' => array('type' => 'string', 'null' => false, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'color' => array('type' => 'string', 'null' => false, 'length' => 16, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- ),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1492666075_add_reservation_location_permissions.php b/Config/Migration/1492666075_add_reservation_location_permissions.php
deleted file mode 100644
index c6fdfa8..0000000
--- a/Config/Migration/1492666075_add_reservation_location_permissions.php
+++ /dev/null
@@ -1,74 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class AddReservationLocationPermissions
- */
-class AddReservationLocationPermissions extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'add_reservation_location_permissions';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_table' => array(
- 'reservation_location_permissions' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'location_key' => array('type' => 'string', 'null' => false, 'default' => null, 'key' => 'index', 'collate' => 'utf8_general_ci', 'comment' => '施設キー', 'charset' => 'utf8'),
- 'role_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'ロールキー', 'charset' => 'utf8'),
- 'permission' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'パーミッション e.g.) content_creatable', 'charset' => 'utf8'),
- 'value' => array('type' => 'boolean', 'null' => true, 'default' => null),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- 'location_key' => array('column' => 'location_key', 'unique' => 0),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- ),
- ),
- 'down' => array(
- 'drop_table' => array(
- 'reservation_location_permissions'
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1492681539_rename_location_permission.php b/Config/Migration/1492681539_rename_location_permission.php
deleted file mode 100644
index e1c9c96..0000000
--- a/Config/Migration/1492681539_rename_location_permission.php
+++ /dev/null
@@ -1,95 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class RenameLocationPermission
- */
-class RenameLocationPermission extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'rename_location_permission';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_table' => array(
- 'reservation_location_reservable' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'location_key' => array('type' => 'string', 'null' => false, 'default' => null, 'key' => 'index', 'collate' => 'utf8_general_ci', 'comment' => '施設キー', 'charset' => 'utf8'),
- 'role_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'ロールキー', 'charset' => 'utf8'),
- 'room_id' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'value' => array('type' => 'boolean', 'null' => true, 'default' => null),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- 'location_key' => array('column' => 'location_key', 'unique' => 0),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- ),
- 'drop_table' => array(
- 'reservation_location_permissions'
- ),
- ),
- 'down' => array(
- 'drop_table' => array(
- 'reservation_location_reservable'
- ),
- 'create_table' => array(
- 'reservation_location_permissions' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'location_key' => array('type' => 'string', 'null' => false, 'default' => null, 'key' => 'index', 'collate' => 'utf8_general_ci', 'comment' => '施設キー', 'charset' => 'utf8'),
- 'role_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'ロールキー', 'charset' => 'utf8'),
- 'permission' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'パーミッション e.g.) content_creatable', 'charset' => 'utf8'),
- 'value' => array('type' => 'boolean', 'null' => true, 'default' => null),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- 'location_key' => array('column' => 'location_key', 'unique' => 0),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1492828971_alter_location_add_use_workflow.php b/Config/Migration/1492828971_alter_location_add_use_workflow.php
deleted file mode 100644
index 90118a3..0000000
--- a/Config/Migration/1492828971_alter_location_add_use_workflow.php
+++ /dev/null
@@ -1,61 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class AlterLocationAddUseWorkflow
- */
-class AlterLocationAddUseWorkflow extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'alter_location_add_use_workflow';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_field' => array(
- 'reservation_locations' => array(
- 'use_workflow' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'after' => 'use_all_rooms'),
- ),
- ),
- ),
- 'down' => array(
- 'drop_field' => array(
- 'reservation_locations' => array('use_workflow'),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1492837515_create_locations_approval_users.php b/Config/Migration/1492837515_create_locations_approval_users.php
deleted file mode 100644
index 0ba696e..0000000
--- a/Config/Migration/1492837515_create_locations_approval_users.php
+++ /dev/null
@@ -1,71 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class CreateLocationsApprovalUsers
- */
-class CreateLocationsApprovalUsers extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'create_locations_approval_users';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_table' => array(
- 'reservation_locations_approval_users' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'location_key' => array('type' => 'string', 'null' => false, 'default' => '0', 'collate' => 'utf8_general_ci', 'comment' => '施設キー', 'charset' => 'utf8'),
- 'user_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false, 'comment' => '承認者'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- ),
- ),
- 'down' => array(
- 'drop_table' => array(
- 'reservation_locations_approval_users'
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1493203900_add_timezone_in_location.php b/Config/Migration/1493203900_add_timezone_in_location.php
deleted file mode 100644
index 06699ed..0000000
--- a/Config/Migration/1493203900_add_timezone_in_location.php
+++ /dev/null
@@ -1,61 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class AddTimezoneInLocation
- */
-class AddTimezoneInLocation extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'add_timezone_in_location';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_field' => array(
- 'reservation_locations' => array(
- 'timezone' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8', 'after' => 'end_time'),
- ),
- ),
- ),
- 'down' => array(
- 'drop_field' => array(
- 'reservation_locations' => array('timezone'),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1493205542_change_start_time_end_time.php b/Config/Migration/1493205542_change_start_time_end_time.php
deleted file mode 100644
index 6ab4ccf..0000000
--- a/Config/Migration/1493205542_change_start_time_end_time.php
+++ /dev/null
@@ -1,65 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class ChangeStartTimeEndTime
- */
-class ChangeStartTimeEndTime extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'change_start_time_end_time';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'alter_field' => array(
- 'reservation_locations' => array(
- 'start_time' => array('type' => 'datetime', 'null' => false, 'default' => null, 'length' => null),
- 'end_time' => array('type' => 'datetime', 'null' => false, 'default' => null, 'length' => null),
- ),
- ),
- ),
- 'down' => array(
- 'alter_field' => array(
- 'reservation_locations' => array(
- 'start_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'end_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- ),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1493447203_add_default_role_permissions.php b/Config/Migration/1493447203_add_default_role_permissions.php
deleted file mode 100644
index 064fc32..0000000
--- a/Config/Migration/1493447203_add_default_role_permissions.php
+++ /dev/null
@@ -1,103 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsMigration', 'NetCommons.Config/Migration');
-
-/**
- * デフォルトロールパーミッションデータ作成 migration
- *
- * @author Shohei Nakajima
- * @package NetCommons\Reservations\Config\Migration
- */
-class AddDefaultRolePermissions extends NetCommonsMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'add_default_role_permissions';
-
-/**
- * recodes
- *
- * @var array $records
- */
- public $records = array(
- 'DefaultRolePermission' => array(
- // 予約できる権限
- array(
- 'role_key' => 'room_administrator',
- 'type' => 'location_role',
- 'permission' => 'location_reservable',
- 'value' => '1',
- 'fixed' => '1',
- ),
- array(
- 'role_key' => 'chief_editor',
- 'type' => 'location_role',
- 'permission' => 'location_reservable',
- 'value' => '1',
- 'fixed' => '0',
- ),
- array(
- 'role_key' => 'editor',
- 'type' => 'location_role',
- 'permission' => 'location_reservable',
- 'value' => '1',
- 'fixed' => '0',
- ),
- array(
- 'role_key' => 'general_user',
- 'type' => 'location_role',
- 'permission' => 'location_reservable',
- 'value' => '0',
- 'fixed' => '0',
- ),
- array(
- 'role_key' => 'visitor',
- 'type' => 'location_role',
- 'permission' => 'location_reservable',
- 'value' => '0',
- 'fixed' => '1',
- ),
- )
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- if ($direction === 'down') {
- return true;
- }
-
- foreach ($this->records as $model => $records) {
- if (!$this->updateRecords($model, $records)) {
- return false;
- }
- }
- return true;
- }
-
-}
diff --git a/Config/Migration/1494079090_alter_timeframe.php b/Config/Migration/1494079090_alter_timeframe.php
deleted file mode 100644
index 0516805..0000000
--- a/Config/Migration/1494079090_alter_timeframe.php
+++ /dev/null
@@ -1,95 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class AlterTimeframe
- */
-class AlterTimeframe extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'alter_timeframe';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_field' => array(
- 'reservation_events' => array(
- 'timezone' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8', 'after' => 'timezone_offset'),
- ),
- 'reservation_timeframes' => array(
- 'timezone' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8', 'after' => 'end_time'),
- ),
- ),
- 'alter_field' => array(
- 'reservation_timeframes' => array(
- 'start_time' => array('type' => 'time', 'null' => false, 'default' => null),
- 'end_time' => array('type' => 'time', 'null' => false, 'default' => null),
- ),
- ),
- 'drop_table' => array(
- 'reservation_frame_setting_select_rooms'
- ),
- ),
- 'down' => array(
- 'drop_field' => array(
- 'reservation_events' => array('timezone'),
- 'reservation_timeframes' => array('timezone'),
- ),
- 'alter_field' => array(
- 'reservation_timeframes' => array(
- 'start_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'end_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- ),
- ),
- 'create_table' => array(
- 'reservation_frame_setting_select_rooms' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'reservation_frame_setting_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'comment' => '施設予約フレームセッティングのid'),
- 'room_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'comment' => 'ルームID'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1494577466_alter_location.php b/Config/Migration/1494577466_alter_location.php
deleted file mode 100644
index 6f16bb0..0000000
--- a/Config/Migration/1494577466_alter_location.php
+++ /dev/null
@@ -1,63 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class AlterLocation
- */
-class AlterLocation extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'alter_location';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'alter_field' => array(
- 'reservation_locations' => array(
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- ),
- ),
- ),
- 'down' => array(
- 'alter_field' => array(
- 'reservation_locations' => array(
- 'modified' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- ),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1496878521_alter_event_add_calendar_key_and_timezone.php b/Config/Migration/1496878521_alter_event_add_calendar_key_and_timezone.php
deleted file mode 100644
index 49587c5..0000000
--- a/Config/Migration/1496878521_alter_event_add_calendar_key_and_timezone.php
+++ /dev/null
@@ -1,61 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class AlterEventAddCalendarKeyAndTimezone
- */
-class AlterEventAddCalendarKeyAndTimezone extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'alter_event_add_calendar_key_and_timezone';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'create_field' => array(
- 'reservation_events' => array(
- 'calendar_key' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8', 'after' => 'email_send_timing'),
- ),
- ),
- ),
- 'down' => array(
- 'drop_field' => array(
- 'reservation_events' => array('calendar_key'),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Migration/1496878522_timezone_offset_to_id.php b/Config/Migration/1496878522_timezone_offset_to_id.php
deleted file mode 100644
index 56ff764..0000000
--- a/Config/Migration/1496878522_timezone_offset_to_id.php
+++ /dev/null
@@ -1,232 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-
-App::uses('NetCommonsMigration', 'NetCommons.Config/Migration');
-
-/**
- * 予約のtimezone_offset からtimezone idをうめる
- *
- * @package NetCommons\Reservations\Config\Migration
- */
-class TimezoneOffsetToId extends NetCommonsMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'timezone_offset_to_id';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(),
- 'down' => array(),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- $this->ReservationEvent = $this->generateModel('ReservationEvent');
-
- if ($direction == 'up') {
- // timezone_offsetからtimezoneをうめる
- $tzTbl = self::getTzTbl();
- $offsetIdList = [];
- foreach ($tzTbl as $vars) {
- $offsetIdList[sprintf('%.1f', $vars[1])] = $vars[2];
- }
- $events = $this->ReservationEvent->find('all', array(
- 'recursive' => -1,
- 'callbacks' => false,
- ));
- foreach ($events as $event) {
- $event['ReservationEvent']['timezone'] =
- $offsetIdList[$event['ReservationEvent']['timezone_offset']];
- $this->ReservationEvent->save($event, array(
- 'validate' => false,
- 'callbacks' => false,
- ));
- }
- } elseif ($direction == 'down') {
- // null に戻す
- $events = $this->ReservationEvent->find('all', array(
- 'recursive' => -1,
- 'callbacks' => false,
- ));
- foreach ($events as $event) {
- $event['ReservationEvent']['timezone'] = null;
- $this->ReservationEvent->save($event, array(
- 'validate' => false,
- 'callbacks' => false,
- ));
- }
- }
- return true;
- }
-
-/**
- * getTzTbl
- *
- * @return array カレンダータイムゾーン情報配列取得関数
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public static function getTzTbl() {
- $tzTbl = array(
- // NC3にEtc/GM+12はないが、施設予約ではNC3タイムゾーンからオフセット計算したデータが
- // これまでに登録されてるはずなので、-12.0というデータは存在しないはず。
- //
- //'_TZ_GMTM12' => array(
- // __d('calendars', '(GMT-12:00) Eniwetok, Kwajalein'),
- // -12.0,
- // "Etc/GMT+12"
- //),
- '_TZ_GMTM11' => array(
- __d('calendars', '(GMT-11:00) Midway Island, Samoa'),
- -11.0, "Pacific/Midway"
- ),
- '_TZ_GMTM10' => array(
- __d('calendars', '(GMT-10:00) Hawaii'),
- -10.0, "Pacific/Honolulu" // NC3にないのでUS/Hawaiiから変更
- ),
- '_TZ_GMTM9' => array(
- __d('calendars', '(GMT-9:00) Alaska'),
- -9.0,
- "America/Anchorage" // NC3にないので変更//"US/Alaska"
- ),
- '_TZ_GMTM8' => array(
- __d('calendars', '(GMT-8:00) Pacific Time (US & Canada)'),
- -8.0,
- "America/Los_Angeles" // NC3にないので変更//"US/Pacific"
- ),
- '_TZ_GMTM7' => array(
- __d('calendars', '(GMT-7:00) Mountain Time (US & Canada)'),
- -7.0,
- "America/Denver" //NC3にないので変更//"US/Mountain"
- ),
- '_TZ_GMTM6' => array(
- __d('calendars', '(GMT-6:00) Central Time (US & Canada), Mexico City'),
- -6.0,
- "America/Mexico_City" //NC3にないので変更//"US/Central"
- ),
- '_TZ_GMTM5' => array(
- __d('calendars', '(GMT-5:00) Eastern Time (US & Canada), Bogota, Lima, Quito'),
- -5.0,
- "America/New_York" //NC3にないので変更//"US/Eastern"
- ),
- '_TZ_GMTM4' => array(
- __d('calendars', '(GMT-4:00) Atlantic Time (Canada), Caracas, La Paz'),
- -4.0, "Atlantic/Bermuda"
- ),
- '_TZ_GMTM35' => array(
- __d('calendars', '(GMT-3:30) Newfoundland'),
- -3.5,
- "America/St_Johns" // NC3にないので//"Canada/Newfoundland"
- ),
- '_TZ_GMTM3' => array(
- __d('calendars', '(GMT-3:00) Brasilia, Buenos Aires, Georgetown'),
- -3.0,
- "America/Sao_Paulo" // NC3になかったので\//"Brazil/East"
- ),
- '_TZ_GMTM2' => array(
- __d('calendars', '(GMT-2:00) Mid-Atlantic'),
- -2.0, "Atlantic/South_Georgia"
- ),
- '_TZ_GMTM1' => array(
- __d('calendars', '(GMT-1:00) Azores, Cape Verde Islands'),
- -1.0, "Atlantic/Azores"
- ),
- '_TZ_GMT0' => array(
- __d('calendars', '(GMT) Greenwich Mean Time, London, Dublin, Lisbon, Casablanca, Monrovia'),
- 0.0, "UTC" // NC3になかったので//"Etc/Greenwich"
- ),
- '_TZ_GMTP1' => array(
- __d('calendars', '(GMT+1:00) Amsterdam, Berlin, Rome, Copenhagen, Brussels, Madrid, Paris'),
- 1.0, "Europe/Amsterdam"
- ),
- '_TZ_GMTP2' => array(
- __d('calendars', '(GMT+2:00) Athens, Istanbul, Minsk, Helsinki, Jerusalem, South Africa'),
- 2.0, "Europe/Athens"
- ),
- '_TZ_GMTP3' => array(
- __d('calendars', '(GMT+3:00) Baghdad, Kuwait, Riyadh, Moscow, St. Petersburg'),
- 3.0, "Asia/Baghdad"
- ),
- '_TZ_GMTP35' => array(__d('calendars', '(GMT+3:30) Tehran'), 3.5, "Asia/Tehran"),
- '_TZ_GMTP4' => array(
- __d('calendars', '(GMT+4:00) Abu Dhabi, Muscat, Baku, Tbilisi'),
- 4.0, "Asia/Muscat"
- ),
- '_TZ_GMTP45' => array(
- __d('calendars', '(GMT+4:30) Kabul'),
- 4.5, "Asia/Kabul"
- ),
- '_TZ_GMTP5' => array(
- __d('calendars', '(GMT+5:00) Ekaterinburg, Islamabad, Karachi, Tashkent'),
- 5.0, "Asia/Karachi"
- ),
- '_TZ_GMTP55' => array(
- __d('calendars', '(GMT+5:30) Bombay, Calcutta, Madras, New Delhi'),
- 5.5,
- "Asia/Kolkata" // NC3にないので変更した//"Asia/Calcutta"
- ),
- '_TZ_GMTP6' => array(
- __d('calendars', '(GMT+6:00) Almaty, Dhaka, Colombo'),
- 6.0, "Asia/Almaty"
- ),
- '_TZ_GMTP7' => array(
- __d('calendars', '(GMT+7:00) Bangkok, Hanoi, Jakarta'),
- 7.0, "Asia/Bangkok"
- ),
- '_TZ_GMTP8' => array(
- __d('calendars', '(GMT+8:00) Beijing, Perth, Singapore, Hong Kong, Urumqi, Taipei'),
- 8.0, "Asia/Singapore"
- ),
- '_TZ_GMTP9' => array(
- __d('calendars', '(GMT+9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk'),
- 9.0, "Asia/Tokyo"
- ),
- '_TZ_GMTP95' => array(
- __d('calendars', '(GMT+9:30) Adelaide, Darwin'),
- 9.5, "Australia/Adelaide"
- ),
- '_TZ_GMTP10' => array(
- __d('calendars', '(GMT+10:00) Brisbane, Canberra, Melbourne, Sydney, Guam,Vlasdiostok'),
- 10.0, "Australia/Brisbane"
- ),
- '_TZ_GMTP11' => array(
- __d('calendars', '(GMT+11:00) Magadan, Solomon Islands, New Caledonia'),
- 11.0, "Pacific/Guadalcanal" //"Etc/GMT-11"// NC3にないので変更した。
- ),
- '_TZ_GMTP12' => array(
- __d('calendars', '(GMT+12:00) Auckland, Wellington, Fiji, Kamchatka, Marshall Island'),
- 12.0, "Pacific/Auckland"
- ),
- );
- return $tzTbl;
- }
-}
diff --git a/Config/Migration/1496991065_remove_event_content.php b/Config/Migration/1496991065_remove_event_content.php
deleted file mode 100644
index 8b66cc5..0000000
--- a/Config/Migration/1496991065_remove_event_content.php
+++ /dev/null
@@ -1,73 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-
-/**
- * Class RemoveEventContent
- */
-class RemoveEventContent extends CakeMigration {
-
-/**
- * Migration description
- *
- * @var string
- */
- public $description = 'remove_event_content';
-
-/**
- * Actions to be performed
- *
- * @var array $migration
- */
- public $migration = array(
- 'up' => array(
- 'drop_table' => array(
- 'reservation_event_contents'
- ),
- ),
- 'down' => array(
- 'create_table' => array(
- 'reservation_event_contents' => array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'model' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'content_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'CONTENTキー', 'charset' => 'utf8'),
- 'reservation_event_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB'),
- ),
- ),
- ),
- );
-
-/**
- * Before migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function before($direction) {
- return true;
- }
-
-/**
- * After migration callback
- *
- * @param string $direction Direction of migration process (up or down)
- * @return bool Should process continue
- */
- public function after($direction) {
- return true;
- }
-}
diff --git a/Config/Schema/empty b/Config/Schema/empty
new file mode 100644
index 0000000..e69de29
diff --git a/Config/Schema/schema.php b/Config/Schema/schema.php
deleted file mode 100644
index ad7f05d..0000000
--- a/Config/Schema/schema.php
+++ /dev/null
@@ -1,310 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * Schema file
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Config\Schema
- * @SuppressWarnings(PHPMD.LongVariable)
- */
-class ReservationsSchema extends CakeSchema {
-
-/**
- * Database connection
- *
- * @var string
- */
- public $connection = 'master';
-
-/**
- * before
- *
- * @param array $event event
- * @return bool
- */
- public function before($event = array()) {
- return true;
- }
-
-/**
- * after
- *
- * @param array $event event
- * @return void
- */
- public function after($event = array()) {
- }
-
-/**
- * reservation_event_share_users table
- *
- * @var array
- */
- public $reservation_event_share_users = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'reservation_event_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'share_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '情報共有者'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * reservation_events table
- *
- * @var array
- */
- public $reservation_events = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'reservation_rrule_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'イベントKey', 'charset' => 'utf8'),
- 'room_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'comment' => 'ルームID'),
- 'language_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 6, 'unsigned' => false, 'comment' => '言語ID'),
- 'is_origin' => array('type' => 'boolean', 'null' => false, 'default' => '1', 'comment' => 'オリジナルかどうか'),
- 'is_translation' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '翻訳したかどうか'),
- 'is_original_copy' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'オリジナルのコピー。言語を新たに追加したときに使用する'),
- 'target_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '対象者'),
- 'title' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'タイトル', 'charset' => 'utf8'),
- 'title_icon' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'タイトル アイコン', 'charset' => 'utf8'),
- 'location' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '場所', 'charset' => 'utf8'),
- 'contact' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '連絡先', 'charset' => 'utf8'),
- 'description' => array('type' => 'text', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '詳細', 'charset' => 'utf8'),
- 'is_allday' => array('type' => 'boolean', 'null' => true, 'default' => '1', 'comment' => '終日かどうか | 0:終日ではない | 1:終日'),
- 'start_date' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 8, 'collate' => 'utf8_general_ci', 'comment' => '開始日 (YYYYMMDD形式)', 'charset' => 'utf8'),
- 'start_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 6, 'collate' => 'utf8_general_ci', 'comment' => '開始時刻 (hhmmss形式)', 'charset' => 'utf8'),
- 'dtstart' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'comment' => '開始日時 (YYYYMMDDhhmmss) iReservationのDTDSTARTからTとZを外したもの', 'charset' => 'utf8'),
- 'end_date' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 8, 'collate' => 'utf8_general_ci', 'comment' => '終了日 (YYYYMMDD形式)', 'charset' => 'utf8'),
- 'end_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 6, 'collate' => 'utf8_general_ci', 'comment' => '終了時刻 (hhmmss形式)', 'charset' => 'utf8'),
- 'dtend' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'comment' => '終了日時 (YYYYMMDDhhmmss形式) iReservationのDTENDからTとZをはずしたもの', 'charset' => 'utf8'),
- 'timezone_offset' => array('type' => 'float', 'null' => false, 'default' => '0.0', 'length' => '3,1', 'unsigned' => false, 'comment' => 'タイムゾーンオフセット-12.0~+12.0'),
- 'timezone' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'location_key' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'status' => array('type' => 'integer', 'null' => false, 'default' => null, 'length' => 4, 'unsigned' => false, 'comment' => '公開状況 1:公開中>、2:公 開申請中、3:下書き中、4:差し戻し'),
- 'is_active' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'アクティブなコンテンツかどうか 0:アクティブでない 1:アクティブ'),
- 'is_latest' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '最新コンテンツかどうか 0:最新でない 1:最新'),
- 'recurrence_event_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false, 'comment' => '1以上のとき、再発(置換)イベントidを指す。VCALENDERのRECURRENCE-ID機能実現のための項目'),
- 'exception_event_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false, 'comment' => '1以上のとき、例外(削除)イベントidを指す。vreservationの EXDATE機能実現のための項目'),
- 'is_enable_mail' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'イベント前にメール通知するかどうか 0:通知しない 1:通知する'),
- 'email_send_timing' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false, 'comment' => 'イベントN分前メール通知の値N。単位は分。'),
- 'calendar_key' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * reservation_frame_settings table
- *
- * @var array
- */
- public $reservation_frame_settings = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'frame_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'フレームKey', 'charset' => 'utf8'),
- 'display_type' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 4, 'unsigned' => false, 'comment' => '表示方法'),
- 'location_key' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '最初に表示する施設', 'charset' => 'utf8'),
- 'category_id' => array('type' => 'integer', 'null' => true, 'default' => null, 'length' => 10, 'unsigned' => true, 'comment' => '最初に表示する施設カテゴリID'),
- 'display_timeframe' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '時間枠表時'),
- 'display_start_time_type' => array('type' => 'integer', 'null' => true, 'default' => '0', 'length' => 4, 'unsigned' => false, 'comment' => '0:閲覧時刻により変動 1:固定'),
- 'start_pos' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 4, 'unsigned' => false, 'comment' => '開始位置'),
- 'display_count' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 4, 'unsigned' => false, 'comment' => '表示日数'),
- 'is_myroom' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'プライベートルームの施設予約コンポーネント(イベント等)を表示するかどうか 0:表示しない 1:表示する'),
- 'is_select_room' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '指定したルームのみ表示するかどうか 0:表示しない 1:表示する'),
- 'room_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'comment' => 'ルームID'),
- 'timeline_base_time' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'comment' => '表示開始時'),
- 'display_interval' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false, 'comment' => '表示幅(時間)'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * reservation_location_reservable
- *
- * @var array
- */
- public $reservation_location_reservable = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'location_key' => array('type' => 'string', 'null' => false, 'default' => null, 'key' => 'index', 'collate' => 'utf8_general_ci', 'comment' => '施設キー', 'charset' => 'utf8'),
- 'role_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'ロールキー', 'charset' => 'utf8'),
- 'room_id' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'value' => array('type' => 'boolean', 'null' => true, 'default' => null),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- 'location_key' => array('column' => 'location_key', 'unique' => 0)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * reservation_locations table
- *
- * @var array
- */
- public $reservation_locations = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => true, 'key' => 'primary'),
- 'key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'language_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'is_translation' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '翻訳したかどうか'),
- 'is_origin' => array('type' => 'boolean', 'null' => false, 'default' => '1', 'comment' => 'オリジナルかどうか'),
- 'is_original_copy' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'オリジナルのコピー。言語を新たに追加したときに使用する'),
- 'category_id' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => true, 'key' => 'index'),
- 'location_name' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '施設名', 'charset' => 'utf8'),
- 'detail' => array('type' => 'text', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'add_authority' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'time_table' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 32, 'collate' => 'utf8_general_ci', 'comment' => '利用可能な曜日', 'charset' => 'utf8'),
- 'start_time' => array('type' => 'datetime', 'null' => false, 'default' => null),
- 'end_time' => array('type' => 'datetime', 'null' => false, 'default' => null),
- 'timezone' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'use_private' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'use_auth_flag' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'use_all_rooms' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'use_workflow' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'weight' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => true),
- 'contact' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- 'category_id' => array('column' => array('category_id', 'weight'), 'unique' => 0)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * reservation_locations_approval_users
- *
- * @var array
- */
- public $reservation_locations_approval_users = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'location_key' => array('type' => 'string', 'null' => false, 'default' => '0', 'collate' => 'utf8_general_ci', 'comment' => '施設キー', 'charset' => 'utf8'),
- 'user_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false, 'comment' => '承認者'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * locations rooms relation
- *
- * @var array
- */
- public $reservation_locations_rooms = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'reservation_location_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'room_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'index'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- 'room_id' => array('column' => 'room_id', 'unique' => 0)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * reservation_rrules table
- *
- * @var array
- */
- public $reservation_rrules = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'reservation_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '施設予約コンポーネント(イベント等)繰返し規則 キー', 'charset' => 'utf8'),
- 'name' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '施設予約コンポーネント(イベント等)繰返し規則名称', 'charset' => 'utf8'),
- 'rrule' => array('type' => 'text', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '繰返し規則', 'charset' => 'utf8'),
- 'ireservation_uid' => array('type' => 'text', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'iReservationUIDの元となる情報。rrule分割元と分割先の関連性を記録する。', 'charset' => 'utf8'),
- 'ireservation_comp_name' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'iReservation仕様のコンポーネント名 (vevent,vtodo,vjournal 等)', 'charset' => 'utf8'),
- 'room_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false, 'comment' => 'ルームID'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * time frames
- *
- * @var array
- */
- public $reservation_timeframes = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'language_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'is_translation' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '翻訳したかどうか'),
- 'is_origin' => array('type' => 'boolean', 'null' => false, 'default' => '1', 'comment' => 'オリジナルかどうか'),
- 'is_original_copy' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'オリジナルのコピー。言語を新たに追加したときに使用する'),
- 'title' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'start_time' => array('type' => 'time', 'null' => false, 'default' => null),
- 'end_time' => array('type' => 'time', 'null' => false, 'default' => null),
- 'timezone' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'color' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 16, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * reservations table
- *
- * @var array
- */
- public $reservations = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'block_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'Block キー', 'charset' => 'utf8'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-}
diff --git a/Config/routes.php b/Config/routes.php
index afef6d2..2079879 100644
--- a/Config/routes.php
+++ b/Config/routes.php
@@ -1,6 +1,6 @@
* @author Shohei Nakajima
diff --git a/Console/Command/Task/empty b/Console/Command/Task/empty
new file mode 100644
index 0000000..e69de29
diff --git a/Console/Templates/empty b/Console/Templates/empty
new file mode 100644
index 0000000..e69de29
diff --git a/Controller/Component/ReservationPermissionComponent.php b/Controller/Component/ReservationPermissionComponent.php
deleted file mode 100644
index f2b5367..0000000
--- a/Controller/Component/ReservationPermissionComponent.php
+++ /dev/null
@@ -1,107 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('Component', 'Controller');
-App::uses('NetCommonsTime', 'NetCommons.Utility');
-App::uses('Block', 'Blocks.Model');
-App::uses('ReservationPermissiveRooms', 'Reservations.Utility');
-App::uses('ReservationEventPermissionPolicy', 'Reservations.Policy');
-
-/**
- * ReservationPermission Component
- *
- * リクエストされた予約へのアクセス許可を、
- * 指定された予約の対象空間、共有人物、ステータス、
- * および閲覧者の権限から判定します。
- *
- * @author Allcreator
- * @package Reservations\Reservations\Controller\Component
- */
-class ReservationPermissionComponent extends Component {
-
-/**
- * Called after the Controller::beforeFilter() and before the controller action
- *
- * @param Controller $controller Controller with components to startup
- * @return void
- * @throws ForbiddenException
- */
- public function startup(Controller $controller) {
- $this->controller = $controller;
-
- $permissionPolicy = new ReservationEventPermissionPolicy($this->controller->eventData);
- // add -> どこか一つでもcreatableな空間を持っている人なら
- // view -> 対象の空間に参加しているなら
- // ただし、対象空間がプライベートのときに限り、共有者となっているなら
- // edit -> 対象空間での編集権限を持っているか、対象予定の作成者なら
- // delete -> 対象空間での編集権限を持っているか、対象予定の作成者なら
-
- // add いずれかの施設に予約できれば
- // view 公開されてるルームのアクセス権あるか、その施設の承認者なら
- // edit 予約した本人か 承認者
- // delete 予約した本人か 承認者
- $userId = Current::read('User.id');
- switch ($controller->action) {
- case 'add':
- if ($this->_canCreate()) {
- return;
- }
- break;
- case 'edit':
- case 'delete':
- if ($permissionPolicy->canEdit($userId)) {
- return;
- }
- //if ($this->_canEditEvent()) {
- // return;
- //}
- break;
- case 'view':
- if ($permissionPolicy->canRead($userId)) {
- return;
- }
- break;
- }
- // チェックで引っかかってしまったらForbidden
- throw new ForbiddenException();
- }
-
-/**
- * 予約可能な施設がひとつでもあるか
- *
- * @return bool
- */
- protected function _canCreate() {
- $locations = $this->controller->ReservationLocation->getReservableLocations();
- if (count($locations)) {
- // 予約可能な施設がひとつでもあればadd権限あり
- return true;
- }
- return false;
- //$rooms = ReservationPermissiveRooms::getCreatableRoomIdList();
- //if (empty($rooms)) {
- // return false;
- //}
- //return true;
- }
-/**
- * 対象のイベントは存在するか
- *
- * @return bool
- */
- protected function _existEvent() {
- if (empty($this->controller->eventData)) {
- return false;
- }
- return true;
- }
-
-}
diff --git a/Controller/Component/ReservationSelectRoomComponent.php b/Controller/Component/ReservationSelectRoomComponent.php
deleted file mode 100644
index ebf3849..0000000
--- a/Controller/Component/ReservationSelectRoomComponent.php
+++ /dev/null
@@ -1,87 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-App::uses('Component', 'Controller');
-
-/**
- * Class ReservationSelectRoomComponent
- */
-class ReservationSelectRoomComponent extends Component {
-
-/**
- * @var ReservationLocationsRoom 施設の公開対象ルームモデル
- */
- private $__reservationLocationsRoom;
-
-/**
- * initialize
- *
- * @param Controller $controller コントローラ
- * @return void
- */
- public function initialize(Controller $controller) {
- parent::initialize($controller);
- $this->__reservationLocationsRoom = ClassRegistry::init('Reservations.ReservationLocationsRoom');
- }
-
-/**
- * __getSelectedRoom
- *
- * @param array $defaultRooms デフォルトで表示するルームリスト
- * @param int $selectedRoomId 選択されたルームID
- * @return array
- */
- public function getSelectedRoom(array $defaultRooms, int $selectedRoomId) {
- $roomIds = array_column($defaultRooms, 'roomId');
- $arrayIndex = array_search($selectedRoomId, $roomIds);
- $selectedRoom = $defaultRooms[$arrayIndex];
- return $selectedRoom;
- }
-
-/**
- * __getDefaultPublishableRooms
- *
- * @param array $locations 施設リスト
- * @param string|null $defaultLocationKey 選択された施設のキー
- * @param string|int $userId ユーザID
- * @return array
- */
- public function getDefaultPublishableRooms(
- array $locations,
- $defaultLocationKey,
- $userId
- ) : array {
- if ($defaultLocationKey) {
- $locationKeys = array_column(array_column($locations, 'ReservationLocation'), 'key');
- $keyPosition = array_search($defaultLocationKey, $locationKeys);
- $defaultLocation = $locations[$keyPosition];
- } else {
- $defaultLocation = current($locations);
- }
-
- // デフォルト施設だけ公開対象ルーム情報を取得しておく
- $publishableRooms = $this->__reservationLocationsRoom->getReservableRoomsByLocationAndUserId(
- $defaultLocation,
- $userId
- );
- $defaultRooms = [];
- $notSpecified = [
- 'roomId' => 0,
- 'name' => __d('reservations', '-- not specified --')
- ];
- $defaultRooms[] = $notSpecified;
- foreach ($publishableRooms as $room) {
- $defaultRooms[] = [
- 'roomId' => $room['Room']['id'],
- 'name' => $room['RoomsLanguage'][0]['name']
- ];
- }
- return $defaultRooms;
- }
-}
\ No newline at end of file
diff --git a/Controller/Component/ReservationSettingsComponent.php b/Controller/Component/ReservationSettingsComponent.php
deleted file mode 100644
index 50f7e83..0000000
--- a/Controller/Component/ReservationSettingsComponent.php
+++ /dev/null
@@ -1,177 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-App::uses('Component', 'Controller');
-App::uses('BlockTabsHelper', 'Blocks.View/Helper');
-
-/**
- * Class ReservationSettingsComponent
- */
-class ReservationSettingsComponent extends Component {
-
-/**
- * タブの定数(表示方法変更)
- *
- * @var string
- */
- const MAIN_TAB_FRAME_SETTING = BlockTabsHelper::MAIN_TAB_FRAME_SETTING;
-
-/**
- * タブの定数(施設設定)
- *
- * @var string
- */
- const MAIN_TAB_LOCATION_SETTING = 'location_settings';
-
-/**
- * タブの定数(施設カテゴリ設定)
- *
- * @var string
- */
- const MAIN_TAB_CATEGORY_SETTING = 'category_settings';
-
-/**
- * タブの定数(時間枠設定)
- *
- * @var string
- */
- const MAIN_TAB_TIMEFRAME_SETTING = 'timeframe_settings';
-
-/**
- * タブの定数(予約のインポート)
- *
- * @var string
- */
- const MAIN_TAB_IMPORT_RESERVATIONS = 'import_reservations';
-
-/**
- * タブの定数(メール設定)
- *
- * @var string
- */
- const MAIN_TAB_MAIL_SETTING = BlockTabsHelper::MAIN_TAB_MAIL_SETTING;
-
-/**
- * パーミッション定数(サイト管理者)
- *
- * @var string
- */
- const PERMISSION_LOCATION_EDITABLE = 'location_editable';
-
-/**
- * パーミッション定数(ページ設定できる権限)
- *
- * @var string
- */
- const PERMISSION_ROOM_EDITABLE = 'room_editable';
-
-/**
- * パーミッション
- *
- *
- * @var string value=site_editable or page_editable
- */
- public $permission = self::PERMISSION_LOCATION_EDITABLE;
-
-/**
- * BlockTabsHelper設定
- *
- * @var array
- */
- public $blockTabs = array();
-
-/**
- * BlockTabsHelper設定
- *
- * @var array
- */
- protected $_adminBlockTabs = array(
- //画面上部のタブ設定
- 'mainTabs' => array(
- self::MAIN_TAB_CATEGORY_SETTING => [ //施設カテゴリ設定
- 'label' => ['reservations', 'Location category setting'],
- 'url' => array('controller' => 'reservation_location_categories', 'action' => 'edit')
- ],
- self::MAIN_TAB_LOCATION_SETTING => array( //施設設定
- 'label' => ['reservations', 'Location setting'],
- 'url' => array('controller' => 'reservation_locations', 'action' => 'index')
- ),
- self::MAIN_TAB_TIMEFRAME_SETTING => array( //時間枠設定
- 'label' => ['reservations', 'TimeFrame setting'],
- 'url' => array('controller' => 'reservation_timeframes', 'action' => 'index')
- ),
- self::MAIN_TAB_IMPORT_RESERVATIONS => array( //予約のインポート
- 'label' => ['reservations', 'Import Reservations'],
- 'url' => array('controller' => 'reservation_import', 'action' => 'edit')
- ),
- self::MAIN_TAB_FRAME_SETTING => array( //表示設定変更
- 'url' => array('controller' => 'reservation_frame_settings')
- ),
- self::MAIN_TAB_MAIL_SETTING => array( //メール設定
- 'url' => array('controller' => 'reservation_mail_settings'),
- ),
- ),
- 'mainTabsOrder' => [
- self::MAIN_TAB_FRAME_SETTING,
- self::MAIN_TAB_LOCATION_SETTING,
- self::MAIN_TAB_CATEGORY_SETTING,
- self::MAIN_TAB_TIMEFRAME_SETTING,
- self::MAIN_TAB_MAIL_SETTING,
- self::MAIN_TAB_IMPORT_RESERVATIONS
- ],
- );
-
-/**
- * BlockTabsHelper設定
- *
- * @var array
- */
- protected $_generalBlockTabs = array(
- //画面上部のタブ設定
- 'mainTabs' => array(
- self::MAIN_TAB_FRAME_SETTING => array( //表示設定変更
- 'url' => array('controller' => 'reservation_frame_settings')
- ),
- ),
- 'mainTabsOrder' => [
- self::MAIN_TAB_FRAME_SETTING,
- ],
- );
-
-/**
- * Called after the Controller::beforeFilter() and before the controller action
- *
- * @param Controller $controller Controller with components to startup
- * @return void
- * @throws ForbiddenException
- */
- public function startup(Controller $controller) {
- //サイト管理者のみ編集可=ページ編集権限があり、サイト管理が使えるユーザ
- $isAdmin = Current::permission('page_editable') && Current::allowSystemPlugin('site_manager');
- $controller->set('isAdmin', $isAdmin);
-
- if ($isAdmin) {
- $this->blockTabs = $this->_adminBlockTabs;
- } else {
- $this->blockTabs = $this->_generalBlockTabs;
- }
-
- if ($this->permission === self::PERMISSION_LOCATION_EDITABLE &&
- $controller->viewVars['isAdmin'] ||
- $this->permission === self::PERMISSION_ROOM_EDITABLE &&
- Current::permission('page_editable')) {
- $controller->helpers['Blocks.BlockTabs'] = $this->blockTabs;
- return;
- }
-
- throw new ForbiddenException();
- }
-
-}
diff --git a/Controller/Component/ReservationWorksComponent.php b/Controller/Component/ReservationWorksComponent.php
deleted file mode 100644
index 9b0f421..0000000
--- a/Controller/Component/ReservationWorksComponent.php
+++ /dev/null
@@ -1,209 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('Component', 'Controller');
-
-/**
- * ReservationWorksComponent
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Controller
- */
-class ReservationWorksComponent extends Component {
-
-/**
- * Called after the Controller::beforeFilter() and before the controller action
- *
- * @param Controller $controller Controller with components to startup
- * @return void
- * @throws ForbiddenException
- */
- public function startup(Controller $controller) {
- $this->controller = $controller;
- }
-
-/**
- * getDateTimeParam
- *
- * オプション取得
- *
- * @param array $params $this->request->query配列が渡される
- * @return array 年月日時分秒配列
- */
- public function getDateTimeParam($params) {
- $userTz = (new NetCommonsTime())->getUserTimezone();
- $date = new DateTime('now', (new DateTimeZone($userTz)));
-
- $enableTime = true;
- $year = $date->format('Y');
- $month = $date->format('m');
- $day = $date->format('d');
- $hour = $date->format('H');
- $minute = $date->format('i');
- $second = $date->format('s');
-
- if (isset($params['year'])) {
- $year = $params['year'];
- }
- if (isset($params['month'])) {
- $month = $params['month'];
- }
- if (isset($params['day'])) {
- $day = $params['day'];
- }
- if (isset($params['hour'])) {
- $hour = $params['hour'];
- $minute = '00';
- $second = '00';
- $enableTime = true;
- }
- return array($year, $month, $day, $hour, $minute, $second, $enableTime);
- }
-
-/**
- * getOptions
- *
- * オプション取得
- *
- * @return array オプション配列
- */
- public function getOptions() {
- $options = array(
- 'controller' => 'reservations',
- 'action' => 'index',
- 'frame_id' => Current::read('Frame.id'),
- );
- //if (isset($this->request->data['return_style']) && $this->request->data['return_style']) { 未使用
- // $options['style'] = $this->request->data['return_style'];
- //}
- //if (isset($this->request->data['return_sort']) && $this->request->data['return_sort']) {
- // $options['sort'] = $this->request->data['return_sort'];
- //}
- return $options;
- }
-
-/**
- * setCapForView2RequestData
- *
- * 表示用配列から$this->request->dataへの反映
- *
- * @param array $capForView 表示用のcap(ReservationActionPlan)情報
- * @param array $data $this->request->dataの配列を受領する。
- * @return array 各種値を設定した$this->request->data配列を返す。
- */
- public function setCapForView2RequestData($capForView, $data) {
- foreach ($capForView['ReservationActionPlan'] as $item => $val) {
- if ($item === 'FREQ') {
- $this->__setFreqData2RequestData($val, $data);
- continue;
- }
- if ($item === 'TERM') {
- $this->__setTermData2RequestData($val, $data);
- continue;
- }
-
- //FREQ,TERM以外
- if (isset($data['ReservationActionPlan'][$item])) {
- //CakeLog::debug("DBG: item[$item]はdata[ReservationActionPlan]に有り。値は[" .
- // serialize($data['ReservationActionPlan'][$item]) . "]");
- } else {
- $data['ReservationActionPlan'][$item] = $val;
- //CakeLog::debug("DBG: item[" . $item .
- // "]はrequest_data[ReservationActionPlan]に無し。よって、capForView値[" .
- // serialize($val) . "]を代入");
- }
- }
-
- if (isset($data['GroupsUser'])) {
- //CakeLog::debug("DBG: data[GroupsUser]は有り。値は[" .
- // serialize($data['GroupsUser']) . "]");
- } else {
- $data['GroupsUser'] = $capForView['GroupsUser'];
- //CakeLog::debug("DBG: data[GroupsUser]は無し。よって、capForView[GroupsUser][" .
- // serialize($capForView['GroupsUser']) . "]を代入");
- }
-
- //追加時、施設を設定する
- //事前にlocationsを取得しておくこと
- if (! isset($data['ReservationActionPlan']['location_key'])) {
- $locationKey = $this->controller->request->query('location_key');
- if (! $locationKey) {
- $locationKey = Hash::get(
- $this->controller->viewVars['locations'], '0.ReservationLocation.key'
- );
- }
- $data['ReservationActionPlan']['location_key'] = $locationKey;
- }
-
- return $data;
- }
-
-/**
- * __setFreqData2RequestData
- *
- * 表示用配列内のFREQ配列から$dataへの反映
- *
- * @param array $freq 繰り返し情報
- * @param array &$data data
- * @return void
- */
- private function __setFreqData2RequestData($freq, &$data) {
- $rrules = array(
- 'rrule_interval' => array('DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'),
- 'rrule_byday' => array('WEEKLY', 'MONTHLY', 'YEARLY'),
- 'rrule_bymonthday' => array('MONTHLY'),
- 'rrule_bymonth' => array('YEARLY'),
- );
-
- foreach ($rrules as $type => $units) { //ex. typeは rrule_byday
- if (!isset($data['ReservationActionPlan'][$type])) {
- $data['ReservationActionPlan'][$type] = array();
- }
- foreach ($units as $unit) { //ex.unitはMONTHLY
- if (!isset($data['ReservationActionPlan'][$type][$unit])) {
- list(, $typeKeyword) = explode('_', $type); //ex.rruleとbydayに分割
- $typeKeyword = strtoupper($typeKeyword); //ex.bydayをBYDAYに
-
- //$data['ReservationActionPlan']['rrule_byday']['MONTHLY'] =
- // $freq['MONTHLY']['BYDAY']; という形で代入
- $data['ReservationActionPlan'][$type][$unit] = $freq[$unit][$typeKeyword];
- }
- }
- }
- }
-
-/**
- * __setTermData2RequestData
- *
- * 表示用配列内のTERM配列から$dataへの反映
- *
- * @param array $term 期限情報
- * @param array &$data data
- * @return void
- */
- private function __setTermData2RequestData($term, &$data) {
- if (!isset($data['ReservationActionPlan']['rrule_term'])) {
- if ($term['REPEAT_COUNT']) {
- $data['ReservationActionPlan']['rrule_term'] = 'COUNT';
- }
- if ($term['REPEAT_UNTIL']) {
- $data['ReservationActionPlan']['rrule_term'] = 'UNTIL';
- }
- }
-
- if (!isset($data['ReservationActionPlan']['rrule_count'])) {
- $data['ReservationActionPlan']['rrule_count'] = $term['COUNT'];
- }
- if (!isset($data['ReservationActionPlan']['rrule_until'])) {
- $data['ReservationActionPlan']['rrule_until'] = $term['UNTIL'];
- }
- }
-}
diff --git a/Controller/Component/ReservationsComponent.php b/Controller/Component/ReservationsComponent.php
deleted file mode 100644
index 0be0144..0000000
--- a/Controller/Component/ReservationsComponent.php
+++ /dev/null
@@ -1,332 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('Component', 'Controller');
-App::uses('CalendarsComponent', 'Calendars.Controller/Component');
-
-/**
- * ReservationsComponent
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Controller
- */
-class ReservationsComponent extends CalendarsComponent {
-
-/**
- * 表示方法
- *
- * @var int
- */
- const RESERVATION_DISP_TYPE_CATEGORY_WEEKLY = '1'; //カテゴリー別 - 週表示
- const RESERVATION_DISP_TYPE_CATEGORY_DAILY = '2'; //カテゴリー別 - 日表示
- const RESERVATION_DISP_TYPE_LACATION_MONTHLY = '3'; //施設別 - 月表示
- const RESERVATION_DISP_TYPE_LACATION_WEEKLY = '4'; //施設別 - 週表示
-
-/**
- * 表示方法のデフォルト
- *
- * @var int
- */
- const RESERVATION_DISP_TYPE_DEFAULT = self::RESERVATION_DISP_TYPE_CATEGORY_WEEKLY;
-
-/**
- * 表示方法のリスト
- *
- * @var array
- */
- public static $reservationTypes = array(
- self::RESERVATION_DISP_TYPE_CATEGORY_WEEKLY,
- self::RESERVATION_DISP_TYPE_CATEGORY_DAILY,
- self::RESERVATION_DISP_TYPE_LACATION_MONTHLY,
- self::RESERVATION_DISP_TYPE_LACATION_WEEKLY,
- );
-
-/**
- * 画面スタイル(文字列)
- *
- * @var string
- */
- const RESERVATION_STYLE_CATEGORY_WEEKLY = 'weekly_by_category'; //カテゴリー別 - 週表示
- const RESERVATION_STYLE_CATEGORY_DAILY = 'daily_by_category'; //カテゴリー別 - 日表示
- const RESERVATION_STYLE_LACATION_MONTHLY = 'monthly_by_location'; //施設別 - 月表示
- const RESERVATION_STYLE_LACATION_WEEKLY = 'weekly_by_location'; //施設別 - 週表示
-
-/**
- * 画面スタイルのデフォルト値
- *
- * @var string
- */
- const RESERVATION_STYLE_DEFAULT = self::RESERVATION_STYLE_CATEGORY_WEEKLY;
-
-/**
- * 表示方法(カテゴリー別)のリスト
- *
- * @var array
- */
- public static $stylesByCategory = array(
- self::RESERVATION_STYLE_CATEGORY_WEEKLY,
- self::RESERVATION_STYLE_CATEGORY_DAILY,
- );
-
-/**
- * 表示方法(施設別)のリスト
- *
- * @var array
- */
- public static $stylesByLocation = array(
- self::RESERVATION_STYLE_LACATION_MONTHLY,
- self::RESERVATION_STYLE_LACATION_WEEKLY,
- );
-
-/**
- * スケジュール画面ソート(文字列)
- *
- * @var string
- */
- const CALENDAR_SCHEDULE_SORT_TIME = 'time'; //スケジュール(時間順)
- const CALENDAR_SCHEDULE_SORT_MEMBER = 'member'; //スケジュール(会員順)
-
-/**
- * 単一日画面タブ(文字列)
- *
- * @var string
- */
- const CALENDAR_DAILY_TAB_LIST = 'list'; //単一日画面タブ(一覧)
- const CALENDAR_DAILY_TAB_TIMELINE = 'timeline'; //単一日画面タブ(タイムライン)
-
-/**
- * 開始位置 (年用)
- *
- * @var int
- */
- const CALENDAR_START_POS_YEARLY_THIS_MONTH = 0; //今月
- const CALENDAR_START_POS_YEARLY_LAST_MONTH = 1; //前月
- const CALENDAR_START_POS_YEARLY_JANUARY = 2; //1月
- const CALENDAR_START_POS_YEARLY_APRIL = 3; //4月
-
-/**
- * 開始位置 (週用、スケジュール用)
- *
- * @var int
- */
- const CALENDAR_START_POS_WEEKLY_TODAY = 0; //今日
- const CALENDAR_START_POS_WEEKLY_YESTERDAY = 1; //前日
-
-/**
- * 表示日数(最小、最大)
- *
- * @var int
- */
- const CALENDAR_MIN_DISPLAY_DAY_COUNT = 1; //最小表示日数
- const CALENDAR_STANDARD_DISPLAY_DAY_COUNT = 3; //標準表示日数
- const CALENDAR_MAX_DISPLAY_DAY_COUNT = 14; //最大表示日数
-
-/**
- * 単一日タイムライン基準時
- *
- * @var int
- */
- const CALENDAR_TIMELINE_MIN_TIME = 0; //最小時刻(00:00)
- const CALENDAR_TIMELINE_DEFAULT_BASE_TIME = 8; //標準時刻(08:00)
- const CALENDAR_TIMELINE_MAX_TIME = 16; //最大時刻(16:00)
-
-/**
- * 施設予約承認
- *
- * @var int
- */
- const CALENDAR_USE_WORKFLOW = '1'; //使う
- const CALENDAR_NOT_USE_WORKFLOW = '0'; //使わない
-
-/**
- * 施設予約コンテンツ長さ
- *
- * @var int
- */
- const CALENDAR_VALIDATOR_TITLE_LEN = 100;
- const CALENDAR_VALIDATOR_TEXTAREA_LEN = 60000;
- const CALENDAR_VALIDATOR_GENERAL_VCHAR_LEN = 255;
-
-/**
- * メール通知タイミング
- *
- * @var int
- */
- //メール通知タイミング初期値(60分前=1時間前)
- const CALENDAR_DEFAULT_MAIL_SEND_TIME = 60;
-
-/**
- * xdebug.max_nesting_levelのカレンダ用上限値
- *
- * @var int
- */
- //xdebug.max_nesting_levelのカレンダ用上限値。但し、Xdebugが入っている環境の時だけ意味がある値。
- const CALENDAR_XDEBUG_MAX_NESTING_LEVEL = 1000;
-
-/**
- * 繰り返し上限
- *
- * @var string
- */
- const CALENDAR_RRULE_COUNT_MAX = '366';
- const CALENDAR_RRULE_COUNT_MIN = '1';
- const CALENDAR_RRULE_TERM_UNTIL_MAX = '2033-12-31 23:59:59';
- const CALENDAR_RRULE_TERM_UNTIL_MIN = '2001-01-01 00:00:00';
- const CALENDAR_RRULE_TERM_UNTIL_TM_MAX = 2019686399;
- const CALENDAR_RRULE_TERM_UNTIL_TM_MIN = 978307200;
- const CALENDAR_RRULE_TERM_UNTIL_YEAR_MAX = 2033;
- const CALENDAR_RRULE_TERM_UNTIL_YEAR_MIN = 2001;
-
-/**
- * 繰返し周期
- *
- * @var string
- */
- const CALENDAR_REPEAT_FREQ_DAILY = 'DAILY';
- const CALENDAR_REPEAT_FREQ_WEEKLY = 'WEEKLY';
- const CALENDAR_REPEAT_FREQ_MONTHLY = 'MONTHLY';
- const CALENDAR_REPEAT_FREQ_YEARLY = 'YEARLY';
-
-/**
- * 繰返し周期(日単位)の日にち間隔
- *
- * @var string
- */
- const CALENDAR_RRULE_INTERVAL_DAILY_MIN = 1; //最小:1日おき
- const CALENDAR_RRULE_INTERVAL_DAILY_MAX = 6; //最大:6日おき
-
-/**
- * 繰返し周期(週単位)の週の間隔
- *
- * @var string
- */
- const CALENDAR_RRULE_INTERVAL_WEEKLY_MIN = 1; //最小:1週おき
- const CALENDAR_RRULE_INTERVAL_WEEKLY_MAX = 6; //最大:6週おき
-
-/**
- * 繰返し周期(年単位)の年の間隔
- *
- * @var string
- */
- const CALENDAR_RRULE_INTERVAL_YEARLY_MIN = 1; //最小:1年おき
- const CALENDAR_RRULE_INTERVAL_YEARLY_MAX = 12; //最大:12年おき
-
-/**
- * 曜日
- *
- * @var string
- */
- const CALENDAR_REPEAT_WDAY = 'SU|MO|TU|WE|TH|FR|SA';
-
-/**
- * 繰返し周期(月単位)の月の間隔
- *
- * @var string
- */
- const CALENDAR_RRULE_INTERVAL_MONTHLY_MIN = 1; //最小:1ヶ月おき
- const CALENDAR_RRULE_INTERVAL_MONTHLY_MAX = 11; //最大:11ヶ月おき
-
-/**
- * 繰返しの終了
- *
- * @var string
- */
- const CALENDAR_RRULE_TERM_COUNT = 'COUNT';
- const CALENDAR_RRULE_TERM_UNTIL = 'UNTIL';
-
-/**
- * 繰返しエラー発生キーワード
- *
- * @var string
- */
- const CALENDAR_RRULE_ERROR_HAPPEND = 'reservation_rrule_error_happend';
-
-/**
- * 繰返しの区切り文字
- *
- * @var string
- */
- const CALENDAR_RRULE_PAUSE = ',';
-
-/**
- * フォーマット
- *
- * @var string
- */
- const CALENDAR_DATE_FORMAT = 'Y/m/d';
-
-
-/**
- * 保存時にデータに負荷する拡張情報の配列キー
- *
- * @val string
- */
- const ADDITIONAL = 'CALENDAR_ADDITIONAL';
-
-/**
- * 予定編集のモード
- *
- * @val string
- */
- const PLAN_ADD = 'add';
- const PLAN_EDIT = 'edit';
-
-/**
- * 「仲間の予定」仮想ルームID
- * @val int
- */
- const FRIEND_PLAN_VIRTUAL_ROOM_ID = 2147483647; //符号付32bit整数のHigh-Valueとする
-
-/**
- * 施設予約タイムゾーン情報の要素の位置
- *
- * @val integer
- */
- const CALENDAR_TIMEZONE_AREA_NAME = 0;
- const CALENDAR_TIMEZONE_VAL = 1;
- const CALENDAR_TIMEZONE_ID = 2;
-
- //protected static $_tzTbl = null;
-
-/**
- * getTzTbl
- *
- * カレンダータイムゾーン情報配列取得関数
- *
- * @return array カレンダータイムゾーン情報配列取得関数
- */
- //public static function getTzTbl() {
- // if (self::$_tzTbl == null){
- // self::$_tzTbl = [];
- // $SiteSetting = new SiteSetting();
- // $SiteSetting->prepare();
- // $originTimezone = date_default_timezone_get();
- // $baseTime = time();
- // foreach ($SiteSetting->defaultTimezones as $timezone => $timezoneName) {
- // date_default_timezone_set($timezone);
- // while (date('I', $baseTime)) {
- // //サマータイム中
- // $baseTime += 30 * 24 * 60 * 60; // 30日ずつずらして、サマータイムぬけるまで調整
- // }
- // $offsetSec = date('Z', $baseTime);
- // $offset = $offsetSec / 3600;
- // self::$_tzTbl[$timezone] = [
- // $timezoneName,
- // $offset,
- // $timezone
- // ];
- // }
- // // UTCに戻す
- // date_default_timezone_set($originTimezone);
- // }
- // return self::$_tzTbl;
- //}
-}
diff --git a/Controller/Component/ReservationsDailyComponent.php b/Controller/Component/ReservationsDailyComponent.php
deleted file mode 100644
index cecf80e..0000000
--- a/Controller/Component/ReservationsDailyComponent.php
+++ /dev/null
@@ -1,24 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('Component', 'Controller');
-
-/**
- * ReservationsComponent
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Controller
- */
-class ReservationsDailyComponent extends Component {
-
-
-
-}
diff --git a/Controller/Component/empty b/Controller/Component/empty
new file mode 100644
index 0000000..e69de29
diff --git a/Controller/ReservationFrameSettingsController.php b/Controller/ReservationFrameSettingsController.php
deleted file mode 100644
index f9441ac..0000000
--- a/Controller/ReservationFrameSettingsController.php
+++ /dev/null
@@ -1,160 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppController', 'Reservations.Controller');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component');
-App::uses('ReservationSettingsComponent', 'Reservations.Controller/Component');
-
-/**
- * 表示方法変更 Controller
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\Controller
- */
-class ReservationFrameSettingsController extends ReservationsAppController {
-
-/**
- * layout
- *
- * @var array
- */
- public $layout = 'NetCommons.setting'; //PageLayoutHelperのafterRender()の中で利用。
- //
- //$layoutに'NetCommons.setting'があると
- //「Frame設定も含めたコンテンツElement」として
- //ng-controller='FrameSettingsController'属性
- //ng-init=initialize(Frame情報)属性が付与される。
- //
- //'NetCommons.setting'がないと、普通の
- //「コンテンツElement」として扱われる。
- //
- //ちなみに、使用されるLayoutは、Pages.default
- //
-
-/**
- * use components
- *
- * @var array
- */
- public $components = array(
- 'Categories.Categories',
- 'Reservations.ReservationSettings' => [ //NetCommons.Permissionは使わず、独自でやる
- 'permission' => ReservationSettingsComponent::PERMISSION_ROOM_EDITABLE
- ],
- );
-
-/**
- * use helpers
- *
- * @var array
- */
- public $helpers = array(
- 'Blocks.BlockTabs', // 設定内容はReservationSettingsComponentにまとめた
- );
-
-/**
- * uses model
- */
- public $uses = array(
- 'Reservations.Reservation',
- 'Reservations.ReservationFrameSetting',
- 'Reservations.ReservationLocation',
- 'Reservations.ReservationTimeframe'
- );
-
-/**
- * frame display type options
- */
- protected $_displayTypeOptions;
-
-/**
- * Constructor. Binds the model's database table to the object.
- *
- * @param bool|int|string|array $id Set this ID for this model on startup,
- * can also be an array of options, see above.
- * @param string $table Name of database table to use.
- * @param string $ds DataSource connection name.
- * @see Model::__construct()
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- */
- public function __construct($id = false, $table = null, $ds = null) {
- parent::__construct($id, $table, $ds);
- $this->_displayTypeOptions = array(
- ReservationsComponent::RESERVATION_DISP_TYPE_CATEGORY_WEEKLY =>
- __d('reservations', 'Weekly Reservation (Category)'),
- ReservationsComponent::RESERVATION_DISP_TYPE_CATEGORY_DAILY =>
- __d('reservations', 'Daily Reservation (Category)'),
- ReservationsComponent::RESERVATION_DISP_TYPE_LACATION_MONTHLY =>
- __d('reservations', 'Monthly Reservation (Location)'),
- ReservationsComponent::RESERVATION_DISP_TYPE_LACATION_WEEKLY =>
- __d('reservations', 'Weekly Reservation (Location)'),
- );
- }
-
-/**
- * beforeFilter
- *
- * @return void
- */
- public function beforeFilter() {
- parent::beforeFilter();
- $this->Auth->deny('index');
- }
-
-/**
- * edit
- *
- * @return void
- */
- public function edit() {
- $locations = $this->ReservationLocation->getLocations();
- if (! $locations) {
- $this->view = 'nolocation';
- return;
- }
-
- // openTextの追加
- $openText = new ReservationLocationOpenText();
- $locations = $openText->openTextAdd($locations);
-
- $this->set('locations', $locations);
-
- // 設定情報取り出し
- $setting = $this->ReservationFrameSetting->getFrameSetting();
- $settingId = $setting['ReservationFrameSetting']['id'];
- $this->set('settingId', $settingId);
-
- if ($this->request->is(['put', 'post'])) {
- //登録(PUT)処理
- $data = $this->request->data;
-
- $displayType = (int)$data['ReservationFrameSetting']['display_type'];
- $data['ReservationFrameSetting']['display_type'] = $displayType;
- if ($this->ReservationFrameSetting->saveFrameSetting($data)) {
- $this->redirect(NetCommonsUrl::backToPageUrl(true));
- return;
- }
- $this->NetCommons->handleValidationError($this->ReservationFrameSetting->validationErrors);
- //NC3用のvalidateErrorHandler.エラー時、非ajaxならSession->setFalsh()する.又は.(ajaxの時は)jsonを返す.
- } else {
- $this->request->data['ReservationFrameSetting'] = $setting['ReservationFrameSetting'];
- }
-
- // フレーム情報
- $this->request->data['Frame'] = Current::read('Frame');
-
- // 施設予約表示種別
- $this->set('displayTypeOptions', $this->_displayTypeOptions);
-
- // 時間枠データを取得する。なければ、時間枠の表示設定を表示しない
- $this->set('hasTimeframe', (bool)$this->ReservationTimeframe->find('count', ['recursive' => -1]));
- }
-}
diff --git a/Controller/ReservationImportController.php b/Controller/ReservationImportController.php
deleted file mode 100644
index 07b6078..0000000
--- a/Controller/ReservationImportController.php
+++ /dev/null
@@ -1,473 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppController', 'Reservations.Controller');
-App::uses('CsvFileReader', 'Files.Utility');
-
-/**
- * 予約のインポート Controller
- *
- * @property ReservationSelectRoomComponent $ReservationSelectRoom
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\Controller
- */
-class ReservationImportController extends ReservationsAppController {
-
-/**
- * reservation information
- *
- * @var array
- */
- protected $_vars = array();
-
-/**
- * layout
- *
- * @var array
- */
- public $layout = 'NetCommons.setting'; //PageLayoutHelperのafterRender()の中で利用。
- //
- //$layoutに'NetCommons.setting'があると
- //「Frame設定も含めたコンテンツElement」として
- //ng-controller='FrameSettingsController'属性
- //ng-init=initialize(Frame情報)属性が付与される。
- //
- //'NetCommons.setting'がないと、普通の
- //「コンテンツElement」として扱われる。
- //
- //ちなみに、使用されるLayoutは、Pages.default
- //
-
-/**
- * @var array use models
- */
- public $uses = array(
- 'Reservations.ReservationLocation',
- 'Reservations.ReservationLocationsRoom',
- 'Categories.Category',
- 'Reservations.ReservationImport',
- 'Reservations.ReservationActionPlan',
- 'Reservations.ReservationCsvRecord',
- 'Reservations.ReservationEvent',
- 'Reservations.ReservationLocationsRoom',
- //'Workflow.WorkflowComment',
- );
-
-/**
- * Components
- *
- * @var array
- */
- public $components = array(
- 'Categories.Categories',
- //'Blogs.ReservationLocationPermission',
- 'NetCommons.NetCommonsTime',
- 'Paginator',
- 'Rooms.RoomsForm',
- 'Reservations.ReservationSettings', //NetCommons.Permissionは使わず、独自でやる
- 'Reservations.ReservationWorks',
- 'Reservations.ReservationSelectRoom',
- );
-
-/**
- * @var array helpers
- */
- public $helpers = array(
- 'NetCommons.BackTo',
- 'NetCommons.NetCommonsForm',
- 'Workflow.Workflow',
- 'NetCommons.NetCommonsTime',
- 'NetCommons.TitleIcon',
- //'Blocks.BlockForm',
-
- 'Blocks.BlockTabs', // 設定内容はReservationSettingsComponentにまとめた
-
- 'Rooms.RoomsForm',
- 'Reservations.ReservationLocation',
- 'Reservations.ReservationWorkflow',
- 'Reservations.ReservationPlan',
-
- 'NetCommons.Date',
- 'NetCommons.DisplayNumber',
- 'NetCommons.Button',
- 'Reservations.ReservationUrl',
- 'Reservations.ReservationCommon',
- 'Reservations.ReservationMonthly',
- 'Reservations.ReservationCategory',
- 'Reservations.ReservationShareUsers',
- 'Reservations.ReservationEditDatetime',
- //'Reservations.ReservationExposeTarget',
- 'Reservations.ReservationPlanRrule',
- 'Reservations.ReservationPlanEditRepeatOption',
- 'Groups.GroupUserList',
- 'Users.UserSearch',
-
-
- );
-
-/**
- * beforeFilter
- *
- * @return void
- */
- public function beforeFilter() {
- parent::beforeFilter();
- }
-
-/**
- * edit method
- *
- * @return void
- */
- public function edit() {
- // 施設情報
- $locations = $this->ReservationLocation->getReservableLocations();
-
- // openTextの追加
- $openText = new ReservationLocationOpenText();
- $locations = $openText->openTextAdd($locations);
-
- $this->set('locations', $locations);
-
- $frameId = Current::read('Frame.id');
- if (! $frameId) {
- $this->setAction('can_not_edit');
- return;
- }
-
- $this->set('isEdit', true);
- if ($this->request->is(array('post', 'put'))) {
- $this->_reservationPost();
- } else {
- $this->request->data['ReservationActionPlan']['timezone'] = 'Asia/Tokyo';
- }
- $this->_reservationGet(ReservationsComponent::PLAN_ADD);
-
- $userId = Current::read('User.id');
- $defaultLocationKey = $this->request->data['ReservationActionPlan']['location_key'] ?? null;
-
- $defaultRooms = $this->ReservationSelectRoom->getDefaultPublishableRooms(
- $locations,
- $defaultLocationKey,
- $userId
- );
- $this->set('defaultPublishableRooms', json_encode($defaultRooms));
-
- // 選択済みルーム
- $selectedRoomId = $this->request->data['ReservationActionPlan']['plan_room_id'] ?? 0;
- $selectedRoom = $this->ReservationSelectRoom->getSelectedRoom(
- $defaultRooms,
- $selectedRoomId
- );
- $this->set('selectedRoom', json_encode($selectedRoom));
- }
-
-/**
- * _reservationPost
- *
- * @return void
- * @SuppressWarnings(PHPMD)
- */
- protected function _reservationPost() {
- //CakeLog::debug("DBG: request_data[" . print_r($this->request->data, true) . "]");
-
- //CalenarActionPlanモデルの繰返し回数超過フラグをoffにしておく。
- $this->ReservationActionPlan->isOverMaxRruleIndex = false;
-
- //Xdebugがインストールされている環境だと、xdebug.max_nesting_levelの値(100とか200とか256とか)
- //の制限を受けてしまうので、再帰callを多用する施設予約登録では一時的に閾値を引き上げておく。
- $xdebugMaxNestingLvl = ini_get('xdebug.max_nesting_level');
- if ($xdebugMaxNestingLvl) {
- //Xdebugが入っている環境
- $xdebugMaxNestingLvl = ini_set('xdebug.max_nesting_level',
- ReservationsComponent::CALENDAR_XDEBUG_MAX_NESTING_LEVEL);
- }
-
- // ステータスは…
- $locationKey = $this->request->data['ReservationActionPlan']['location_key'];
- $location = $this->ReservationLocation->getByKey($locationKey);
- $userId = Current::read('User.id');
- // 1. 選択した施設が承認不要 → 公開
- if ($location['ReservationLocation']['use_workflow']) {
- if (in_array($userId, $location['approvalUserIds'])) {
- // 2. 承認者 → 公開
- $status = WorkflowComponent::STATUS_PUBLISHED;
- } else {
- // 3. それ以外 公開申請
- $status = WorkflowComponent::STATUS_APPROVAL_WAITING;
- }
- } else {
- //選択した施設が承認不要 → 公開
- $status = WorkflowComponent::STATUS_PUBLISHED;
- }
- //$status = $this->ReservationActionPlan->getStatus($this->request->data);
- $this->request->data['ReservationActionPlan']['status'] = $status;
- $this->ReservationActionPlan->set($this->request->data);
-
- //公開対象のルームが、ログイン者(編集者・承認者)のプライベートルームかどうかを判断しておく。
- $isMyPrivateRoom =
- ($this->request->data['ReservationActionPlan']['plan_room_id'] == $this->_myself);
-
- if (! $isMyPrivateRoom) {
- //CakeLog::debug("DBG: 予定のルームが、ログインの者のプライベートルーム以外の時");
- if (isset($this->request->data['GroupsUser'])) {
- //CakeLog::debug("DBG: 予定を共有する人情報は存在してはならないので、stripする。");
- unset($this->request->data['GroupsUser']);
- }
- }
-
- // CSVファイルとフォーム項目のバリデーション
- $this->ReservationImport->set($this->request->data);
- if (!$this->ReservationImport->validates()) {
- $this->ReservationActionPlan->validationErrors = Hash::merge(
- $this->ReservationActionPlan->validationErrors,
- $this->ReservationImport->validationErrors
- );
- $this->NetCommons->handleValidationError($this->ReservationActionPlan->validationErrors);
- return;
- }
- $path = $this->request->data['ReservationActionPlan']['csv_file']['tmp_name'];
- $csvFile = new CsvFileReader($path);
-
- // ここから登録開始
- $this->ReservationActionPlan->begin();
-
- if ($this->request->data['ReservationActionPlan']['delete_room_events']) {
- // 公開先の全予約を削除してからインポート
- $roomId = $this->request->data['ReservationActionPlan']['plan_room_id'];
- if (!$this->ReservationEvent->deleteEventByRoomId($roomId)) {
- $this->ReservationActionPlan->validationErrors['delete_room_events'] =
- __d('reservations', 'Delete failed.');
- $this->NetCommons->handleValidationError(
- $this->ReservationActionPlan->validationErrors,
- __d('reservations', 'Delete failed.')
- );
- return;
- }
- }
- $errors = [];
- $result = true;
- foreach ($csvFile as $index => $item) {
- if ($index == 0) {
- // 1行目は読み飛ばす
- continue;
- }
- // CSVデータのバリデーション "件名","利用時間の制限なし","予約日","開始時間","終了時間","連絡先","詳細"の順
- $csvRecord = $this->ReservationCsvRecord->getCsvRecordByRow($item, $location);
- $this->ReservationCsvRecord->create();
- $this->ReservationCsvRecord->set($csvRecord);
- if (!$this->ReservationCsvRecord->validates()) {
- // csvデータのバリデーションエラー
- foreach ($this->ReservationCsvRecord->validationErrors as $error) {
- $errorMessage = implode('', $error);
- //$errors[] = __d('reservations', '%d行目:%s', $index, $errorMessage);
- //$this->ReservationActionPlan->validationErrors['csv_file'][] =
- // __d('reservations', '%d行目:%s', $index, $errorMessage);
- $errors['csv_file'][] =
- __d('reservations', 'Line %d : %s', $index, $errorMessage);
- }
- $result = false;
- continue; // 次の行へ
-
- }
-
- $this->ReservationActionPlan->create();
-
- $this->request->data['ReservationActionPlan']['timezone'] =
- Current::read('User.timezone');
- $this->request->data['ReservationActionPlan']['enable_time'] = 1;
- $this->request->data['ReservationActionPlan']['is_detail'] = 1;
- $this->request->data['ReservationActionPlan']['is_repeat'] = 0;
- $this->request->data['ReservationActionPlan']['WorkflowComment'] = '';
- $this->request->data['ReservationActionPlan']['title_icon'] = '';
- $this->request->data['ReservationActionPlan']['location'] = '';
- $this->request->data['ReservationActionPlan']['enable_email'] = 0;
- $this->request->data['ReservationActionPlan']['email_send_timing'] = 5;
-
- $this->request->data['ReservationActionPlan'] = Hash::merge(
- $this->request->data['ReservationActionPlan'],
- $this->ReservationCsvRecord->convertActionPlanData($csvRecord)
- );
-
- if ($this->request->data['ReservationActionPlan']['skip_duplicate_events']) {
- // 同じ予約を無視する設定なら→同じ予約があるか探す
- // 同じタイトル、日時の予約があったら、このCSVデータは保存しないでスキップ
- if ($this->_existDuplicateEvent($this->request->data)) {
- //$errorMessage = __d('reservations', '件名と予約日時が一致する予約がありました')
- //$errors['csv_file'][] =
- // __d('reservations', '%d行目:%s', $index, $errorMessage);
- // 特にメッセージいらないかな?
- continue;
- }
- }
-
- $this->ReservationActionPlan->set($this->request->data);
-
- //校正用配列の準備
- $this->ReservationActionPlan->reservationProofreadValidationErrors = array();
- if (! $this->ReservationActionPlan->validates()) {
-
- $error = $this->ReservationActionPlan->validationErrors;
- foreach ($error as $field => $err) {
- if (in_array($field, ['location_key', 'room_id'])) {
- $errors[$field] = $err;
- } else {
- // location_key, room_id以外のバリデーションエラーはCSVレコード単位のエラー
- $errorMessage = implode('', $err);
- $errors['csv_file'][] =
- __d('reservations', 'Line %d : %s', $index, $errorMessage);
- }
- }
- $result = false;
- //$this->NetCommons->handleValidationError($this->ReservationActionPlan->validationErrors);
- continue;
- }
-
- $eventId = $this->ReservationActionPlan->saveImportRecord(
- $this->request->data,
- $this->_myself);
- if (!$eventId) {
- $errors['csv_file'][] =
- __d('reservations', 'Line %d : %s', $index,
- __d('reservations', 'Registration failed.'));
- $result = false;
- }
-
- }
- if (!$result) {
- $this->ReservationActionPlan->rollback();
-
- $this->ReservationActionPlan->validationErrors = $errors;
- $this->NetCommons->handleValidationError(
- $this->ReservationActionPlan->validationErrors
- );
- return;
- }
- $this->ReservationActionPlan->commit();
-
- $url = NetCommonsUrl::backToPageUrl();
- $this->redirect($url);
- }
-
-/**
- * 件名、予約日時、施設が同じ予約が存在するか?
- * CSVインポートで「件名と予約日時が一致するデータは無視する」のときに利用。
- *
- * @param array $data ReservationActionPlan
- * @return bool
- */
- protected function _existDuplicateEvent($data) {
- $ncTime = new NetCommonsTime();
- $start = $ncTime->toServerDatetime($data['ReservationActionPlan']['detail_start_datetime']);
- $start = date('YmdHis', strtotime($start));
- $end = $ncTime->toServerDatetime($data['ReservationActionPlan']['detail_end_datetime']);
- $end = date('YmdHis', strtotime($end));
- $conditions = [
- 'ReservationEvent.title' => $data['ReservationActionPlan']['title'],
- 'ReservationEvent.dtstart' => $start,
- 'ReservationEvent.dtend' => $end,
- 'ReservationEvent.location_key' => $data['ReservationActionPlan']['location_key'],
- ];
- $conditions = $this->ReservationEvent->getWorkflowConditions($conditions);
- $count = $this->ReservationEvent->find('count', ['conditions' => $conditions]);
- return ($count > 0);
- }
-
-/**
- * _reservationGet
- *
- * @param string $planViewMode アクション
- * @return void
- */
- protected function _reservationGet($planViewMode) {
- //eventが空の場合、初期値でFILLした表示用配列を取得する。
- list(
- $year, $month, $day, $hour, $minute, $second, $enableTime
- ) =
- $this->ReservationWorks->getDateTimeParam($this->request->query);
- $capForView = (new ReservationSupport())->getInitialReservationActionPlanForView(
- $year,
- $month,
- $day,
- $hour,
- $minute,
- $second,
- $enableTime,
- $this->_exposeRoomOptions
- );
-
- //0件を意味する空配列を入れておく。
- $eventSiblings = array();
-
- //eventが空なので、1stSibも初期値でFILLしておく
- $capForViewOf1stSib = $capForView;
-
- $firstSibEventId = 0; //新規だからidは未設定をあらわす0
- $firstSibEventKey = '';
-
- $startDatetime = $capForViewOf1stSib['ReservationActionPlan']['detail_start_datetime'];
- $year1stSib = substr($startDatetime, 0, 4);
- $month1stSib = substr($startDatetime, 5, 2);
- $day1stSib = substr($startDatetime, 8, 2);
-
- $firstSib = array(
- 'ReservationActionPlan' => array(
- 'first_sib_event_id' => $firstSibEventId,
- 'first_sib_event_key' => $firstSibEventKey,
- 'first_sib_year' => intval($year1stSib),
- 'first_sib_month' => intval($month1stSib),
- 'first_sib_day' => intval($day1stSib),
- ),
- );
- //capForViewのrequest->data反映
- $this->request->data = $this->ReservationWorks->setCapForView2RequestData(
- $capForView,
- $this->request->data
- );
-
- $mailSettingInfo = $this->getMailSettingInfo();
-
- //reuqest->data['GroupUser']にある各共有ユーザの情報取得しセット
- $shareUsers = array();
- foreach ($this->request->data['GroupsUser'] as $user) {
- $shareUsers[] = $this->User->getUser($user['user_id'], Current::read('Language.id'));
- }
-
- //キャンセル時のURLセット
- //testセッション方式
- //$url = $this->__getSessionStoredRedirectUrl();
- //$url = []; //
- //$this->_vars['returnUrl'] = $url;
-
- $this->set(
- compact(
- 'capForView',
- 'mailSettingInfo',
- 'shareUsers',
- 'eventSiblings',
- 'planViewMode',
- 'firstSib'
- )
- );
- $this->set('vars', $this->_vars);
- $this->set('event', $this->eventData);
- $this->set('frameSetting', $this->_frameSetting);
- $this->set('exposeRoomOptions', $this->_exposeRoomOptions);
- $this->set('myself', $this->_myself);
- $this->set('emailOptions', $this->_emailOptions);
- $this->set('frameId', Current::read('Frame.id', 0));
- $this->set('languageId', Current::read('Language.id'));
-
- //$this->request->data['ReservationFrameSettingSelectRoom'] =
- // $this->ReservationFrameSetting->getSelectRooms($this->_frameSetting['ReservationFrameSetting']['id']);
- }
-}
diff --git a/Controller/ReservationLocationCategoriesController.php b/Controller/ReservationLocationCategoriesController.php
deleted file mode 100644
index 94b93f8..0000000
--- a/Controller/ReservationLocationCategoriesController.php
+++ /dev/null
@@ -1,93 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppController', 'Reservations.Controller');
-
-/**
- * 施設カテゴリ設定 Controller
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\Controller
- */
-class ReservationLocationCategoriesController extends ReservationsAppController {
-
-/**
- * layout
- *
- * @var array
- */
- public $layout = 'NetCommons.setting';
-
-/**
- * use models
- *
- * @var array
- */
- public $uses = array(
- 'Reservations.Reservation',
- );
-
-/**
- * use components
- *
- * @var array
- */
- public $components = array(
- 'Categories.CategoryEdit',
- 'Reservations.ReservationSettings', //NetCommons.Permissionは使わず、独自でやる
- );
-
-/**
- * use helpers
- *
- * @var array
- */
- public $helpers = array(
- 'Blocks.BlockTabs', // 設定内容はReservationSettingsComponentにまとめた
- );
-
-/**
- * edit
- *
- * @return void
- */
- public function edit() {
- if ($this->request->is(['put', 'post'])) {
- //登録処理
- if ($this->Reservation->save($this->data)) {
- //正常の場合
- $this->NetCommons->setFlashNotification(__d('net_commons', 'Successfully saved.'), array(
- 'class' => 'success',
- ));
-
- $url = NetCommonsUrl::actionUrl(
- array(
- 'controller' => 'reservation_location_categories',
- 'action' => 'edit',
- 'frame_id' => Current::read('Frame.id'),
- )
- );
- $this->redirect($url);
- return;
- }
- $this->NetCommons->handleValidationError($this->Reservation->validationErrors);
-
- } else {
- //表示処理(初期データセット)
- $this->Reservation->recursive = -1;
- if (! $reservation = $this->Reservation->findByBlockKey(Current::read('Block.key'))) {
- return $this->throwBadRequest();
- }
- $this->request->data = Hash::merge($this->request->data, $reservation);
- $this->request->data = Hash::merge($this->request->data, ['Block' => Current::read('Block')]);
- }
- }
-}
diff --git a/Controller/ReservationLocationsController.php b/Controller/ReservationLocationsController.php
deleted file mode 100644
index 029081d..0000000
--- a/Controller/ReservationLocationsController.php
+++ /dev/null
@@ -1,396 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppController', 'Reservations.Controller');
-App::uses('ReservationLocationReservable', 'Reservations.Model');
-
-/**
- * 施設設定 Controller
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\Controller
- */
-class ReservationLocationsController extends ReservationsAppController {
-
-/**
- * @var int 施設編集画面で表示する最大ルーム数
- */
- const MAX_ROOMS = 300;
-
-/**
- * layout
- *
- * @var array
- */
- public $layout = 'NetCommons.setting';
-
-/**
- * @var array use models
- */
- public $uses = array(
- 'Reservations.ReservationLocation',
- 'Reservations.ReservationLocationChangeWeight',
- 'Reservations.ReservationLocationsRoom',
- 'Categories.Category',
- 'Roles.Role',
- 'Rooms.RoomRole',
- 'Reservations.ReservationLocationReservable',
- 'Reservations.ReservationLocationsApprovalUser',
- 'Users.User',
- );
-
-/**
- * Components
- *
- * @var array
- */
- public $components = array(
- 'Categories.Categories',
- 'NetCommons.NetCommonsTime',
- 'Paginator',
- 'Rooms.RoomsForm',
- 'Reservations.ReservationSettings', //NetCommons.Permissionは使わず、独自でやる
- );
-
-/**
- * @var array helpers
- */
- public $helpers = array(
- 'Blocks.BlockTabs', // 設定内容はReservationSettingsComponentにまとめた
- 'Rooms.RoomsForm',
- 'Reservations.ReservationLocation',
- 'Groups.GroupUserList',
- 'Users.UserSearch'
- );
-
-/**
- * index
- *
- * @return void
- */
- public function index() {
- //条件
- $conditions = array(
- 'ReservationLocation.language_id' => Current::read('Language.id'),
- );
- if (isset($this->params['named']['category_id'])) {
- $conditions['ReservationLocation.category_id'] = $this->params['named']['category_id'];
- }
- $query = [
- 'conditions' => $conditions,
- 'recursive' => 0,
- 'order' => 'ReservationLocation.weight ASC'
- ];
-
- $this->Paginator->settings = [
- 'ReservationLocation' => $query
- ];
- $reservationLocations = $this->Paginator->paginate('ReservationLocation');
-
- // openTextの追加
- $openText = new ReservationLocationOpenText();
- $reservationLocations = $openText->openTextAdd($reservationLocations);
-
- $this->set('reservationLocations', $reservationLocations);
- }
-
-/**
- * add method
- *
- * @return void
- */
- public function add() {
- $this->set('isEdit', false);
-
- $this->_processPermission();
-
- // 施設管理者保持
- if ($this->request->is('post')) {
- $result = $this->ReservationLocation->saveLocation($this->request->data);
- if ($result) {
- $url = NetCommonsUrl::actionUrl(
- array(
- 'controller' => 'reservation_locations',
- 'action' => 'index',
- 'frame_id' => Current::read('Frame.id'),
- )
- );
- return $this->redirect($url);
- }
- $this->NetCommons->handleValidationError($this->ReservationLocation->validationErrors);
-
- //未選択の場合、文字列の空値が入ってくる
- if (! is_array($this->request->data['ReservationLocationsRoom']['room_id'])) {
- $this->request->data['ReservationLocationsRoom']['room_id'] = [];
- }
-
- $isMyUser = false;
- } else {
- $newLocation = $this->ReservationLocation->createLocation();
- $this->request->data['ReservationLocation'] = $newLocation['ReservationLocation'];
- $isMyUser = true;
- }
-
- //施設管理者のセット
- $this->_setSelectUsers($isMyUser);
-
- // プライベートルームは除外する
- $roomConditions = [
- //'Room.space_id !=' => Space::PRIVATE_SPACE_ID,
- ];
- $this->RoomsForm->setRoomsForCheckbox(
- $roomConditions,
- ['limit' => self::MAX_ROOMS, 'maxLimit' => self::MAX_ROOMS]
- );
-
- $this->view = 'form';
- }
-
-/**
- * 予約できる権限の処理
- *
- * @param null $key locationKey
- * @return void
- */
- protected function _processPermission($key = null) {
- $reservables = $this->ReservationLocationReservable->getPermissions($key);
-
- $this->request->data['ReservationLocationReservable'] = Hash::merge(
- $reservables,
- Hash::get($this->request->data, 'ReservationLocationReservable', array())
- );
-
- //Role取得
- $roles = $this->Role->find('all', array(
- 'recursive' => -1,
- 'conditions' => array(
- 'Role.type' => Role::ROLE_TYPE_ROOM,
- 'Role.language_id' => Current::read('Language.id'),
- ),
- ));
- $roles = Hash::combine($roles, '{n}.Role.key', '{n}.Role');
-
- //RoomRole取得
- $roomRoles = $this->RoomRole->find('all', array(
- 'recursive' => -1,
- ));
- $roomRoles = Hash::combine($roomRoles, '{n}.RoomRole.role_key', '{n}.RoomRole');
- $roomRoles = Hash::remove($roomRoles, '{n}.RoomRole.id');
-
- $this->set('roles', Hash::merge($roomRoles, $roles));
- }
-
-/**
- * 担当者ユーザを設定
- *
- * @param bool $isMyUser 作成者ユーザー取得フラグ
- * @return void
- */
- protected function _setSelectUsers($isMyUser) {
- if ($isMyUser) {
- $this->request->data['ReservationLocationsApprovalUser'][] = array(
- 'user_id' => Current::read('User.id')
- );
- }
-
- $this->request->data['selectUsers'] = array();
- if (isset($this->request->data['ReservationLocationsApprovalUser'])) {
- $selectUsers = Hash::extract(
- $this->request->data['ReservationLocationsApprovalUser'],
- '{n}.user_id'
- );
- foreach ($selectUsers as $userId) {
- $user = $this->User->getUser($userId);
- $this->request->data['selectUsers'][] = $user;
- }
- }
- }
-
-/**
- * edit method
- *
- * @return void
- */
- public function edit() {
- $this->set('isEdit', true);
- $key = $this->params['key'];
-
- $this->_processPermission($key);
-
- //施設データの取得
- $reservationLocation = $this->ReservationLocation->find('first', [
- 'recursive' => 0,
- 'conditions' => [
- 'ReservationLocation.key' => $key,
- 'ReservationLocation.language_id' => Current::read('Language.id')
- ]
- ]);
- if (empty($reservationLocation)) {
- return $this->throwBadRequest();
- }
- $timeTable = explode('|', $reservationLocation['ReservationLocation']['time_table']);
- $reservationLocation['ReservationLocation']['time_table'] = $timeTable;
-
- if ($this->request->is(array('post', 'put'))) {
- // リクエストデータから施設管理者保持
- $this->_setSelectUsers(false);
-
- $data = $this->request->data;
- if ($this->ReservationLocation->saveLocation($data)) {
- $url = NetCommonsUrl::actionUrl(
- array(
- 'controller' => 'reservation_locations',
- 'action' => 'index',
- 'frame_id' => Current::read('Frame.id'),
- )
- );
- return $this->redirect($url);
- }
-
- $this->NetCommons->handleValidationError($this->ReservationLocation->validationErrors);
-
- //未選択の場合、文字列の空値が入ってくる
- if (! is_array($this->request->data['ReservationLocationsRoom']['room_id'])) {
- $this->request->data['ReservationLocationsRoom']['room_id'] = [];
- }
-
- } else {
- // start_time, end_timeを施設のタイムゾーンに変換してH:i形式へ
- $locationTimeZone = new DateTimeZone($reservationLocation['ReservationLocation']['timezone']);
- $startDate = new DateTime(
- $reservationLocation['ReservationLocation']['start_time'], new DateTimeZone('UTC')
- );
-
- $startDate->setTimezone($locationTimeZone);
- $reservationLocation['ReservationLocation']['start_time'] = $startDate->format('H:i');
-
- $endDate = new DateTime(
- $reservationLocation['ReservationLocation']['end_time'], new DateTimeZone('UTC')
- );
- $endDate->setTimezone($locationTimeZone);
- $reservationLocation['ReservationLocation']['end_time'] = $endDate->format('H:i');
-
- $this->request->data['ReservationLocation'] = $reservationLocation['ReservationLocation'];
-
- //施設管理者のデータセット
- $approvalUsers = $this->ReservationLocationsApprovalUser->find('all', [
- 'recursive' => 0,
- 'conditions' => [
- 'location_key' => $key
- ]
- ]);
- foreach ($approvalUsers as $approvalUser) {
- $this->request->data['selectUsers'][] = ['User' => $approvalUser['User']];
- }
-
- //予約を受け付けるルームを取得
- $result = $this->ReservationLocationsRoom->find('list', array(
- 'recursive' => -1,
- 'fields' => array('id', 'room_id'),
- 'conditions' => ['reservation_location_key' =>
- $this->request->data['ReservationLocation']['key']],
- ));
- $roomIds = array_unique(array_values($result));
- $this->request->data['ReservationLocationsRoom']['room_id'] = $roomIds;
- }
-
- $this->set('reservationLocation', $reservationLocation);
- $this->set('isDeletable', true);
-
- // プライベートルームは除外する
- $roomConditions = [
- //'Room.space_id !=' => Space::PRIVATE_SPACE_ID,
- ];
- $this->RoomsForm->setRoomsForCheckbox(
- $roomConditions,
- ['limit' => self::MAX_ROOMS, 'maxLimit' => self::MAX_ROOMS]
- );
-
- $this->view = 'form';
- }
-
-/**
- * delete method
- *
- * @throws InternalErrorException
- * @return void
- */
- public function delete() {
- if (! $this->request->is('delete')) {
- return $this->throwBadRequest();
- }
-
- $key = $this->request->data['ReservationLocation']['key'];
- if (! $this->ReservationLocation->deleteLocation($key)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- $url = NetCommonsUrl::actionUrl(
- array(
- 'controller' => 'reservation_locations',
- 'action' => 'index',
- 'frame_id' => Current::read('Frame.id'),
- )
- );
- return $this->redirect($url);
- }
-
-/**
- * 施設並び替え
- *
- * @return void
- */
- public function sort() {
- if ($this->request->is('post')) {
- if ($this->ReservationLocation->saveWeights($this->data)) {
- $url = NetCommonsUrl::actionUrl(
- array(
- 'controller' => 'reservation_locations',
- 'action' => 'index',
- 'frame_id' => Current::read('Frame.id'),
- )
- );
- return $this->redirect($url);
- }
- $this->NetCommons->handleValidationError($this->ReservationLocation->validationErrors);
-
- } else {
- //条件
- $conditions = array(
- 'ReservationLocation.language_id' => Current::read('Language.id'),
- );
- if (isset($this->params['named']['category_id'])) {
- $conditions['ReservationLocation.category_id'] = $this->params['named']['category_id'];
- }
- $query = [
- 'conditions' => $conditions,
- 'recursive' => 0,
- 'order' => 'ReservationLocation.weight ASC',
- 'limit' => PHP_INT_MAX,
- 'maxLimit' => PHP_INT_MAX
- ];
-
- $this->Paginator->settings = [
- 'ReservationLocation' => $query
- ];
- $reservationLocations = $this->Paginator->paginate('ReservationLocation');
-
- // openTextの追加
- $openText = new ReservationLocationOpenText();
- $reservationLocations = $openText->openTextAdd($reservationLocations);
-
- $this->set('reservationLocations', $reservationLocations);
-
- $this->request->data['ReservationLocations'] = $reservationLocations;
- $this->request->data['Frame'] = Current::read('Frame');
- }
- }
-}
diff --git a/Controller/ReservationMailSettingsController.php b/Controller/ReservationMailSettingsController.php
deleted file mode 100644
index 0fc25ba..0000000
--- a/Controller/ReservationMailSettingsController.php
+++ /dev/null
@@ -1,75 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('MailSettingsController', 'Mails.Controller');
-App::uses('Room', 'Rooms.Model');
-App::uses('ReservationPermissiveRooms', 'Reservations.Utility');
-
-/**
- * メール設定 Controller
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\Controller
- */
-
-class ReservationMailSettingsController extends MailSettingsController {
-
-/**
- * 使用コンポーネントの定義
- *
- * @var array
- */
- public $components = array(
- 'Mails.MailSettings',
- 'Pages.PageLayout',
- 'Security',
- 'Reservations.ReservationSettings', //NetCommons.Permissionは使わず、独自でやる
- );
-
-/**
- * 使用モデルの定義
- *
- * @var array
- */
- public $uses = array(
- 'Mails.MailSetting',
- 'Mails.MailSettingFixedPhrase',
- 'Reservations.Reservation',
- );
-
-/**
- * use helpers
- *
- * @var array
- */
- public $helpers = array(
- 'Blocks.BlockRolePermissionForm',
- 'Blocks.BlockTabs', // 設定内容はReservationSettingsComponentにまとめた
- 'Mails.MailForm',
- );
-
-/**
- * beforeRender
- *
- * @return void
- */
- public function beforeFilter() {
- parent::beforeFilter();
-
- $this->backUrl = NetCommonsUrl::backToPageUrl(true);
-
- //NC3の標準のカテゴリーを利用するために、
- //roomId=パブリック、blockId=サイト全体(=パブリック)でひとつ持つ
- //Current::read('Block')を唯一のBlockに置き換える
- $this->Reservation->prepareBlock();
- }
-
-}
diff --git a/Controller/ReservationPlansController.php b/Controller/ReservationPlansController.php
deleted file mode 100644
index 3922f10..0000000
--- a/Controller/ReservationPlansController.php
+++ /dev/null
@@ -1,761 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppController', 'Reservations.Controller');
-App::uses('NetCommonsTime', 'NetCommons.Utility');
-App::uses('ReservationTime', 'Reservations.Utility');
-App::uses('ReservationPermissiveRooms', 'Reservations.Utility');
-
-/**
- * ReservationPlansController
- *
- * @property ReservationSelectRoomComponent $ReservationSelectRoom
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\Controller
- */
-class ReservationPlansController extends ReservationsAppController {
-
-/**
- * event data
- *
- * @var array
- */
- public $eventData = array();
-
-/**
- * event share users
- *
- * @var array
- */
- public $shareUsers = array();
-
-/**
- * reservation event create permission settings
- *
- * @var array
- */
- public $roomPermRoles = array();
-
-/**
- * reservation information
- *
- * @var array
- */
- protected $_vars = array();
-
-/**
- * use models
- *
- * @var array
- */
- public $uses = array(
- 'Reservations.ReservationRrule',
- 'Reservations.ReservationEvent',
- 'Reservations.ReservationFrameSetting',
- 'Reservations.ReservationEventShareUser',
- 'Reservations.ReservationSetting',
- 'Reservations.ReservationWorkflow',
- 'Reservations.ReservationLocation',
- 'Reservations.ReservationLocationsRoom',
- 'Holidays.Holiday',
- 'Rooms.Room',
- 'Reservations.ReservationActionPlan', //予定追加変更action専用
- 'Reservations.ReservationDeleteActionPlan', //予定削除action専用
- 'Rooms.RoomsLanguage',
- 'Users.User',
- 'Mails.MailSetting',
- );
-
-/**
- * use component
- *
- * @var array
- */
- public $components = array(
- /* ここは施設予約では無理。施設予約は全空間を相手にするから
- 'NetCommons.Permission' => array(
- //アクセスの権限
- 'allow' => array(
- //indexとviewは祖先基底クラスNetCommonsAppControllerで許可済
- 'edit,add,delete' => 'content_creatable',
- //null, //content_readableは全員に与えられているので、チェック省略
- 'view' => 'content_readable',
- ////'select' => null,
- ),
- ),*/
- 'Reservations.ReservationPermission',
- 'Reservations.ReservationSelectRoom',
- 'Paginator',
- 'Reservations.ReservationsDaily',
- 'Reservations.ReservationWorks',
- 'UserAttributes.UserAttributeLayout', //グループ管理の初期値
- //設定の時に必要
- 'Categories.Categories',
- );
-
-/**
- * use helpers
- *
- * @var array
- */
- public $helpers = array(
- 'Workflow.Workflow',
- 'NetCommons.Date',
- 'NetCommons.DisplayNumber',
- 'NetCommons.Button',
- 'NetCommons.TitleIcon',
- 'Reservations.ReservationUrl',
- 'Reservations.ReservationCommon',
- 'Reservations.ReservationMonthly',
- 'Reservations.ReservationPlan',
- 'Reservations.ReservationCategory',
- 'Reservations.ReservationShareUsers',
- 'Reservations.ReservationEditDatetime',
- //'Reservations.ReservationExposeTarget',
- 'Reservations.ReservationPlanRrule',
- 'Reservations.ReservationPlanEditRepeatOption',
- 'Groups.GroupUserList',
- 'Users.UserSearch',
- //'Categories.Category',
- );
-
-/**
- * beforeRender
- *
- * @return void
- */
- public function beforeFilter() {
- parent::beforeFilter();
-
- // 以前はここでCurrentのブロックIDをチェックする処理があったが
- // 施設予約はCurrentのブロックID(=現在表示中ページのブロックID)は
- // 表示データ上の意味がないのでチェックは行わない
- // 表示ブロックIDがないときは、パブリックTOPページで仮表示されることに話が決まった
-
- //ε( v ゚ω゚) < 不要ではないか? by NakaZii
- //$this->Auth->allow('add', 'delete', 'edit', 'view');
-
- $this->ReservationEvent->initSetting($this->Workflow);
-
- // 施設予約権限設定情報確保
- $this->roomPermRoles = $this->ReservationEvent->prepareCalRoleAndPerm();
- ReservationPermissiveRooms::setRoomPermRoles($this->roomPermRoles);
-
- // 表示のための各種共通パラメータ設定
- $this->_vars = $this->__getVarsForShow();
- }
-
-/**
- * delete
- *
- * @return void
- * @SuppressWarnings(PHPMD)
- */
- public function delete() {
- //CakeLog::debug("DBG: delete()開始");
-
- //レイアウトの設定
- $this->viewClass = 'View';
- $this->layout = 'NetCommons.modal';
- if ($this->request->is('delete')) {
- //CakeLog::debug("DBG: 削除処理がPOSTされました。");
-
- //Eventデータ取得
- //内部でCurrent::permission('content_creatable'),Current::permission('content_editable')
- //が使われている。
- //
- $eventData = $this->ReservationEvent->getWorkflowContents('first', array(
- 'recursive' => -1,
- 'conditions' => array(
- $this->ReservationEvent->alias . '.id' =>
- $this->data['ReservationDeleteActionPlan']['origin_event_id'],
- )
- ));
- if (!$eventData) {
- //該当eventが存在しない。
- //他の人が先に削除した、あるいは、自分が他のブラウザから削除
- //した可能性があるので、エラーとせず、
- //削除成功扱いにする。
- CakeLog::notice("指定したevent_id[" .
- $this->data['ReservationDeleteActionPlan']['origin_event_id'] .
- "]はすでに存在しませんでした。");
-
- //testセッション方式
- $url = $this->__getSessionStoredRedirectUrl();
- $this->redirect($url);
- return; //redirect後なので、ここには到達しない
- }
- if ($eventData) {
- //削除対象イベントあり
-
- //施設予約権限管理の承認を考慮した、Event削除権限チェック
- if (! $this->ReservationEvent->canDeleteContent($eventData)) {
- // 削除権限がない?!
- $this->throwBadRequest();
- return false;
- }
-
- $this->ReservationDeleteActionPlan->set($this->request->data);
- if (!$this->ReservationDeleteActionPlan->validates()) {
- //バリデーションエラー
- $this->NetCommons->handleValidationError($this->ReservationDeleteActionPlan->validationErrors);
- } else {
- //削除実行
- //
-
- //元データ繰返し有無の取得
- $eventSiblings = $this->ReservationEvent->getSiblings(
- $eventData['ReservationEvent']['reservation_rrule_id']);
- $isOriginRepeat = false;
- if (count($eventSiblings) > 1) {
- $isOriginRepeat = true;
- }
-
- if ($this->ReservationDeleteActionPlan->deleteReservationPlan($this->request->data,
- $eventData['ReservationEvent']['id'],
- $eventData['ReservationEvent']['key'],
- $eventData['ReservationEvent']['reservation_rrule_id'],
- $isOriginRepeat)) {
- //削除成功
- //testセッション方式
- $url = $this->__getSessionStoredRedirectUrl();
- $this->redirect($url);
- return; //redirect後なので、ここには到達しない
- } else {
- CakeLog::error("削除実行エラー");
- //エラーメッセージのセット. 便宜的にis_repeatを利用
- $this->ReservationDeleteActionPlan->validationErrors['is_repeat'] =
- __d('reservations', 'Delete failed.');
- return $this->throwBadRequest();
- }
- }
- }
- }
-
- //Viewに必要な処理があれば以下にかく。
-
- $this->request->data['ReservationDeleteActionPlan']['is_repeat'] = 0;
- if (!empty($this->request->query['action'])) {
- if ($this->request->query['action'] == 'repeatdelete') {
- $this->request->data['ReservationDeleteActionPlan']['is_repeat'] = 1;
- }
- }
- $isRepeat = $this->request->data['ReservationDeleteActionPlan']['is_repeat'];
-
- $this->request->data['ReservationDeleteActionPlan']['first_sib_event_id'] = 0;
- if (!empty($this->request->query['first_sib_event_id'])) {
- $this->request->data['ReservationDeleteActionPlan']['first_sib_event_id'] =
- intval($this->request->query['first_sib_event_id']);
- }
- $firstSibEventId = $this->request->data['ReservationDeleteActionPlan']['first_sib_event_id'];
-
- $this->request->data['ReservationDeleteActionPlan']['origin_event_id'] = 0;
- if (!empty($this->request->query['origin_event_id'])) {
- $this->request->data['ReservationDeleteActionPlan']['origin_event_id'] =
- intval($this->request->query['origin_event_id']);
- }
- $originEventId = $this->request->data['ReservationDeleteActionPlan']['origin_event_id'];
-
- $this->request->data['ReservationDeleteActionPlan']['is_recurrence'] = 0;
- if (!empty($this->request->query['is_recurrence'])) {
- $this->request->data['ReservationDeleteActionPlan']['is_recurrence'] =
- intval($this->request->query['is_recurrence']);
- }
- $isRecurrence = $this->request->data['ReservationDeleteActionPlan']['is_recurrence'];
-
- $this->set(compact('isRepeat', 'firstSibEventId', 'originEventId', 'isRecurrence'));
- $this->set('event', $this->eventData);
-
- //renderを発行しないので、デフォルトのdelete.ctpがレンダリングされる。
- }
-
-/**
- * add
- *
- * @return void
- */
- public function add() {
- // 施設情報
- $locations = $this->ReservationLocation->getReservableLocations();
-
- // openTextの追加
- $openText = new ReservationLocationOpenText();
- $locations = $openText->openTextAdd($locations);
-
- $locations = $this->__mergeApprovalUserName($locations);
- $this->set('locations', $locations);
-
- $userId = Current::read('User.id');
- $defaultLocationKey = $this->request->data['ReservationActionPlan']['location_key'] ?? null;
-
- $defaultRooms = $this->ReservationSelectRoom->getDefaultPublishableRooms(
- $locations,
- $defaultLocationKey,
- $userId
- );
- $this->set('defaultPublishableRooms', json_encode($defaultRooms));
-
- // 選択済みルーム
- $selectedRoomId = $this->request->data['ReservationActionPlan']['plan_room_id'] ?? 0;
- $selectedRoom = $this->ReservationSelectRoom->getSelectedRoom(
- $defaultRooms,
- (int)$selectedRoomId
- );
- $this->set('selectedRoom', json_encode($selectedRoom));
-
- $frameId = Current::read('Frame.id');
- if (! $frameId) {
- $this->setAction('can_not_edit');
- return;
- }
- if ($this->request->is('post')) {
- $this->_reservationPost();
- }
- // 表示のための処理
- $this->_reservationGet(ReservationsComponent::PLAN_ADD);
- // 表示画面CTPはdetail_edit
- $this->view = 'detail_edit';
- }
-
-/**
- * edit
- *
- * @return void
- */
- public function edit() {
- if ($this->request->is('post')) {
- $editRrule = $this->ReservationActionPlan->getEditRruleForUpdate($this->request->data);
- if ($editRrule == ReservationAppBehavior::CALENDAR_PLAN_EDIT_THIS) {
- $this->request->data['ReservationActionPlan']['is_repeat'] = '0';
- }
- $this->_reservationPost();
- }
- // 表示のための処理
- $this->_reservationGet(ReservationsComponent::PLAN_EDIT);
- //コメントデータのセット(コメントデータは編集のときしかないので共通処理に持っていってない)
- $comments =
- $this->ReservationEvent->getCommentsByContentKey($this->eventData['ReservationEvent']['key']);
- $this->set('comments', $comments);
- // 表示画面CTPはdetail_edit
- $this->view = 'detail_edit';
-
- // 施設情報
- $locations = $this->ReservationLocation->getReservableLocations();
-
- // openTextの追加
- $openText = new ReservationLocationOpenText();
- $locations = $openText->openTextAdd($locations);
-
- $locations = $this->__mergeApprovalUserName($locations);
- $this->set('locations', $locations);
-
- // 公開対象選択肢
- $userId = Current::read('User.id');
- $defaultLocationKey = $this->request->data['ReservationActionPlan']['location_key'];
- $defaultRooms = $this->ReservationSelectRoom->getDefaultPublishableRooms(
- $locations,
- $defaultLocationKey,
- $userId
- );
- $this->set('defaultPublishableRooms', json_encode($defaultRooms));
-
- // 選択済みルーム
- $selectedRoomId = $this->request->data['ReservationActionPlan']['plan_room_id'];
- $selectedRoom = $this->ReservationSelectRoom->getSelectedRoom(
- $defaultRooms,
- (int)$selectedRoomId
- );
- $this->set('selectedRoom', json_encode($selectedRoom));
- }
-
-/**
- * can_not_edit
- *
- * 施設予約は現在フレームIDがないと、編集ができないため
- * フレームID未指定で編集画面へ来てしまった時のエラーメッセージ画面を用意しておく
- *
- * @return void
- */
- public function can_not_edit() {
- //実装中
- }
-
-/**
- * _reservationPost
- *
- * @return void
- * @SuppressWarnings(PHPMD)
- */
- protected function _reservationPost() {
- //CakeLog::debug("DBG: request_data[" . print_r($this->request->data, true) . "]");
-
- //CalenarActionPlanモデルの繰返し回数超過フラグをoffにしておく。
- $this->ReservationActionPlan->isOverMaxRruleIndex = false;
-
- //Xdebugがインストールされている環境だと、xdebug.max_nesting_levelの値(100とか200とか256とか)
- //の制限を受けてしまうので、再帰callを多用する施設予約登録では一時的に閾値を引き上げておく。
- $xdebugMaxNestingLvl = ini_get('xdebug.max_nesting_level');
- if ($xdebugMaxNestingLvl) {
- //Xdebugが入っている環境
- $xdebugMaxNestingLvl = ini_set('xdebug.max_nesting_level',
- ReservationsComponent::CALENDAR_XDEBUG_MAX_NESTING_LEVEL);
- }
-
- // 押されたボタンからステータスをセット
- $status = $this->ReservationActionPlan->getStatus($this->request->data);
- $this->request->data['ReservationActionPlan']['status'] = $status;
- $this->ReservationActionPlan->set($this->request->data);
-
- //校正用配列の準備
- $this->ReservationActionPlan->reservationProofreadValidationErrors = array();
- if (! $this->ReservationActionPlan->validates()) {
-
- //validationエラーの内、いくつか(主にrrule関連)を校正する。
- $this->ReservationActionPlan->proofreadValidationErrors($this->ReservationActionPlan);
-
- //これでエラーmsgが画面上部に数秒間flashされる。
- $this->NetCommons->handleValidationError($this->ReservationActionPlan->validationErrors);
-
- return;
- }
-
- // validate OK
- $originEvent = array();
- if (!empty($this->request->data['ReservationActionPlan']['origin_event_id'])) {
- $originEvent = $this->ReservationEvent->getEventById(
- $this->request->data['ReservationActionPlan']['origin_event_id']);
- }
- //追加・変更、元データ繰返し有無、及び時間・繰返し系変更タイプの判断処理
- list($procMode, $isOriginRepeat, $isTimeMod, $isRepeatMod) =
- $this->ReservationActionPlan->getProcModeOriginRepeatAndModType(
- $this->request->data, $originEvent
- );
-
- //変更時の生成者を勘案・取得する。
- $createdUserWhenUpd = $this->__getCreatedUserWhenUpd(
- $procMode, $originEvent,
- $this->request->data['ReservationActionPlan']['plan_room_id'],
- $this->_myself
- );
-
- //公開対象のルームが、ログイン者(編集者・承認者)のプライベートルームかどうかを判断しておく。
- $isMyPrivateRoom =
- ($this->request->data['ReservationActionPlan']['plan_room_id'] == $this->_myself);
-
- if (! $isMyPrivateRoom) {
- //CakeLog::debug("DBG: 予定のルームが、ログインの者のプライベートルーム以外の時");
- if (isset($this->request->data['GroupsUser'])) {
- //CakeLog::debug("DBG: 予定を共有する人情報は存在してはならないので、stripする。");
- unset($this->request->data['GroupsUser']);
- }
- }
-
- //成功なら元画面(施設予約orスケジューラー)に戻る。
- //FIXME: 遷移元がview.ctpなら、戻り先をview.ctpに変える必要あり。
- //
-
- $eventId = $this->ReservationActionPlan->saveReservationPlan(
- $this->request->data, $procMode, $isOriginRepeat, $isTimeMod, $isRepeatMod,
- $createdUserWhenUpd, $this->_myself);
- if (!$eventId) {
- //保存失敗
- CakeLog::error("保存失敗"); //FIXME: エラー処理を記述のこと。
-
- if ($this->ReservationActionPlan->isOverMaxRruleIndex) {
- CakeLog::info("save(ReservationPlanの内部で施設予約のrruleIndex回数超過が" .
- "発生している。");
- $this->ReservationActionPlan->validationErrors['rrule_until'] = array();
- $this->ReservationActionPlan->validationErrors['rrule_until'][] =
- sprintf(__d('reservations',
- 'Cyclic rules using deadline specified exceeds the maximum number of %d',
- intval(ReservationsComponent::CALENDAR_RRULE_COUNT_MAX)));
- } else {
- CakeLog::error("DBG: その他の不明なエラーが発生しました。");
- $this->ReservationActionPlan->validationErrors['rrule_until'] = array();
- $this->ReservationActionPlan->validationErrors['rrule_until'][] =
- __d('reservations', 'An unknown error occurred.');
- }
-
- //これでエラーmsgが画面上部に数秒間flashされる。
- $this->NetCommons->handleValidationError($this->ReservationActionPlan->validationErrors);
-
- return;
-
- }
- //保存成功
- $event = $this->ReservationEvent->findById($eventId);
- $url = NetCommonsUrl::actionUrlAsArray(array(
- 'plugin' => 'reservations',
- 'controller' => 'reservation_plans',
- 'action' => 'view',
- 'key' => $event['ReservationEvent']['key'],
- 'frame_id' => Current::read('Frame.id'),
- ));
- $this->redirect($url);
- }
-
-/**
- * _reservationGet
- *
- * @param string $planViewMode アクション
- * @return void
- */
- protected function _reservationGet($planViewMode) {
- //eventのデータを取り出しセットするか、初期データをセットする
- //かのいずれかを行う。
- if ($planViewMode == ReservationsComponent::PLAN_EDIT) {
- //eventが存在する場合、該当eventの表示用配列を取得する。
- $capForView = (new ReservationSupport())->getReservationActionPlanForView($this->eventData);
-
- //eventの兄弟も探しておく。この時、dtstartでソートし繰返し先頭データが取得できるようにしておく。
- $eventSiblings = $this->ReservationEvent->getSiblings(
- $this->eventData['ReservationEvent']['reservation_rrule_id']);
-
- //自分もふくむので1件以上あることはまちがいない。
- $capForViewOf1stSib = (new ReservationSupport())->getReservationActionPlanForView(
- $eventSiblings[0]
- );
-
- $firstSibEventId = $eventSiblings[0]['ReservationEvent']['id'];
- $firstSibEventKey = $eventSiblings[0]['ReservationEvent']['key'];
- } else {
- //eventが空の場合、初期値でFILLした表示用配列を取得する。
- list($year, $month, $day, $hour, $minute, $second, $enableTime) =
- $this->ReservationWorks->getDateTimeParam($this->request->query);
- $capForView = (new ReservationSupport())->getInitialReservationActionPlanForView(
- $year, $month, $day, $hour, $minute, $second, $enableTime, $this->_exposeRoomOptions);
-
- //0件を意味する空配列を入れておく。
- $eventSiblings = array();
-
- //eventが空なので、1stSibも初期値でFILLしておく
- $capForViewOf1stSib = $capForView;
-
- $firstSibEventId = 0; //新規だからidは未設定をあらわす0
- $firstSibEventKey = '';
- }
-
- $startDatetime = $capForViewOf1stSib['ReservationActionPlan']['detail_start_datetime'];
- $year1stSib = substr($startDatetime, 0, 4);
- $month1stSib = substr($startDatetime, 5, 2);
- $day1stSib = substr($startDatetime, 8, 2);
-
- $firstSib = array(
- 'ReservationActionPlan' => array(
- 'first_sib_event_id' => $firstSibEventId,
- 'first_sib_event_key' => $firstSibEventKey,
- 'first_sib_year' => intval($year1stSib),
- 'first_sib_month' => intval($month1stSib),
- 'first_sib_day' => intval($day1stSib),
- ),
- );
- //capForViewのrequest->data反映
- $this->request->data = $this->ReservationWorks->setCapForView2RequestData(
- $capForView, $this->request->data);
-
- $mailSettingInfo = $this->getMailSettingInfo();
-
- //reuqest->data['GroupUser']にある各共有ユーザの情報取得しセット
- $shareUsers = array();
- foreach ($this->request->data['GroupsUser'] as $user) {
- $shareUsers[] = $this->User->getUser($user['user_id'], Current::read('Language.id'));
- }
-
- //キャンセル時のURLセット
- //testセッション方式
- $url = $this->__getSessionStoredRedirectUrl();
- $this->_vars['returnUrl'] = $url;
-
- $this->set(compact('capForView', 'mailSettingInfo', 'shareUsers', 'eventSiblings',
- 'planViewMode', 'firstSib'));
- $this->set('vars', $this->_vars);
- $this->set('event', $this->eventData);
- $this->set('frameSetting', $this->_frameSetting);
- $this->set('exposeRoomOptions', $this->_exposeRoomOptions);
- $this->set('myself', $this->_myself);
- $this->set('emailOptions', $this->_emailOptions);
- $this->set('frameId', Current::read('Frame.id', 0));
- $this->set('languageId', Current::read('Language.id'));
-
- //$this->request->data['ReservationFrameSettingSelectRoom'] =
- // $this->ReservationFrameSetting->getSelectRooms($this->_frameSetting['ReservationFrameSetting']['id']);
- }
-
-/**
- * view
- *
- * @return void
- */
- public function view() {
- $event = $this->eventData;
- $shareUserInfos = array();
- foreach ($this->shareUsers as $shareUser) {
- $shareUserInfos[] =
- $this->User->getUser(
- $shareUser[$this->ReservationEventShareUser->alias]['share_user'],
- $event[$this->ReservationEvent->alias]['language_id']);
- }
-
- $createdUserInfo =
- $this->User->getUser($event[$this->ReservationEvent->alias]['created_user'],
- $event[$this->ReservationEvent->alias]['language_id']);
-
- $isRepeat = $event['ReservationRrule']['rrule'] !== '' ? true : false;
-
- //testセッション方式
- $url = $this->__getSessionStoredRedirectUrl();
- $this->_vars['returnUrl'] = $url;
- $this->set(compact('shareUserInfos', 'createdUserInfo', 'isRepeat'));
- $this->set('vars', $this->_vars);
- $this->set('event', $this->eventData);
- $this->set('frameId', Current::read('Frame.id'));
- $this->set('languageId', Current::read('Language.id'));
- }
-
-/**
- * getVarsForShow
- *
- * 個別予定表示用のCtp名および予定情報の取得
- *
- * @return void
- * @throws InternalErrorException
- */
- private function __getVarsForShow() {
- $vars = array();
- $this->setReservationCommonVars($vars);
-
- $eventKey = Hash::get($this->request->params, 'key');
- if ($eventKey) {
- $this->eventData = $this->ReservationEvent->getEventByKey($eventKey);
- $vars['eventId'] = Hash::get($this->eventData, 'ReservationEvent.id');
- $this->shareUsers = $this->ReservationEventShareUser->find('all', array(
- 'conditions' => array(
- $this->ReservationEventShareUser->alias . '.reservation_event_id' =>
- $vars['eventId'],
- ),
- 'recursive' => -1,
- 'order' => array($this->ReservationEventShareUser->alias . '.share_user'),
- ));
- }
- //表示方法設定情報を取り出し、requestのdataに格納する。
- $this->_frameSetting = $this->ReservationFrameSetting->getFrameSetting();
-
- //公開対象一覧のoptions配列と自分自身のroom_idとルーム別空間名を取得
- $this->_exposeRoomOptions = $vars['exposeRoomOptions'];
- $this->_myself = null;
- $userId = Current::read('User.id');
- if ($userId) {
- $myRoom = $this->Room->getPrivateRoomByUserId($userId);
- if ($myRoom) {
- $this->_myself = $myRoom['Room']['id'];
- }
- }
-
- //eメール通知の選択options配列を取得
- $this->_emailOptions = $this->ReservationActionPlan->getNoticeEmailOption();
- return $vars;
- }
-
-/**
- * __getSessionStoredRedirectUrl
- *
- * セッションに保存している戻りURLを取り出す
- *
- * @return mixed
- */
- private function __getSessionStoredRedirectUrl() {
- $frameId = Current::read('Frame.id');
- $sessPath = CakeSession::read('Config.userAgent') . 'reservations.' . $frameId;
- $url = $this->Session->read($sessPath);
- if (! $url) {
- $url = NetCommonsUrl::backToPageUrl();
- }
- return $url;
- }
-
-/**
- * __getCreatedUserWhenUpd
- *
- * 変更時の生成者を勘案・取得する
- *
- * @param string $procMode procMode
- * @param array $originEvent originEvent
- * @param int $planRoomId planRoomId 選択された公開対象となるroomId
- * @param int $myself myself ログイン者のプライベートroomId
- * @return mixed
- */
- private function __getCreatedUserWhenUpd($procMode, $originEvent, $planRoomId, $myself) {
- //reservationの編集は、元予定のcopy=>copiedデータのupdate、で実現している。
- //keyが変わらな場合は、これで問題ない。
- //が、keyが変わる場合、=時間ルールや繰返しルールがかわって、
- //keyの対応が取れない場合、元eventは削除(物理削除or論理削除)し、
- //あらたな繰り返しルールで新keyのeventを生成(save)している。
- //(=google施設予約がこの考え方で、eventのkeyを変えているアルゴリズム仕様に
- //似せている+もともとNC2もその考え方を一部導入していた)
- //これにより、編集の時でも、新しいevent群(そしてその子レコード)がつくられるが
- //このときの、created(生成者)を、だれにするかが重要。
- //基本、生成者は現ログインユーザ(編集者)、ではないことに注意。
- //生成者は、元予定のcreated_userさんである!
- //
- //なので、新規saveでありながら、created_userは、元予定のそれ(created_user)
- //を継承する必要がある。(created日付時刻は、saveするその時でいいとおもう)
- //
- //ただし、例外がある。それは、公開予定のルームIDが、元予定の公開予定ルームID
- //にかかわらず、編集者のプライベートルームID(注!これは編集者により、ひとりひとり
- //違うから、要注意)になった場合は、、created_userは、元予定のそれを継承しては
- //「いけなく」て、編集者自身のuser.idをつかうこと。
-
- $createdUserWhenUpd = null; //初期値はnull
-
- if ($procMode == ReservationsComponent::PLAN_EDIT) {
- $createdUserWhenUpd = $originEvent['ReservationEvent']['created_user'];
- if ($planRoomId == $myself) {
- //例外. この時は、作成者は、元予定生成者ではなく、現ユーザとする。
- $createdUserWhenUpd = Current::read('User.id');
- }
- }
- return $createdUserWhenUpd;
- }
-
-/**
- * 承認者のハンドル名をセットする
- *
- * @param array $locations 施設リスト
- * @return array
- */
- private function __mergeApprovalUserName(array $locations) : array {
- $userIds = array_column($locations, 'approvalUserIds');
- $userIds = array_merge(...$userIds);
- $userIds = array_unique($userIds);
- $result = $this->User->find('all', [
- 'conditions' => [
- 'id' => $userIds
- ],
- 'recursive' => -1,
- 'fields' => ['id', 'handlename']
- ]);
- $nameWithId = [];
- foreach ($result as $user) {
- $nameWithId[$user['User']['id']] = $user['User']['handlename'];
- }
- foreach ($locations as $key => $location) {
- foreach ($location['approvalUserIds'] as $userId) {
- $location['approvalUserNames'][] = $nameWithId[$userId];
- }
- $locations[$key] = $location;
- }
-
- return $locations;
- }
-}
diff --git a/Controller/ReservationTimeframesController.php b/Controller/ReservationTimeframesController.php
deleted file mode 100644
index c22dfd8..0000000
--- a/Controller/ReservationTimeframesController.php
+++ /dev/null
@@ -1,189 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppController', 'Reservations.Controller');
-
-/**
- * 時間枠設定 Controller
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\Controller
- */
-class ReservationTimeframesController extends ReservationsAppController {
-
-/**
- * layout
- *
- * @var array
- */
- public $layout = 'NetCommons.setting';
-
-/**
- * @var array use models
- */
- public $uses = array(
- 'Reservations.ReservationTimeframe',
- );
-
-/**
- * Components
- *
- * @var array
- */
- public $components = array(
- 'Paginator',
- 'Reservations.ReservationSettings', //NetCommons.Permissionは使わず、独自でやる
- );
-
-/**
- * @var array helpers
- */
- public $helpers = array(
- 'Blocks.BlockTabs', // 設定内容はReservationSettingsComponentにまとめた
- );
-
-/**
- * index
- *
- * @return void
- */
- public function index() {
- $query = array();
-
- //条件
- $conditions = array(
- 'ReservationTimeframe.language_id' => Current::read('Language.id'),
- );
- $query['conditions'] = $conditions;
- $query['order'] = 'ReservationTimeframe.start_time ASC';
- $query['recursive'] = 0;
-
- $this->Paginator->settings = $query;
- $timeframes = $this->Paginator->paginate('ReservationTimeframe');
- $this->set('reservationTimeframes', $timeframes);
- }
-
-/**
- * add method
- *
- * @return void
- */
- public function add() {
- $this->set('isEdit', false);
-
- if ($this->request->is('post')) {
- if ($this->ReservationTimeframe->saveTimeframe($this->request->data)) {
- $url = NetCommonsUrl::actionUrl(
- array(
- 'controller' => 'reservation_timeframes',
- 'action' => 'index',
- 'frame_id' => Current::read('Frame.id'),
- )
- );
- return $this->redirect($url);
- } else {
- $this->NetCommons->handleValidationError($this->ReservationTimeframe->validationErrors);
- }
-
- } else {
- $newTimeframe = $this->ReservationTimeframe->create([
- 'start_time' => '09:00',
- 'end_time' => '18:00',
- 'timezone' => Current::read('User.timezone'),
- ]);
- $this->request->data = $newTimeframe;
- }
-
- $this->view = 'form';
- }
-
-/**
- * edit method
- *
- * @return void
- */
- public function edit() {
- $this->set('isEdit', true);
- $this->set('isDeletable', true);
-
- if ($this->request->is('put')) {
- if ($this->ReservationTimeframe->saveTimeframe($this->request->data)) {
- $url = NetCommonsUrl::actionUrl(
- array(
- 'controller' => 'reservation_timeframes',
- 'action' => 'index',
- 'frame_id' => Current::read('Frame.id'),
- )
- );
- return $this->redirect($url);
- }
- $this->NetCommons->handleValidationError($this->ReservationTimeframe->validationErrors);
-
- } else {
- $timeframe = $this->ReservationTimeframe->find('first', [
- 'recursive' => -1,
- 'conditions' => [
- 'ReservationTimeframe.key' => $this->request->params['key'],
- 'ReservationTimeframe.language_id' => Current::read('Language.id')
- ]
- ]);
- if (empty($timeframe)) {
- return $this->throwBadRequest();
- }
- // start_time, end_timeを時間枠のタイムゾーンに変換してH:i形式へ
- $timeframeTimeZone = new DateTimeZone($timeframe['ReservationTimeframe']['timezone']);
- $startDate = new DateTime(
- $timeframe['ReservationTimeframe']['start_time'], new DateTimeZone('UTC')
- );
-
- $startDate->setTimezone($timeframeTimeZone);
- $timeframe['ReservationTimeframe']['start_time'] = $startDate->format('H:i');
-
- $endDate = new DateTime(
- $timeframe['ReservationTimeframe']['end_time'], new DateTimeZone('UTC')
- );
- $endDate->setTimezone($timeframeTimeZone);
- $timeframe['ReservationTimeframe']['end_time'] = $endDate->format('H:i');
-
- $this->request->data['ReservationTimeframe'] = $timeframe['ReservationTimeframe'];
-
- $this->request->data = $timeframe;
- }
-
- $this->view = 'form';
- }
-
-/**
- * delete method
- *
- * @throws InternalErrorException
- * @return void
- */
- public function delete() {
- if (! $this->request->is('delete')) {
- return $this->throwBadRequest();
- }
-
- if ($this->ReservationTimeframe->deleteTimeframe($this->request->data)) {
- return $this->redirect(
- NetCommonsUrl::actionUrl(
- array(
- 'controller' => 'reservation_timeframes',
- 'action' => 'index',
- 'frame_id' => Current::read('Frame.id'),
- )
- )
- );
- } else {
- return $this->throwBadRequest();
- }
- }
-}
diff --git a/Controller/ReservationsAppController.php b/Controller/ReservationsAppController.php
index 6c93ffb..7c46955 100644
--- a/Controller/ReservationsAppController.php
+++ b/Controller/ReservationsAppController.php
@@ -1,354 +1,7 @@
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
App::uses('AppController', 'Controller');
-App::uses('Space', 'Rooms.Model');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component');
-/**
- * ReservationsApp Controller
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\Controller
- */
class ReservationsAppController extends AppController {
-/**
- * use component
- *
- * @var array
- */
- public $components = array(
- 'Pages.PageLayout',
- 'Security',
- );
-
-/**
- * use models
- *
- * @var array
- */
- public $uses = array(
- 'Blocks.Block',
- 'Reservations.Reservation',
- 'Reservations.ReservationRrule',
- 'Reservations.ReservationEvent',
- 'Reservations.ReservationFrameSetting',
- 'Reservations.ReservationEventShareUser',
- 'Reservations.ReservationEventSelectRoom',
- 'Rooms.Room',
- 'Rooms.RoomsLanguages', //pending
- 'Mails.MailSetting',
- );
-
-/**
- * beforeRender
- *
- * @return void
- */
- public function beforeFilter() {
- parent::beforeFilter();
-
- //NC3の標準のカテゴリーを利用するために、
- //roomId=パブリック、blockId=サイト全体(=パブリック)でひとつ持つ
- //Current::read('Block')を唯一のBlockに置き換える
- $this->Reservation->prepareBlock();
- }
-
-/**
- * getQueryParam
- *
- * 施設予約URLクエリーパラメータ取り出し
- *
- * @param string $paramName 取り出したいパラメータ名
- * @return bool|mixed
- */
- public function getQueryParam($paramName) {
- // ContainerがMainでないときは無視する
- if (Hash::get($this->request->params, 'requested')) {
- return false;
- }
-
- $queryFrameId = Hash::get($this->request->query, 'frame_id');
- if (! $queryFrameId || Current::read('Frame.id') == $queryFrameId) {
- return Hash::get($this->request->query, $paramName);
- }
- return false;
- }
-/**
- * setReservationCommonCurrent
- *
- * 施設予約設定情報設定
- *
- * @param array &$vars 施設予約共通情報
- * @return void
- */
- public function setReservationCommonCurrent(&$vars) {
- $vars['frame_key'] = Current::read('Frame.key');
- $data = $this->ReservationFrameSetting->getFrameSetting();
- Current::$current['ReservationFrameSetting'] = $data['ReservationFrameSetting'];
- }
-
-/**
- * setDateTimeVars
- *
- * 日付時刻変数設定
- *
- * @param array &$vars 施設予約用共通変数
- * @param object &$nctm NetCommonsTimeオブジェクト
- * @return void
- */
- public function setDateTimeVars(&$vars, &$nctm) {
- //現在のユーザTZ「考慮済」年月日時分秒を取得
- $userNowYmdHis = $nctm->toUserDatetime('now');
- $userNowArray = ReservationTime::transFromYmdHisToArray($userNowYmdHis);
- $vars['today'] = $userNowArray;
- //print_r($vars['today']);
- // デフォルト設定
- // 現在年月日
- $vars['year'] = intval($userNowArray['year']);
- $vars['month'] = intval($userNowArray['month']);
-
- $qYear = $this->getQueryParam('year');
- $qMonth = $this->getQueryParam('month');
- $qDay = $this->getQueryParam('day');
- if ($qYear) {
- if ($qYear < ReservationsComponent::CALENDAR_RRULE_TERM_UNTIL_YEAR_MIN) {
- $qYear = ReservationsComponent::CALENDAR_RRULE_TERM_UNTIL_YEAR_MIN;
- } elseif ($qYear > ReservationsComponent::CALENDAR_RRULE_TERM_UNTIL_YEAR_MAX) {
- $qYear = ReservationsComponent::CALENDAR_RRULE_TERM_UNTIL_YEAR_MAX;
- }
- $vars['year'] = intval($qYear);
- }
- if ($qMonth) {
- $vars['month'] = intval($qMonth);
- }
- if ($qDay) {
- $vars['day'] = intval($qDay);
- } else { //省略時は、現在の日を設置
- // 年月の指定がない場合は当日
- if ($qYear == false && $qMonth == false) {
- $vars['day'] = intval($userNowArray['day']);
- } else {
- //月末日は月によって替わるので、すべての月でかならず存在する日(つまり一日)にする。
- $vars['day'] = 1;
- }
- }
-
- $specDate = new DateTime(sprintf('%d-%d-%d', $vars['year'], $vars['month'], $vars['day']));
- $vars['week'] = $specDate->format('w');
-
- ////$vars['dayOfTheWeek'] = date('w', strtotime($userNowYmdHis)); //date()は使わない
- $userTz = (new NetCommonsTime())->getUserTimezone();
- $date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザー系
- $date->setDate($userNowArray['year'], $userNowArray['month'], $userNowArray['day']);
- $date->setTime($userNowArray['hour'], $userNowArray['min'], $userNowArray['sec']);
- $vars['dayOfTheWeek'] = $date->format('w');
- }
-
-/**
- * setReservationCommonVars
- *
- * 施設予約用共通変数設定
- *
- * @param array &$vars 施設予約用共通変数
- * @return void
- */
- public function setReservationCommonVars(&$vars) {
- $this->setReservationCommonCurrent($vars);
- $vars['ReservationFrameSetting'] = Current::read('ReservationFrameSetting');
-
- $nctm = new NetCommonsTime();
-
- //日付時刻変数を設定する
- $this->setDateTimeVars($vars, $nctm);
-
- //戻り先変数を設定する
- //$this->setReturnVars($vars); ※未使用
- //$this->storeRedirectPath($vars);
-
- //mInfo情報
- //月施設予約情報
- ////$vars['mInfo'] = ReservationTime::getMonthlyInfo($vars['year'], $vars['month']);
- //PHP施設予約関数を使用しないgetMonthlyInfoAlt()に変更
- $vars['mInfo'] = (new ReservationTime())->getMonthlyInfoAlt($vars['year'], $vars['month']);
- //前月・当月・次月の祝日情報を取り出す。
- $vars['holidays'] = $this->Holiday->getHoliday(
- sprintf('%04d-%02d-%02d',
- $vars['mInfo']['yearOfPrevMonth'],
- $vars['mInfo']['prevMonth'],
- 1),
- sprintf('%04d-%02d-%02d',
- $vars['mInfo']['yearOfNextMonth'],
- $vars['mInfo']['nextMonth'],
- $vars['mInfo']['daysInNextMonth'])
- );
-
- //前月1日00:00:00以後
- $dtstart = ReservationTime::dt2CalDt(
- $nctm->toServerDatetime(sprintf(
- "%04d-%02d-%02d 00:00:00",
- $vars['mInfo']['yearOfPrevMonth'],
- $vars['mInfo']['prevMonth'],
- 1
- )));
- //次次月1日00:00:00含まずより前(=次月末日23:59:59含みより前)
- list($yearOfNextNextMonth, $nextNextMonth) = ReservationTime::getNextMonth(
- $vars['mInfo']['yearOfNextMonth'],
- $vars['mInfo']['nextMonth']);
- $dtend = ReservationTime::dt2CalDt(
- $nctm->toServerDatetime(sprintf(
- "%04d/%02d/%02d 00:00:00",
- $yearOfNextNextMonth,
- $nextNextMonth,
- 1 )));
- //前月・当月・次月の予定情報を取り出す。
- $planParams = array(
- //'room_id'の取捨選択は、View側でする。
- 'language_id ' => Current::read('Language.id'), //ここで言語を限定している。
- 'dtstart' => $dtstart,
- 'dtend' => $dtend,
- );
-
- //if (isset($vars['sort'])) { //スケジュールでソートする場合
- // if ($vars['sort'] === 'member') { //メンバー順se
- // //$order = array('TrackableCreator' . '.username');
- // $order = array('TrackableCreator' . '.handlename');
- // } else { //時間順
- // $order = array('ReservationEvent' . '.dtstart');
- // }
- //} else {
- $order = array('ReservationEvent' . '.dtstart');
- //}
-
- $vars['parentIdType'] = array( //これも共通なので含めておく。
- 'public' => Space::getRoomIdRoot(Space::PUBLIC_SPACE_ID), //公開
- 'private' => Space::getRoomIdRoot(Space::PRIVATE_SPACE_ID), //プライベート
- 'member' => Space::getRoomIdRoot(Space::COMMUNITY_SPACE_ID), //全会員
- );
-
- //room_idとspace_idの対応表を載せておく。
- $this->__setRoomInfos($vars);
-
- //公開対象一覧のoptions配列と自分自身のroom_idとルーム毎空間名配列を取得
- $this->__setExposeRoomOptionsEtc($vars);
-
- // 施設で絞り込む
- //$locationKey = $this->request->query('location_key');
- if (isset($vars['location_key'])) {
- $planParams['location_key'] = $vars['location_key'];
- }
-
- $vars['plans'] = $this->ReservationEvent->getPlans($vars, $planParams, $order);
- }
-
-/**
- * __setRoomInfos
- *
- * ルーム関連変数の取得とセット
- *
- * @param array &$vars 施設予約用共通変数
- * @return void
- */
- private function __setRoomInfos(&$vars) {
- //room_idとspace_idの対応表を載せておく。
- $rooms = $this->Room->find('all', array(
- 'recursive' => -1,
- 'conditions' => array(
- 'Room.id' => $this->ReservationEvent->getReadableRoomIds()
- ),
- 'order' => array(
- $this->Room->alias . '.id'
- )
- ));
- $vars['roomSpaceMaps'] = Hash::combine($rooms, '{n}.Room.id', '{n}.Room.space_id');
- $roomsLanguages = $this->RoomsLanguages->find('all', array(
- 'conditions' => array(
- 'room_id' => $this->ReservationEvent->getReadableRoomIds(),
- 'language_id' => Current::read('Language.id'),
- ),
- 'recursive' => -1,
- ));
- $vars['roomsLanguages'] = $roomsLanguages;
- }
-
-/**
- * __setExposeRoomOptionsEtc
- *
- * 公開対象一覧のoptions配列と自分自身のroom_idとルーム毎空間名配列を取得
- *
- * @param array &$vars 施設予約用共通変数
- * @return void
- */
- private function __setExposeRoomOptionsEtc(&$vars) {
- //表示方法設定情報を取り出し、
- //公開対象一覧のoptions配列と自分自身のroom_idとルーム毎空間名配列を取得。
- //spaceNameOfRoomsは、ViewのReservationCommon->getPlanMarkClassName()の中で
- //どの画面でも利用するので、共通処理としておく。
- //
- // ε( v ゚ω゚) < このコードはカレンダのまま
- $frameSetting = $this->ReservationFrameSetting->getFrameSetting();
- //公開対象一覧のoptions配列と自分自身のroom_idとルーム毎空間名配列を取得
- list($exposeRoomOptions, $myself, $spaceNameOfRooms, $allRoomNames) =
- $this->ReservationActionPlan->getExposeRoomOptions($frameSetting);
- $vars['exposeRoomOptions'] = $exposeRoomOptions;
- $vars['myself'] = $myself;
- $vars['spaceNameOfRooms'] = $spaceNameOfRooms;
- $vars['allRoomNames'] = $allRoomNames;
- }
-
-/**
- * リダイレクトURLの保存
- *
- * @param array &$vars 施設予約用共通変数
- * @return void
- */
- protected function _storeRedirectPath(&$vars) {
- // 戻り先を保存する必要があるのは
- // 施設予約コントローラーだけです
- if ($this->name != 'Reservations') {
- return;
- }
- // style指定がないときはデフォルト表示にしているときのはずです
- // あるときは特殊画面から移動してます
- $style = $this->getQueryParam('style');
- if ($style) {
- $currentPath = $this->request->here(false);
- } else {
- $currentPath = NetCommonsUrl::backToPageUrl();
- }
- // リダイレクトURLを記録
- $frameId = Current::read('Frame.id');
- $this->Session->write(
- CakeSession::read('Config.userAgent') . 'reservations.' . $frameId, $currentPath
- );
- $vars['returnUrl'] = $currentPath;
- }
-
-/**
- * getMailSettingInfo
- *
- * メール設定情報の取得
- *
- * @return array メール設定情報の配列
- */
- public function getMailSettingInfo() {
- $mailSettingInfo = $this->MailSetting->find('first', array(
- 'conditions' => array(
- $this->MailSetting->alias . '.plugin_key' => 'reservations',
- $this->MailSetting->alias . '.block_key' => Current::read('Block.key'),
- ),
- 'recursive' => 1, //belongTo, hasOne, hasMany まで求める
- ));
- return $mailSettingInfo;
- }
-
}
diff --git a/Controller/ReservationsController.php b/Controller/ReservationsController.php
index b06c2e5..480cd4e 100644
--- a/Controller/ReservationsController.php
+++ b/Controller/ReservationsController.php
@@ -1,544 +1,158 @@
- * @author Ryuji AMANO
+ * @author Ryuji AMANO
* @link http://www.netcommons.org NetCommons Project
* @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
*/
App::uses('ReservationsAppController', 'Reservations.Controller');
-App::uses('NetCommonsTime', 'NetCommons.Utility');
-App::uses('ReservationTime', 'Reservations.Utility');
-App::uses('ReservationPermissiveRooms', 'Reservations.Utility');
+App::uses('CalendarTime', 'Calendars.Utility');
/**
- * ReservationsController
+ * Reservations Controller
*
+ * @author Noriko Arai
* @author Ryuji AMANO
- * @package NetCommons\Reservations\Controller
+ * @link http://www.netcommons.org NetCommons Project
+ * @license http://www.netcommons.org/license.txt NetCommons License
+ * @copyright Copyright 2014, NetCommons Project
*/
class ReservationsController extends ReservationsAppController {
/**
- * use models
- *
- * @var array
+ * @var array use models
*/
public $uses = array(
- 'Reservations.ReservationRrule',
- 'Reservations.ReservationEvent',
- 'Reservations.ReservationFrameSetting',
'Reservations.Reservation',
- 'Reservations.ReservationEventShareUser',
- 'Reservations.ReservationActionPlan', //予定CRUDaction専用
- 'Reservations.ReservationLocation',
- 'Reservations.ReservationLocationsRoom',
- 'Reservations.ReservationLocationReservable',
- 'Reservations.ReservationTimeframe',
- 'Holidays.Holiday',
- 'Rooms.Room',
- 'NetCommons.BackTo',
+ //'Categories.Category',
+ //'Workflow.WorkflowComment',
);
/**
- * use component
- *
- * @var array
+ * @var array helpers
+ */
+ public $helpers = [
+ 'Calendars.CalendarTurnCalendar',
+ 'Calendars.CalendarMonthly',
+
+ 'NetCommons.BackTo',
+ 'NetCommons.NetCommonsForm',
+ 'Workflow.Workflow',
+ 'NetCommons.NetCommonsTime',
+ 'NetCommons.TitleIcon',
+
+ ];
+
+/**
+ * @var array components
*/
- public $components = array(
+ public $components = [
+ 'Calendars.Calendars',
'NetCommons.Permission' => array(
//アクセスの権限
'allow' => array(
- //indexとviewは祖先基底クラスNetCommonsAppControllerで許可済なので、あえて書かない。
- //予定のCRUDはReservationsPlancontrollerが担当。このcontrollerは表示系conroller.とする。
+ 'add,edit,delete' => 'content_creatable',
),
),
- 'Paginator',
- 'Categories.Categories',
- );
-
-/**
- * use helpers
- *
- * @var array
- */
- public $helpers = array(
- //'Workflow.Workflow',
- //'NetCommons.Date',
- //'NetCommons.DisplayNumber',
- //'NetCommons.Button',
- 'Reservations.ReservationMonthly',
- 'Reservations.ReservationTurnReservation',
- 'Reservations.ReservationLegend',
- 'Reservations.ReservationButton',
- 'Reservations.ReservationWeeklyTimeline',
- 'Reservations.ReservationUrl'
- );
+ 'Workflow.Workflow',
-/**
- * beforeRender
- *
- * @return void
- */
- //public function beforeFilter() {
- // parent::beforeFilter();
- //
- // // 以前はここでCurrentのブロックIDをチェックする処理があったが
- // // 施設予約はCurrentのブロックID(=現在表示中ページのブロックID)は
- // // 表示データ上の意味がないのでチェックは行わない
- // // 表示ブロックIDがないときは、パブリックTOPページで仮表示されることに話が決まった
- //
- // //if (! $locations) {
- // // $this->setAction('emptyRender');
- // //}
- //}
+ 'Categories.Categories',
+ 'NetCommons.NetCommonsTime',
+ ];
/**
- * index
+ * 月間カレンダ
*
* @return void
*/
public function index() {
- $vars = array();
- $this->setReservationCommonCurrent($vars);
- $this->ReservationEvent->initSetting($this->Workflow);
-
- $style = $this->getQueryParam('style');
- if (! $style) {
- //style未指定の場合、ReservationFrameSettingモデルのdisplay_type情報から表示するctpを決める。
-
- $displayType = (int)Current::read('ReservationFrameSetting.display_type');
- $style = $this->__getStyleByDisplayType($displayType);
-
- $this->__setDefaultCategoryWhenDispTypeIsCategory($displayType);
- }
-
- $categoryId = Hash::get($this->request->params['named'], 'category_id');
- if ($categoryId === '') {
- // タブ切り替えや前後ページングで'カテゴリ選択'だとcategory_idが空文字になるので
- // そのときはnull(カテゴリの指定無し)にする
- $categoryId = null;
- }
-
- $locations = $this->ReservationLocation->getLocations($categoryId);
-
- if (empty($locations) && $categoryId === null) {
- //施設が1つも登録されてない
- $this->view = 'location_not_found';
- return;
- }
-
- if (empty($locations) && in_array($style,
- [ReservationsComponent::RESERVATION_STYLE_LACATION_WEEKLY,
- ReservationsComponent::RESERVATION_STYLE_LACATION_MONTHLY
- ])) {
-
- $this->NetCommons->setFlashNotification(
- __d('reservations', 'Location not found in select category.'),
- array(
- 'class' => 'info',
- )
- );
-
- $url = array(
- '?' => array(
- 'frame_id' => Current::read('Frame.id'),
- 'style' => $this->request->query('style'),
- 'year' => $this->request->query('year'),
- 'month' => $this->request->query('month'),
- 'day' => $this->request->query('day'),
- )
- );
- $this->redirect($url);
- }
- $this->set('locations', $locations);
-
- $this->_storeRedirectPath($vars);
-
- $roomPermRoles = $this->ReservationEvent->prepareCalRoleAndPerm();
- ReservationPermissiveRooms::setRoomPermRoles($roomPermRoles);
-
- $ctpName = $this->_getCtpAndVars($style, $vars);
-
$frameId = Current::read('Frame.id');
$languageId = Current::read('Language.id');
- $this->set(compact('frameId', 'languageId', 'vars'));
- $this->set('unselectedCategory', $this->ReservationLocation->getCountUnselectedCategory());
- $this->render($ctpName);
-
- //$roomId = Current::read('Room.id');
- //$userId = Current::read('User.id');
- }
-
-/**
- * 時間枠セット
- *
- * @return void
- */
- protected function _setTimeframe() {
- if (Current::read('ReservationFrameSetting.display_timeframe')) {
- $timeframes = $this->ReservationTimeframe->find('all', [
- 'conditions' => [
- 'ReservationTimeframe.language_id' => Current::read('Language.id')
- ]
- ]);
- $this->set('timeframes', $timeframes);
- }
- }
-/**
- * カテゴリ別表がデフォルトのとき、初期表示では表示設定で設定されたカテゴリにする。
- *
- * @return void
- */
- protected function _setDefaultCategory() {
- $categoryId = Current::read('ReservationFrameSetting.category_id');
- //$categoryId = Hash::get($this->params['named'], 'category_id', $categoryId);
- $this->request->param('named.category_id', $categoryId);
- }
-
-/**
- * _getMonthlyVars
- *
- * 月施設予約用変数取得
- *
- * @param array $vars カレンンダー情報
- * @return array $vars 月(縮小用)データ
- */
- protected function _getMonthlyVars($vars) {
- $this->setReservationCommonVars($vars);
- $vars['selectRooms'] = array(); //マージ前の暫定
- return $vars;
- }
-
-/**
- * _getWeeklyVars
- *
- * 週単位変数取得
- *
- * @param array $vars カレンンダー情報
- * @return array $vars 週単位データ
- */
- protected function _getWeeklyVars($vars) {
- $this->setReservationCommonVars($vars);
- $vars['selectRooms'] = array(); //マージ前の暫定
- $vars['week'] = $this->getQueryParam('week');
- return $vars;
- }
-
-/**
- * getDailyListVars
- *
- * 日単位(一覧)用変数取得
- *
- * @param array $vars カレンンダー情報
- * @return array $vars 日単位(一覧)データ
- */
- protected function _getDailyListVars($vars) {
- $this->setReservationCommonVars($vars);
- $vars['tab'] = 'list';
- return $vars;
- }
-
-/**
- * 日単位(タイムライン)用変数取得
- *
- * @param array $vars カレンンダー情報
- * @return array $vars 日単位(タイムライン)データ
- */
- protected function _getDailyTimelineVars($vars) {
- $this->setReservationCommonVars($vars);
- $vars['tab'] = 'timeline';
- return $vars;
- }
-/**
- * 日次施設予約変数取得
- *
- * @param array $vars カレンンダー情報
- * @return array $vars 日次施設予約変数
- */
- protected function _getDailyVars($vars) {
- //$tab = $this->getQueryParam('tab');
- //if ($tab === 'timeline') {
- $vars = $this->_getDailyTimelineVars($vars);
- //} else {
- // $vars = $this->_getDailyListVars($vars);
- //}
+ // TODO パラメータ設定
+ $vars['mInfo'] = [
+ 'yearOfPrevMonth' => 2017,
+ 'prevMonth' => 1,
+ 'daysInPrevMonth' => 31,
+ 'yearOfNextMonth' => 2017,
+ 'nextMonth' => 3,
+ 'daysInNextMonth' => 31,
+ 'year' => 2017,
+ 'month' => 2,
+ 'wdayOf1stDay' => 3,
+ 'daysInMonth' => 28,
+ 'wdayOfLastDay' => 2,
+ 'numOfWeek' => 5,
+ ];
+ $vars['year'] = 2017;
+ $vars['month'] = 2;
+ $vars['day'] = 1;
+ $vars['style'] = [];
+ $vars['today'] = [
+ 'year' => 2017,
+ 'month' => 02,
+ 'day' => 01,
+ 'hour' => 17,
+ 'min' => 28,
+ 'sec' => 36,
+ ];
+ $vars['plans'] = [];
- $vars['selectRooms'] = array(); //マージ前の暫定
+ App::uses('CalendarPermissiveRooms', 'Calendars.Utility');
+ $perm['roomInfos'] =[];
+ CalendarPermissiveRooms::setRoomPermRoles($perm);
- return $vars;
+ $vars['holidays'] = [];
+ $this->set('frameId', $frameId);
+ $this->set('languageId', $languageId);
+ $this->set('vars', $vars);
}
/**
- * getScheduleVars
+ * add method
*
- * スケジュール変数取得
- *
- * @param array $vars カレンンダー情報
- * @return array $vars スケジュール変数
- */
- //public function getScheduleVars($vars) {
- // //$sort = $this->getQueryParam('sort');
- // // スケジュール表示のときだけは直接覗くようにする(正式取得しない)
- // // 理由1:スケジュール表示は左カラムから表示されない
- // // 理由2:スケジュール表示の種別指定パラメータをデフォルト表示のときもqueryに入れている
- // // 理由3:デフォ表示のときrequestedパラメータがないから、まるでよそ様フレーム処理に見える
- // // 上記理由から直接見ないと処理できないし、直接見てもよそ様フレームと混同しないから
- // $sort = $this->request->query['sort'];
- // if ($sort === 'member') {
- // $vars = $this->getMemberScheduleVars($vars);
- // } else {
- // $vars = $this->getTimeScheduleVars($vars);
- // }
- // return $vars;
- //}
-
-/**
- * _getCtpAndVars
- *
- * ctpおよびvars取得
- *
- * @param string $style 表示タイプ
- * @param array &$vars 施設予約共通変数
- * @return string ctpNameを格納したstring
+ * @return void
*/
- protected function _getCtpAndVars($style, &$vars) {
- $vars['style'] = $style;
-
- // プライベートルームか?
- Current::write('Reservations.accessPrivateRoom',
- (Current::read('Room.space_id') == Space::PRIVATE_SPACE_ID));
-
- if (in_array($vars['style'], ReservationsComponent::$stylesByLocation, true)) {
- $locationKey = $this->request->query('location_key');
- if ($locationKey) {
- $vars['location_key'] = $locationKey;
- } else {
- $vars['location_key'] = Current::read(
- 'ReservationFrameSetting.location_key',
- Hash::get($this->viewVars['locations'], '0.ReservationLocation.key')
+ public function add() {
+ $this->set('isEdit', false);
+ //$this->_prepare();
+
+ $reservation = $this->Reservation->create();
+ $this->set('reservation', $reservation);
+
+ if ($this->request->is('post')) {
+ $this->Reservation->create();
+ $this->request->data['Reservation']['blog_key'] =
+ $this->_blogSetting['BlogSetting']['blog_key'];
+
+ // set status
+ $status = $this->Workflow->parseStatus();
+ $this->request->data['Reservation']['status'] = $status;
+
+ // set block_id
+ $this->request->data['Reservation']['block_id'] = Current::read('Block.id');
+ // set language_id
+ $this->request->data['Reservation']['language_id'] = Current::read('Language.id');
+ if (($result = $this->Reservation->saveEntry($this->request->data))) {
+ $url = NetCommonsUrl::actionUrl(
+ array(
+ 'controller' => 'blog_entries',
+ 'action' => 'view',
+ 'block_id' => Current::read('Block.id'),
+ 'frame_id' => Current::read('Frame.id'),
+ 'key' => $result['Reservation']['key'])
);
- }
- // カテゴリ絞り込みの結果、指定した施設がなかったら1番目の施設を選択する。
- $locationList = Hash::combine($this->viewVars['locations'],
- '{n}.ReservationLocation.key',
- '{n}.ReservationLocation.location_name'
- //'{n}.ReservationLocation.category_id'
- );
- if (!isset($locationList[$vars['location_key']])) {
- $vars['location_key'] = Hash::get($this->viewVars['locations'], '0.ReservationLocation.key');
+ return $this->redirect($url);
}
- // ReservationLocation, ReservationReservableを設定する。
- $this->_setupCurrentValues4ByLocation($vars['location_key']);
- } else {
- // ReservationLocation, ReservationReservableを設定する。
- $this->_setupCurrentValues4ByCategory();
- }
-
- switch ($style) {
- case ReservationsComponent::RESERVATION_STYLE_CATEGORY_WEEKLY:
- //カテゴリー別 - 週表示
- $vars = $this->_getWeeklyVars($vars);
- break;
- case ReservationsComponent::RESERVATION_STYLE_CATEGORY_DAILY:
- //カテゴリー別 - 日表示
- $vars = $this->_getDailyVars($vars);
- $this->_setTimeframe();
- break;
- case ReservationsComponent::RESERVATION_STYLE_LACATION_MONTHLY:
- //施設別 - 月表示
- $vars = $this->_getMonthlyVars($vars);
- break;
- case ReservationsComponent::RESERVATION_STYLE_LACATION_WEEKLY:
- //施設別 - 週表示
- $vars = $this->_getWeeklyVars($vars);
- $this->_setTimeframe();
- break;
- }
-
- //if (in_array($vars['style'], ReservationsComponent::$reservationStylesByLocation, true)) {
- // $vars['location_key'] = Hash::get($this->viewVars['locations'], '0.ReservationLocation.key');
- //}
-
- $ctpName = $vars['style'];
- return $ctpName;
- }
-
-/**
- * Current にReservationLocation(施設別表示での施設)ReservationReservable(予約可能な施設があるか)を設定する
- *
- * @param string|null $locationKey 施設別ならReservationLocation.key カテゴリ別ならnull
- * @return void
- */
- protected function _setupCurrentValues4ByLocation($locationKey) {
- // 施設別表時
- $currentLocation = $this->ReservationLocation->find(
- 'first',
- [
- 'conditions' => [
- 'ReservationLocation.key' => $locationKey,
- 'ReservationLocation.language_id' => Current::read('Language.id')
- ]
- ]
- );
- Current::write('ReservationLocation', $currentLocation['ReservationLocation']);
+ $this->NetCommons->handleValidationError($this->Reservation->validationErrors);
- if (Current::read('Reservations.accessPrivateRoom')) {
- // プライベートルーム
- // 個人的な予約OKなら予約可能とする
- Current::write(
- 'ReservationReservable',
- $currentLocation['ReservationLocation']['use_private']
- );
} else {
- //施設への予約権限をセット
- Current::write(
- 'ReservationReservable',
- $this->ReservationLocationReservable->isReservableByLocation($currentLocation)
- );
+ $this->request->data = $reservation;
}
- }
-
-/**
- * Current にReservationLocation(施設別表示での施設)ReservationReservable(予約可能な施設があるか)を設定する
- *
- * @return void
- */
- protected function _setupCurrentValues4ByCategory() {
- // カテゴリ別表時
- // 施設が指定されてないなら、いずれかの施設で予約できれば予約権限ありと判定
- $reservable = false;
- // あらかじめ全施設の権限をロードしておく
- $this->ReservationLocationReservable->loadAll(
- $this->ReservationLocationReservable->getReadableRoomIds()
- );
- foreach ($this->viewVars['locations'] as $location) {
- if (Current::read('Reservations.accessPrivateRoom')) {
- // プライベートルーム
- if ($location['ReservationLocation']['use_private']) {
- $reservable = true;
- }
- } else {
- if ($this->ReservationLocationReservable->isReservableByLocation($location)) {
- $reservable = true;
- }
- }
- }
-
- Current::write('ReservationReservable', $reservable);
- }
-
-/**
- * __setDefaultCategoryWhenDispTypeIsCategory
- *
- * @param int|string $displayType display type
- * @return void
- */
- private function __setDefaultCategoryWhenDispTypeIsCategory($displayType) {
- if (in_array($displayType, [
- ReservationsComponent::RESERVATION_DISP_TYPE_CATEGORY_WEEKLY,
- ReservationsComponent::RESERVATION_DISP_TYPE_CATEGORY_DAILY
- ])) {
- $this->_setDefaultCategory();
- }
- }
-
-/**
- * __getStyleByDisplayType
- *
- * @param int|string $displayType display type
- * @return string
- */
- private function __getStyleByDisplayType($displayType) {
- switch ($displayType) {
- case ReservationsComponent::RESERVATION_DISP_TYPE_CATEGORY_WEEKLY:
- $style = ReservationsComponent::RESERVATION_STYLE_CATEGORY_WEEKLY;
- break;
- case ReservationsComponent::RESERVATION_DISP_TYPE_CATEGORY_DAILY:
- $style = ReservationsComponent::RESERVATION_STYLE_CATEGORY_DAILY;
- break;
- case ReservationsComponent::RESERVATION_DISP_TYPE_LACATION_MONTHLY:
- $style = ReservationsComponent::RESERVATION_STYLE_LACATION_MONTHLY;
- break;
- case ReservationsComponent::RESERVATION_DISP_TYPE_LACATION_WEEKLY:
- $style = ReservationsComponent::RESERVATION_STYLE_LACATION_WEEKLY;
- break;
- default:
- $style = ReservationsComponent::RESERVATION_STYLE_DEFAULT;
- }
- return $style;
- }
-
-/**
- * ajaxで施設の公開先ルームを取得する
- *
- * @return void
- */
- public function fetch_rooms_to_publish_reservation() {
- // get request params
- $locationKey = $this->request->query('location_key');
- // guard
- if (!$this->__validateLocationKey($locationKey)) {
- $this->throwBadRequest();
- return;
- }
- // 公開先ルーム取得
- $rooms = $this->__findRoomsToPublishReservation($locationKey);
- // jsonで返す
- $this->__jsonResponse($rooms);
- }
-
-/**
- * __validateLocationKey
- *
- * @param mixed $locationKey 施設キー
- * @return bool
- */
- private function __validateLocationKey($locationKey) : bool {
- if (!is_string($locationKey)) {
- return false;
- }
- return true;
- }
-
-/**
- * __findRoomsToPublishReservation
- *
- * @param string $locationKey 施設キー
- * @return array
- */
- private function __findRoomsToPublishReservation($locationKey) {
- $userId = Current::read('User.id');
- return $this->ReservationLocationsRoom->getReservableRoomsByLocationKey($locationKey, $userId);
- }
-
-/**
- * __jsonResponse
- *
- * @param array $rooms Room data
- * @return void
- */
- private function __jsonResponse(array $rooms) {
- $result = [];
- $notSpecified = [
- 'roomId' => 0,
- 'name' => __d('reservations', '-- not specified --')
- ];
- $result[] = $notSpecified;
- foreach ($rooms as $room) {
- $result[] = [
- 'room_id' => $room['Room']['id'],
- 'name' => $room['RoomsLanguage'][0]['name']
- ];
- }
- $this->NetCommons->renderJson(['rooms' => $result]);
+ $this->render('form');
}
}
diff --git a/Lib/ReservationLocationOpenText.php b/Lib/ReservationLocationOpenText.php
deleted file mode 100644
index 845e531..0000000
--- a/Lib/ReservationLocationOpenText.php
+++ /dev/null
@@ -1,99 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class ReservationLocationOpenText
- */
-class ReservationLocationOpenText {
-
-/**
- * openTextを返す
- *
- * @param array $reservationLocation 施設データ
- * @return string
- */
- public function openText($reservationLocation) {
- $ret = '';
- $weekDaysOptions = [
- 'Sun' => __d('holidays', 'Sunday'),
- 'Mon' => __d('holidays', 'Monday'),
- 'Tue' => __d('holidays', 'Tuesday'),
- 'Wed' => __d('holidays', 'Wednesday'),
- 'Thu' => __d('holidays', 'Thursday'),
- 'Fri' => __d('holidays', 'Friday'),
- 'Sat' => __d('holidays', 'Saturday'),
- ];
- $timeTable = $reservationLocation['ReservationLocation']['time_table'];
- if ($timeTable === 'Sun|Mon|Tue|Wed|Thu|Fri|Sat') {
- //毎日
- $ret = __d('reservations', '毎日');
- } elseif ($timeTable === 'Mon|Tue|Wed|Thu|Fri') {
- // 平日
- $ret = __d('reservations', '平日');
- } else {
- $timeTable = explode('|', $timeTable);
- $weekList = [];
- foreach ($timeTable as $weekday) {
- if ($weekday) {
- $weekList[] = $weekDaysOptions[$weekday];
- }
- }
- $ret = implode(', ', $weekList);
- }
-
- //時間
- $startTime = $reservationLocation['ReservationLocation']['start_time'];
- $locationTimeZone = new DateTimeZone($reservationLocation['ReservationLocation']['timezone']);
- $startDate = new DateTime($startTime, new DateTimeZone('UTC'));
-
- $startDate->setTimezone($locationTimeZone);
- $reservationLocation['ReservationLocation']['start_time'] = $startDate->format('H:i');
-
- $endTime = $reservationLocation['ReservationLocation']['end_time'];
- $endDate = new DateTime($endTime, new DateTimeZone('UTC'));
- $endDate->setTimezone($locationTimeZone);
- $reservationLocation['ReservationLocation']['end_time'] = $endDate->format('H:i');
- // endで00:00は24:00あつかい
- if ($reservationLocation['ReservationLocation']['end_time'] == '00:00') {
- $reservationLocation['ReservationLocation']['end_time'] = '24:00';
- }
-
- $ret = sprintf('%s %s - %s',
- $ret,
- $reservationLocation['ReservationLocation']['start_time'],
- $reservationLocation['ReservationLocation']['end_time']
- );
- if (Current::read('User.timezone') !=
- $reservationLocation['ReservationLocation']['timezone']) {
- $SiteSetting = new SiteSetting();
- $SiteSetting->prepare();
- $ret .= ' ';
- $ret .= $SiteSetting->defaultTimezones[$reservationLocation['ReservationLocation']['timezone']];
- }
- return $ret;
- }
-
-/**
- * openTextをセットした施設データを返す
- *
- * @param array $reservationLocations 施設データ
- * @return array
- */
- public function openTextAdd($reservationLocations) {
- foreach ($reservationLocations as $key => $value) {
- if (array_key_exists('time_table', $value['ReservationLocation']) &&
- array_key_exists('start_time', $value['ReservationLocation']) &&
- array_key_exists('end_time', $value['ReservationLocation']) &&
- array_key_exists('timezone', $value['ReservationLocation'])) {
- $reservationLocations[$key]['ReservationLocation']['openText'] = $this->openText($value);
- }
- }
- return $reservationLocations;
- }
-}
\ No newline at end of file
diff --git a/Lib/empty b/Lib/empty
new file mode 100644
index 0000000..e69de29
diff --git a/Locale/eng/LC_MESSAGES/empty b/Locale/eng/LC_MESSAGES/empty
new file mode 100644
index 0000000..e69de29
diff --git a/Locale/eng/LC_MESSAGES/reservations.po b/Locale/eng/LC_MESSAGES/reservations.po
deleted file mode 100644
index e5bb8b7..0000000
--- a/Locale/eng/LC_MESSAGES/reservations.po
+++ /dev/null
@@ -1,1105 +0,0 @@
-# LANGUAGE translation of CakePHP Application
-# Copyright YEAR NAME
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
-"Last-Translator: NAME \n"
-"Language-Team: LANGUAGE \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:113
-msgid "Monthly Reservation (small)"
-msgstr ""
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:115
-msgid "Monthly Reservation (large)"
-msgstr ""
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:117
-msgid "Weekly Reservation"
-msgstr ""
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:119
-msgid "Day View"
-msgstr ""
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:121
-msgid "Schedule (ordered-by-time)"
-msgstr ""
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:123
-msgid "Schedule (ordered-by-user)"
-msgstr ""
-
-#: Reservations/Controller/ReservationMailSettingsController.php:127
-#: Reservations/Model/Behavior/ReservationExposeRoomBehavior.php:82;85
-#: Reservations/Model/Behavior/ReservationMailBehavior.php:199
-#: Reservations/View/Elements/ReservationBlockRolePermissions/permission_all_members.ctp:17
-#: Reservations/View/Helper/ReservationCategoryHelper.php:42
-#: Reservations/View/Helper/ReservationDailyHelper.php:45
-#: Reservations/View/Helper/ReservationLegendHelper.php:130
-#: Reservations/View/Helper/ReservationPermissionHelper.php:43
-#: Reservations/View/Helper/ReservationRoomSelectHelper.php:54
-msgid "All the members"
-msgstr ""
-
-#: Reservations/Controller/ReservationPlansController.php:233
-msgid "Delete failed."
-msgstr ""
-
-#: Reservations/Controller/ReservationPlansController.php:419
-#: Reservations/Test/Case/Controller/ReservationPlans/EditTest.php:547
-msgid "Cyclic rules using deadline specified exceeds the maximum number of %d"
-msgstr ""
-
-#: Reservations/Controller/ReservationPlansController.php:426
-msgid "An unknown error occurred."
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:263
-msgid "(GMT-12:00) Eniwetok, Kwajalein"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:265
-msgid "(GMT-11:00) Midway Island, Samoa"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:267
-msgid "(GMT-10:00) Hawaii"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:269
-msgid "(GMT-9:00) Alaska"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:271
-msgid "(GMT-8:00) Pacific Time (US & Canada)"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:273
-msgid "(GMT-7:00) Mountain Time (US & Canada)"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:276
-msgid "(GMT-6:00) Central Time (US & Canada), Mexico City"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:279
-msgid "(GMT-5:00) Eastern Time (US & Canada), Bogota, Lima, Quito"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:282
-msgid "(GMT-4:00) Atlantic Time (Canada), Caracas, La Paz"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:285
-msgid "(GMT-3:30) Newfoundland"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:287
-msgid "(GMT-3:00) Brasilia, Buenos Aires, Georgetown"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:290
-msgid "(GMT-2:00) Mid-Atlantic"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:292
-msgid "(GMT-1:00) Azores, Cape Verde Islands"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:294
-msgid "(GMT) Greenwich Mean Time, London, Dublin, Lisbon, Casablanca, Monrovia"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:297
-msgid "(GMT+1:00) Amsterdam, Berlin, Rome, Copenhagen, Brussels, Madrid, Paris"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:300
-msgid "(GMT+2:00) Athens, Istanbul, Minsk, Helsinki, Jerusalem, South Africa"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:303
-msgid "(GMT+3:00) Baghdad, Kuwait, Riyadh, Moscow, St. Petersburg"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:305
-msgid "(GMT+3:30) Tehran"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:307
-msgid "(GMT+4:00) Abu Dhabi, Muscat, Baku, Tbilisi"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:309
-msgid "(GMT+4:30) Kabul"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:311
-msgid "(GMT+5:00) Ekaterinburg, Islamabad, Karachi, Tashkent"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:314
-msgid "(GMT+5:30) Bombay, Calcutta, Madras, New Delhi"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:317
-msgid "(GMT+6:00) Almaty, Dhaka, Colombo"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:320
-msgid "(GMT+7:00) Bangkok, Hanoi, Jakarta"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:322
-msgid "(GMT+8:00) Beijing, Perth, Singapore, Hong Kong, Urumqi, Taipei"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:325
-msgid "(GMT+9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:327
-msgid "(GMT+9:30) Adelaide, Darwin"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:329
-msgid "(GMT+10:00) Brisbane, Canberra, Melbourne, Sydney, Guam,Vlasdiostok"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:332
-msgid "(GMT+11:00) Magadan, Solomon Islands, New Caledonia"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:334
-msgid "(GMT+12:00) Auckland, Wellington, Fiji, Kamchatka, Marshall Island"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:336
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:327
-msgid "Invalid input. (change of repetition)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:343
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:329;331;333;338
-msgid "Invalid input. (repetition)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:370
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:296;299;301;305;307;309
-msgid "Invalid input. (time)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:378
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:303
-msgid "Invalid input. (year/month/day)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:386
-msgid "Invalid input. (start time)(easy edit mode)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:390
-msgid "Invalid input. (start time and end time)(easy edit mode)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:398
-msgid "Invalid input. (end time)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:404
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:320
-msgid "Invalid input. (start time)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:408
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:322
-msgid "Invalid input. (start day (time) and end day (time))"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:414
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:324
-msgid "Invalid input. (end date)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:434
-#: Reservations/Test/Case/Controller/ReservationPlans/AddTest.php:337
-#: Reservations/Test/Case/Controller/ReservationPlans/EditTest.php:540
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:286
-msgid "Invalid input. (plan title)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:438
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:288
-msgid "%d character limited. (plan title)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:447
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:291
-msgid "%d character limited. (title icon)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:477
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:270
-msgid "Invalid input. (authority)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:484
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:272
-msgid "Invalid input. (timezone)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:491
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:274
-msgid "Invalid input. (detail)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:498
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:276
-msgid "%d character limited. (location)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:506
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:279
-msgid "%d character limited. (contact)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:515
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:282
-msgid "%d character limited. (detail)"
-msgstr ""
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:147
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:103
-msgid "Invalid input. (edit rrule)"
-msgstr ""
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:157
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:105
-msgid "Invalid input. (repeat flag)"
-msgstr ""
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:167
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:107
-msgid "Invalid input. (first sib ebent id)"
-msgstr ""
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:175
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:109
-msgid "Invalid input. (origin event id)"
-msgstr ""
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:183
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:111
-msgid "Invalid input. (recurrence flag)"
-msgstr ""
-
-#: Reservations/Model/ReservationEvent.php:222
-#: Reservations/Test/Case/Model/ReservationEvent/ValidateTest.php:88
-msgid "Please input title text."
-msgstr ""
-
-#: Reservations/Model/ReservationEvent.php:234;244;250;265;271
-#: Reservations/Test/Case/Model/ReservationEvent/ValidateTest.php:92;96;98;102;104;106
-msgid "Invalid value."
-msgstr ""
-
-#: Reservations/Model/ReservationEvent.php:238;254
-#: Reservations/Test/Case/Model/ReservationEvent/ValidateTest.php:94;100
-msgid "Out of range value."
-msgstr ""
-
-#: Reservations/Model/ReservationEvent.php:379;413
-msgid "There is no event. To continue the event in the blank."
-msgstr ""
-
-#: Reservations/Model/ReservationEventContent.php:90
-#: Reservations/Test/Case/Model/ReservationEventContent/ValidateTest.php:80
-msgid "Model Name"
-msgstr ""
-
-#: Reservations/Model/ReservationEventContent.php:98
-#: Reservations/Test/Case/Model/ReservationEventContent/ValidateTest.php:82
-msgid "content key"
-msgstr ""
-
-#: Reservations/Model/ReservationEventContent.php:107
-#: Reservations/Test/Case/Model/ReservationEventContent/ValidateTest.php:84
-msgid "reservation_event id"
-msgstr ""
-
-#: Reservations/Model/ReservationMailSetting.php:82
-#: Reservations/Test/Case/Model/ReservationMailSetting/ValidateTest.php:77
-msgid "Mail Key"
-msgstr ""
-
-#: Reservations/Model/ReservationMailSetting.php:90
-#: Reservations/Test/Case/Model/ReservationMailSetting/ValidateTest.php:79
-msgid "use mail"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationExposeRoomBehavior.php:285
-msgid "Unknown My Room"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationMailBehavior.php:167
-msgid "nothing"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:33
-msgid "Before 0 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:34
-msgid "Before 5 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:35
-msgid "Before 10 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:36
-msgid "Before 15 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:37
-msgid "Before 20 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:38
-msgid "Before 25 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:39
-msgid "Before 30 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:40
-msgid "Before 45 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:41
-msgid "1 hour before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:42
-msgid "2 hours before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:43
-msgid "3 hours before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:44
-msgid "12 hours before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:45
-msgid "24 hours before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:46
-msgid "2 days before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:47
-msgid "1 week before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:48
-msgid "Right now"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:44
-msgid "Input required. (Times repeated)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:51
-msgid "Only numbers can be entered."
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:61
-#: Reservations/Test/Case/Controller/ReservationPlans/AddTest.php:344
-msgid "The number of repetition is %d or more and %d or less."
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:140
-msgid "It is not in the YYYY-MM-DD format."
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:144
-msgid "Invalid input. Day that does not exist has been specified."
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:174
-msgid "Invalid input. Term end date is earlier than the start date."
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:180
-msgid "date that can be specified is %s or more and %s or less."
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:61
-msgid "Invalid input. (repeat interval. Please specify day/week/month/year)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:85
-msgid "Invalid input. (repeat interval: every day)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:109
-msgid "Invalid input. (repeat interval: every week)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:126
-msgid "Invalid input. (repeat interval:week)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:150
-msgid "Invalid input. (repeat interbal:every month)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:182
-msgid "Invalid input. (rrule error. day of the month or date)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:207
-msgid "Invalid input. (rrule error. interval YEARLY)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:217
-msgid "Invalid input. (rrule error. Interval of year. there is no specification of the month.)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:236
-msgid "Invalid input. (rrule error. Interval of year, specified month.)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:249
-msgid "Invalid input. (rrule error. Interval of year. Week of the year unit,week value is invalid.)"
-msgstr ""
-
-#: Reservations/Test/Case/Controller/ReservationPlans/DeleteTest.php:129
-#: Reservations/Test/Case/Controller/ReservationPlans/EditTest.php:327;332;337;343;348;353
-#: Reservations/View/ReservationPlans/delete.ctp:65
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:97
-msgid "only this one"
-msgstr ""
-
-#: Reservations/Test/Case/Controller/Reservations/IndexTest.php:200;205;211;217
-#: Reservations/View/Helper/ReservationScheduleHelper.php:388
-msgid "yesterday"
-msgstr ""
-
-#: Reservations/Utility/ReservationTime.php:509
-msgid "Sun|Mon|Tue|Wed|Thu|Fri|Sat"
-msgstr ""
-
-#: Reservations/View/ReservationMailSettings/edit.ctp:27
-msgid "Please set from Select the room for which you want e-mail notification settings . It will be the setting of one room."
-msgstr ""
-
-#: Reservations/View/ReservationMailSettings/edit.ctp:28
-msgid "Target room"
-msgstr ""
-
-#: Reservations/View/ReservationMailSettings/edit.ctp:49
-msgid "MailSetting.mail_fixed_phrase_body.popover"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/can_not_edit.ctp:14
-msgid "Registration and editing of the plan please go from correctly installed in the reservation on the screen ."
-msgstr ""
-
-#: Reservations/View/ReservationPlans/delete.ctp:14
-msgid "delete"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/delete.ctp:61
-msgid "This plan has been repeatedly set. Select the plan that you want to remove from the following items, please press the delete button.
It can not be undone once you delete."
-msgstr ""
-
-#: Reservations/View/ReservationPlans/delete.ctp:67
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:100
-msgid "all after this one"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/delete.ctp:68
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:101
-msgid "all"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/delete.ctp:78
-msgid "Delete event.
It can not be undone once you delete."
-msgstr ""
-
-#: Reservations/View/ReservationPlans/detail_edit.ctp:91
-msgid "Setting the date"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/detail_edit.ctp:97
-msgid "Setting the time"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:54
-msgid "Date and time"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:62
-msgid " - "
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:74
-msgid "Repeat the event:"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:82
-#: Reservations/View/Helper/ReservationExposeTargetHelper.php:87
-msgid "Category"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:96
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:25
-msgid "Location"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:103
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:35
-#: Reservations/View/Helper/ReservationDailyHelper.php:141
-msgid "Contact"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:110
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:45
-msgid "Details"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:117
-msgid "Author"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:122
-msgid "Date"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:24
-#: Reservations/View/Reservations/smonthly.ctp:36
-#: Reservations/View/Helper/ReservationCommonHelper.php:40;392
-msgid "Sun"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:25
-#: Reservations/View/Reservations/smonthly.ctp:37
-#: Reservations/View/Helper/ReservationCommonHelper.php:40;393
-msgid "Mon"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:26
-#: Reservations/View/Reservations/smonthly.ctp:38
-#: Reservations/View/Helper/ReservationCommonHelper.php:40;394
-msgid "Tue"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:27
-#: Reservations/View/Reservations/smonthly.ctp:39
-#: Reservations/View/Helper/ReservationCommonHelper.php:41;395
-msgid "Wed"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:28
-#: Reservations/View/Reservations/smonthly.ctp:40
-#: Reservations/View/Helper/ReservationCommonHelper.php:41;396
-msgid "Thu"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:29
-#: Reservations/View/Reservations/smonthly.ctp:41
-#: Reservations/View/Helper/ReservationCommonHelper.php:41;397
-msgid "Fri"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:30
-#: Reservations/View/Reservations/smonthly.ctp:42
-#: Reservations/View/Helper/ReservationCommonHelper.php:42;398
-msgid "Sat"
-msgstr ""
-
-#: Reservations/View/Reservations/smonthly.ctp:21
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:128
-msgid "%d/ %d"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationBlockRolePermissions/edit_form.ctp:21
-msgid "Only you can create your private event."
-msgstr ""
-
-#: Reservations/View/Elements/ReservationBlockRolePermissions/permission.ctp:31
-msgid "It does not exist yet Room."
-msgstr ""
-
-#: Reservations/View/Elements/ReservationBlockRolePermissions/permission_table_header.ctp:12
-msgid "Set the permissions that you can add an appointment to the reservation."
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/display_count.ctp:14
-msgid "Display days"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/display_count.ctp:19
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:200
-msgid "%dday(s)"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/edit_form.ctp:32
-msgid "Display type"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/room_select.ctp:26
-msgid "Display only designated room"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/room_select.ctp:33
-msgid "Select room for participation."
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/start_pos.ctp:14
-msgid "Start point"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/start_pos.ctp:20
-#: Reservations/View/Helper/ReservationScheduleHelper.php:390
-msgid "today"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/start_pos.ctp:21
-msgid "Previous day"
-msgstr ""
-
-msgid "Timeline start time"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_datetime.ctp:27
-msgid "From"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_datetime.ctp:39
-msgid "All day"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_datetime.ctp:50
-msgid "-"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_datetime.ctp:63
-msgid "To"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:16
-msgid "detail information"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:60
-#: Reservations/View/Elements/ReservationPlans/edit_timezone.ctp:15
-msgid "Time zone"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_heading.ctp:14
-msgid "Form to edit schedule item"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_heading.ctp:16
-msgid "Form to add schedule item"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:39
-msgid "Event 5 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:40
-msgid "Event 10 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:41
-msgid "Event 15 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:42
-msgid "Event 20 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:43
-msgid "Event 25 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:44
-msgid "Event 30 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:45
-msgid "Event 45 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:46
-msgid "Event 1 hour ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:47
-msgid "Event 2 hours ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:48
-msgid "Event 3 hours ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:49
-msgid "Event 12 hours ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:50
-msgid "Event 24 hours ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:51
-msgid "Event 2 days ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:52
-msgid "Event 1 week ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:16
-msgid "Repeat the event"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:37
-msgid "Units of repeated"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:46
-#: Reservations/View/Elements/Reservations/reservation_tabs.ctp:58;61
-msgid "day"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:47
-#: Reservations/View/Elements/Reservations/reservation_tabs.ctp:49;52
-#: Reservations/View/Helper/ReservationMonthlyHelper.php:374
-msgid "week"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:48
-#: Reservations/View/Elements/Reservations/reservation_tabs.ctp:40;43
-msgid "month"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:49
-msgid "year"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:70
-msgid "every %dday(s)"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:75;103;149;224
-msgid "Repeating pattern"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:109
-msgid "%dweek(s)"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:154
-msgid "every %d month(s)"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:170
-msgid "Please select either."
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:176
-msgid "- select day of the week -"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:192
-msgid "or"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:198
-msgid "- select day of the month -"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:229
-msgid "every %d year(s)"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:247
-msgid "%d"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:263
-msgid "Setting of repeat"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:266
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:196
-msgid "Start date"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:289
-msgid "End date"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:294
-msgid "Times repeated"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:295
-msgid "Day repetition ended"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:335
-msgid "times"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:364
-msgid "until"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/edit_plan_share.ctp:20
-msgid "Please select a person to share the schedule."
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/edit_title.ctp:12
-msgid "Title"
-msgstr ""
-
-#: Reservations/View/Elements/Reservations/change_sort.ctp:45
-msgid "Times"
-msgstr ""
-
-#: Reservations/View/Elements/Reservations/change_sort.ctp:56
-msgid "User"
-msgstr ""
-
-#: Reservations/View/Elements/Reservations/daily_tabs.ctp:49
-msgid "Plan list"
-msgstr ""
-
-#: Reservations/View/Elements/Reservations/daily_tabs.ctp:58
-msgid "Timeline"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationCommonHelper.php:416
-#: Reservations/View/Helper/ReservationLegendHelper.php:180
-#: Reservations/View/Helper/ReservationWeeklyHelper.php:207
-msgid "Schedule of fellow"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationDailyHelper.php:137
-#: Reservations/View/Helper/ReservationScheduleHelper.php:137;228
-msgid "Location details:"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationExposeTargetHelper.php:96
-msgid "You can not change the target space after published."
-msgstr ""
-
-#: Reservations/View/Helper/ReservationLegendHelper.php:108
-msgid "Room"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationLegendHelper.php:153
-msgid "Shared plan"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:112
-msgid "When you select the [all] will be re-set to the contents is repeated first plan."
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:115
-msgid "If you want to edit without changing the schedule key, select "all after this one" and edit."
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:131
-msgid "This plan has been repeatedly set. Select the plan that you want to edit from the following items, Repetation of the plan [only this one] is not displayed."
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:137
-msgid "Because it was specified in the [only this one], repetation of the plan can not be specified."
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:56;85
-msgid "%s/%s/%s"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:61
-msgid "%s:%s"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:239
-msgid "1st week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:241
-msgid "2nd week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:243
-msgid "3rd week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:245
-msgid "4th week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:247
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:324
-msgid "last week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:262
-msgid "Sunday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:265
-msgid "Monday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:268
-msgid "Tuesday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:271
-msgid "Wednesday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:274
-msgid "Thursday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:277
-msgid "Friday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:280
-msgid "Saturday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:71
-msgid "none"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:109
-msgid "|January|February|March|April|May|June|July|August|September|October|November|December"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:134
-msgid "Day %s"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:153
-msgid "Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:190
-msgid "every year"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:192
-msgid "every %s years"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:217
-msgid "every month"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:219
-msgid "every %s months"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:241
-msgid "every week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:243
-msgid "every %s weeks"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:264
-msgid "every day"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:266
-msgid "every %s days"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:285
-msgid "Until Y/m/d"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:288
-msgid "%s times"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:312
-msgid "First week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:315
-msgid "Second week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:318
-msgid "Third week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:321
-msgid "Forth week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationScheduleHelper.php:141;233
-msgid "Contact:"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationScheduleHelper.php:247;291
-msgid "No plan."
-msgstr ""
-
-#: Reservations/View/Helper/ReservationScheduleHelper.php:392
-msgid "tomorrow"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationShareUsersHelper.php:44
-msgid "People to share the schedule"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationShareUsersHelper.php:46
-msgid "Person who made the schedule"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:135
-msgid "%d/%d/%d(%s)
%s"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:165
-msgid "This month"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:168
-msgid "This week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:171
-msgid "Today"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationUrlHelper.php:171
-msgid "Back"
-msgstr ""
-
diff --git a/Locale/jpn/LC_MESSAGES/reservations.po b/Locale/jpn/LC_MESSAGES/reservations.po
deleted file mode 100644
index 72387a5..0000000
--- a/Locale/jpn/LC_MESSAGES/reservations.po
+++ /dev/null
@@ -1,1428 +0,0 @@
-# LANGUAGE translation of CakePHP Application
-# Copyright YEAR NAME
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
-"Last-Translator: NAME \n"
-"Language-Team: LANGUAGE \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-msgid "Weekly Reservation (Category)"
-msgstr "週表示(カテゴリー別)"
-
-msgid "Daily Reservation (Category)"
-msgstr "日表示(カテゴリー別)"
-
-msgid "Monthly Reservation (Location)"
-msgstr "月表示(施設別)"
-
-msgid "Weekly Reservation (Location)"
-msgstr "週表示(施設別)"
-
-msgid "By Category"
-msgstr "カテゴリー別"
-
-msgid "By Location"
-msgstr "施設別"
-
-
-#----- 以下、後で整理
-
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:113
-msgid "Monthly Reservation (small)"
-msgstr "月表示(縮小)"
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:115
-msgid "Monthly Reservation (large)"
-msgstr "月表示(拡大)"
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:117
-msgid "Weekly Reservation"
-msgstr "週表示"
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:119
-msgid "Day View"
-msgstr "日表示"
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:121
-msgid "Schedule (ordered-by-time)"
-msgstr "スケジュール(時間順)"
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:123
-msgid "Schedule (ordered-by-user)"
-msgstr "スケジュール(会員順)"
-
-#: Reservations/Controller/ReservationMailSettingsController.php:127
-#: Reservations/Model/Behavior/ReservationExposeRoomBehavior.php:82;85
-#: Reservations/Model/Behavior/ReservationMailBehavior.php:199
-#: Reservations/View/Elements/ReservationBlockRolePermissions/permission_all_members.ctp:17
-#: Reservations/View/Helper/ReservationCategoryHelper.php:42
-#: Reservations/View/Helper/ReservationDailyHelper.php:45
-#: Reservations/View/Helper/ReservationLegendHelper.php:130
-#: Reservations/View/Helper/ReservationPermissionHelper.php:43
-#: Reservations/View/Helper/ReservationRoomSelectHelper.php:54
-msgid "All the members"
-msgstr "全会員"
-
-#: Reservations/Controller/ReservationPlansController.php:233
-msgid "Delete failed."
-msgstr "削除に失敗しました"
-
-#: Reservations/Controller/ReservationPlansController.php:419
-#: Reservations/Test/Case/Controller/ReservationPlans/EditTest.php:547
-msgid "Cyclic rules using deadline specified exceeds the maximum number of %d"
-msgstr "指定期限まで繰返しルールを適用した場合、最大回数%dを超えます。"
-
-#: Reservations/Controller/ReservationPlansController.php:426
-msgid "An unknown error occurred."
-msgstr "不明なエラーが発生しました。"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:263
-msgid "(GMT-12:00) Eniwetok, Kwajalein"
-msgstr "(GMT-12:00) エニウェトク、クエジェリン"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:265
-msgid "(GMT-11:00) Midway Island, Samoa"
-msgstr "(GMT-11:00) ミッドウェー島、サモア"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:267
-msgid "(GMT-10:00) Hawaii"
-msgstr "(GMT-10:00) ハワイ"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:269
-msgid "(GMT-9:00) Alaska"
-msgstr "(GMT-9:00) アラスカ"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:271
-msgid "(GMT-8:00) Pacific Time (US & Canada)"
-msgstr "(GMT-8:00) 太平洋標準時(米国およびカナダ)、ティファナ"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:273
-msgid "(GMT-7:00) Mountain Time (US & Canada)"
-msgstr "(GMT-7:00) 山地標準時(米国およびカナダ)"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:276
-msgid "(GMT-6:00) Central Time (US & Canada), Mexico City"
-msgstr "(GMT-6:00) 中部標準時(米国およびカナダ)、メキシコシティ"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:279
-msgid "(GMT-5:00) Eastern Time (US & Canada), Bogota, Lima, Quito"
-msgstr "(GMT-5:00) 東部標準時(米国およびカナダ)、ボゴタ、リマ、キト"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:282
-msgid "(GMT-4:00) Atlantic Time (Canada), Caracas, La Paz"
-msgstr "(GMT-4:00) 大西洋標準時(カナダ)、カラカス、ラパス"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:285
-msgid "(GMT-3:30) Newfoundland"
-msgstr "(GMT-3:30) ニューファンドランド"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:287
-msgid "(GMT-3:00) Brasilia, Buenos Aires, Georgetown"
-msgstr "(GMT-3:00) ブラジリア、ブエノスアイレス、ジョージタウン"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:290
-msgid "(GMT-2:00) Mid-Atlantic"
-msgstr "(GMT-2:00) 中央大西洋"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:292
-msgid "(GMT-1:00) Azores, Cape Verde Islands"
-msgstr "(GMT-1:00) アゾレス諸島、カーボベルデ諸島"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:294
-msgid "(GMT) Greenwich Mean Time, London, Dublin, Lisbon, Casablanca, Monrovia"
-msgstr "(GMT) グリニッジ標準時、ダブリン、ロンドン、リスボン、エジンバラ"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:297
-msgid "(GMT+1:00) Amsterdam, Berlin, Rome, Copenhagen, Brussels, Madrid, Paris"
-msgstr "(GMT+1:00) ブリュッセル、コペンハーゲン、マドリッド、パリ、アムステルダム"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:300
-msgid "(GMT+2:00) Athens, Istanbul, Minsk, Helsinki, Jerusalem, South Africa"
-msgstr "(GMT+2:00) アテネ、イスタンブール、エルサレム、カイロ、ヘルシンキ"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:303
-msgid "(GMT+3:00) Baghdad, Kuwait, Riyadh, Moscow, St. Petersburg"
-msgstr "(GMT+3:00) バグダッド、ナイロビ、クウェート、リヤド、モスクワ"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:305
-msgid "(GMT+3:30) Tehran"
-msgstr "(GMT+3:30) テヘラン"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:307
-msgid "(GMT+4:00) Abu Dhabi, Muscat, Baku, Tbilisi"
-msgstr "(GMT+4:00) アブダビ、マスカット、バク、トビリシ"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:309
-msgid "(GMT+4:30) Kabul"
-msgstr "(GMT+4:30) カブール"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:311
-msgid "(GMT+5:00) Ekaterinburg, Islamabad, Karachi, Tashkent"
-msgstr "(GMT+5:00) イスラマバード、カラチ、タシケント、エカテリンバーグ"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:314
-msgid "(GMT+5:30) Bombay, Calcutta, Madras, New Delhi"
-msgstr "(GMT+5:30) カルカッタ、チェンナイ、ムンバイ、ニューデリー"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:317
-msgid "(GMT+6:00) Almaty, Dhaka, Colombo"
-msgstr "(GMT+6:00) ダッカ、アルマティ、スリ・ジャヤワルダナプラ"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:320
-msgid "(GMT+7:00) Bangkok, Hanoi, Jakarta"
-msgstr "(GMT+7:00) バンコク、ハノイ、ジャカルタ"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:322
-msgid "(GMT+8:00) Beijing, Perth, Singapore, Hong Kong, Urumqi, Taipei"
-msgstr "(GMT+8:00) シンガポール、パース、台北、北京、重慶、香港、ウルムチ"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:325
-msgid "(GMT+9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk"
-msgstr "(GMT+9:00) 東京、大阪、札幌、ソウル、ヤクーツク"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:327
-msgid "(GMT+9:30) Adelaide, Darwin"
-msgstr "(GMT+9:30) アデレード、ダーウィン"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:329
-msgid "(GMT+10:00) Brisbane, Canberra, Melbourne, Sydney, Guam,Vlasdiostok"
-msgstr "(GMT+10:00) ウラジオストク、キャンベラ、メルボルン、シドニー、グアム"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:332
-msgid "(GMT+11:00) Magadan, Solomon Islands, New Caledonia"
-msgstr "(GMT+11:00) マガダン、ソロモン諸島、ニューカレドニア"
-
-#: Reservations/Controller/Component/ReservationsComponent.php:334
-msgid "(GMT+12:00) Auckland, Wellington, Fiji, Kamchatka, Marshall Island"
-msgstr "(GMT+12:00) オークランド、ウェリントン、フィジー、カムチャッカ"
-
-#: Reservations/Model/ReservationActionPlan.php:336
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:327
-msgid "Invalid input. (change of repetition)"
-msgstr "繰返しの変更指定が不正です。"
-
-#: Reservations/Model/ReservationActionPlan.php:343
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:329;331;333;338
-msgid "Invalid input. (repetition)"
-msgstr "予約の繰り返し指定が不正です。"
-
-#: Reservations/Model/ReservationActionPlan.php:370
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:296;299;301;305;307;309
-msgid "Invalid input. (time)"
-msgstr "時間の指定が不正です"
-
-#: Reservations/Model/ReservationActionPlan.php:378
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:303
-msgid "Invalid input. (year/month/day)"
-msgstr "予約(年月日)の指定が不正です"
-
-#: Reservations/Model/ReservationActionPlan.php:386
-msgid "Invalid input. (start time)(easy edit mode)"
-msgstr "予約(開始時間)の指定が不正です"
-
-#: Reservations/Model/ReservationActionPlan.php:390
-msgid "Invalid input. (start time and end time)(easy edit mode)"
-msgstr "開始時分と終了時分の並びが不正です"
-
-#: Reservations/Model/ReservationActionPlan.php:398
-msgid "Invalid input. (end time)"
-msgstr "予約(終了時間)の指定が不正です"
-
-#: Reservations/Model/ReservationActionPlan.php:404
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:320
-msgid "Invalid input. (start time)"
-msgstr "開始日(時)が不正です"
-
-#: Reservations/Model/ReservationActionPlan.php:408
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:322
-msgid "Invalid input. (start day (time) and end day (time))"
-msgstr "開始日(時)と終了日(時)の並びが不正です"
-
-#: Reservations/Model/ReservationActionPlan.php:414
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:324
-msgid "Invalid input. (end date)"
-msgstr "終了日(時)が不正です"
-
-#: Reservations/Model/ReservationActionPlan.php:434
-#: Reservations/Test/Case/Controller/ReservationPlans/AddTest.php:337
-#: Reservations/Test/Case/Controller/ReservationPlans/EditTest.php:540
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:286
-msgid "Invalid input. (plan title)"
-msgstr "件名が不正です。"
-
-#: Reservations/Model/ReservationActionPlan.php:438
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:288
-msgid "%d character limited. (plan title)"
-msgstr "件名は最大 %d 文字です。"
-
-#: Reservations/Model/ReservationActionPlan.php:447
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:291
-msgid "%d character limited. (title icon)"
-msgstr "タイトルアイコンは最大 %d 文字です。"
-
-#: Reservations/Model/ReservationActionPlan.php:477
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:270
-msgid "Invalid input. (authority)"
-msgstr "権限が不正です。"
-
-#: Reservations/Model/ReservationActionPlan.php:484
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:272
-msgid "Invalid input. (timezone)"
-msgstr "タイムゾーンが不正です。"
-
-#: Reservations/Model/ReservationActionPlan.php:491
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:274
-msgid "Invalid input. (detail)"
-msgstr "詳細表示の指定が不正です。"
-
-#: Reservations/Model/ReservationActionPlan.php:498
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:276
-msgid "%d character limited. (location)"
-msgstr "場所は最大 %d 文字です。"
-
-#: Reservations/Model/ReservationActionPlan.php:506
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:279
-msgid "%d character limited. (contact)"
-msgstr "連絡先は最大 %d 文字です。"
-
-#: Reservations/Model/ReservationActionPlan.php:515
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:282
-msgid "%d character limited. (detail)"
-msgstr "詳細は最大 %d 文字です。"
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:147
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:103
-msgid "Invalid input. (edit rrule)"
-msgstr "rrule編集指定が不正です"
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:157
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:105
-msgid "Invalid input. (repeat flag)"
-msgstr "イベントの繰り返しフラグが不正です"
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:167
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:107
-msgid "Invalid input. (first sib ebent id)"
-msgstr "先頭のイベントIDが不正です"
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:175
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:109
-msgid "Invalid input. (origin event id)"
-msgstr "オリジナルのイベントIDが不正です"
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:183
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:111
-msgid "Invalid input. (recurrence flag)"
-msgstr "イベントの置換フラグが不正です"
-
-#: Reservations/Model/ReservationEvent.php:222
-#: Reservations/Test/Case/Model/ReservationEvent/ValidateTest.php:88
-msgid "Please input title text."
-msgstr "タイトルを入力してください。"
-
-#: Reservations/Model/ReservationEvent.php:234;244;250;265;271
-#: Reservations/Test/Case/Model/ReservationEvent/ValidateTest.php:92;96;98;102;104;106
-msgid "Invalid value."
-msgstr "値が不正です。"
-
-#: Reservations/Model/ReservationEvent.php:238;254
-#: Reservations/Test/Case/Model/ReservationEvent/ValidateTest.php:94;100
-msgid "Out of range value."
-msgstr "範囲外です。"
-
-#: Reservations/Model/ReservationEvent.php:379;413
-msgid "There is no event. To continue the event in the blank."
-msgstr "対象eventがないのでeventを空にして下に流します。"
-
-#: Reservations/Model/ReservationEventContent.php:90
-#: Reservations/Test/Case/Model/ReservationEventContent/ValidateTest.php:80
-msgid "Model Name"
-msgstr "モデル名"
-
-#: Reservations/Model/ReservationEventContent.php:98
-#: Reservations/Test/Case/Model/ReservationEventContent/ValidateTest.php:82
-msgid "content key"
-msgstr "content key"
-
-#: Reservations/Model/ReservationEventContent.php:107
-#: Reservations/Test/Case/Model/ReservationEventContent/ValidateTest.php:84
-msgid "reservation_event id"
-msgstr "reservation_event id"
-
-#: Reservations/Model/ReservationMailSetting.php:82
-#: Reservations/Test/Case/Model/ReservationMailSetting/ValidateTest.php:77
-msgid "Mail Key"
-msgstr "Mail Key"
-
-#: Reservations/Model/ReservationMailSetting.php:90
-#: Reservations/Test/Case/Model/ReservationMailSetting/ValidateTest.php:79
-msgid "use mail"
-msgstr "メールを使う"
-
-#: Reservations/Model/Behavior/ReservationExposeRoomBehavior.php:285
-msgid "Unknown My Room"
-msgstr "不明なマイルーム"
-
-#: Reservations/Model/Behavior/ReservationMailBehavior.php:167
-msgid "nothing"
-msgstr "なし"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:33
-msgid "Before 0 minutes"
-msgstr "0分前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:34
-msgid "Before 5 minutes"
-msgstr "5分前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:35
-msgid "Before 10 minutes"
-msgstr "10分前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:36
-msgid "Before 15 minutes"
-msgstr "15分前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:37
-msgid "Before 20 minutes"
-msgstr "20分前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:38
-msgid "Before 25 minutes"
-msgstr "25分前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:39
-msgid "Before 30 minutes"
-msgstr "30分前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:40
-msgid "Before 45 minutes"
-msgstr "45分前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:41
-msgid "1 hour before"
-msgstr "1時間前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:42
-msgid "2 hours before"
-msgstr "2時間前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:43
-msgid "3 hours before"
-msgstr "3時間前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:44
-msgid "12 hours before"
-msgstr "12時間前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:45
-msgid "24 hours before"
-msgstr "24時間前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:46
-msgid "2 days before"
-msgstr "2日前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:47
-msgid "1 week before"
-msgstr "1週間前"
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:48
-msgid "Right now"
-msgstr "今すぐ"
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:44
-msgid "Input required. (Times repeated)"
-msgstr "施設予約繰返し回数は必須です。"
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:51
-msgid "Only numbers can be entered."
-msgstr "施設予約繰返し回数は数字のみ可能です。"
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:61
-#: Reservations/Test/Case/Controller/ReservationPlans/AddTest.php:344
-msgid "The number of repetition is %d or more and %d or less."
-msgstr "施設予約繰返し回数は%d以上%d以下です。"
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:140
-msgid "It is not in the YYYY-MM-DD format."
-msgstr "日付形式がYYYY-MM-DD形式ではありません。"
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:144
-msgid "Invalid input. Day that does not exist has been specified."
-msgstr "実在しない日が指定されています。"
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:174
-msgid "Invalid input. Term end date is earlier than the start date."
-msgstr "繰返し期限日が開始日より前になっています。"
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:180
-msgid "date that can be specified is %s or more and %s or less."
-msgstr "指定できる日は%sから%sの間です。"
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:61
-msgid "Invalid input. (repeat interval. Please specify day/week/month/year)"
-msgstr "繰返し指定ありの単位が日、週、月、年のいずれでもありません。"
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:85
-msgid "Invalid input. (repeat interval: every day)"
-msgstr "繰返し指定ありの日単位の日ごとの値が不正です"
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:109
-msgid "Invalid input. (repeat interval: every week)"
-msgstr "繰返し指定ありの週単位の週ごとの値が不正です"
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:126
-msgid "Invalid input. (repeat interval:week)"
-msgstr "繰返し指定ありの週単位の曜日の指定が不正です"
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:150
-msgid "Invalid input. (repeat interbal:every month)"
-msgstr "繰返し指定ありの月単位の月ごとの値が不正です"
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:182
-msgid "Invalid input. (rrule error. day of the month or date)"
-msgstr "繰返し指定ありの月単位の曜日または日付指定の値が不正です"
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:207
-msgid "Invalid input. (rrule error. interval YEARLY)"
-msgstr "繰返し指定ありの年単位の年ごとの値が不正です"
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:217
-msgid "Invalid input. (rrule error. Interval of year. there is no specification of the month.)"
-msgstr "繰返し指定ありの年単位の月が1つも指定されていません"
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:236
-msgid "Invalid input. (rrule error. Interval of year, specified month.)"
-msgstr "繰返し指定ありの年単位の月の指定が不正です"
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:249
-msgid "Invalid input. (rrule error. Interval of year. Week of the year unit,week value is invalid.)"
-msgstr "繰返し指定ありの年単位の週と曜日の値が不正です"
-
-#: Reservations/Test/Case/Controller/ReservationPlans/DeleteTest.php:129
-#: Reservations/Test/Case/Controller/ReservationPlans/EditTest.php:327;332;337;343;348;353
-#: Reservations/View/ReservationPlans/delete.ctp:65
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:97
-msgid "only this one"
-msgstr "この予約のみ"
-
-#: Reservations/Test/Case/Controller/Reservations/IndexTest.php:200;205;211;217
-#: Reservations/View/Helper/ReservationScheduleHelper.php:388
-msgid "yesterday"
-msgstr "昨日"
-
-#: Reservations/Utility/ReservationTime.php:509
-msgid "Sun|Mon|Tue|Wed|Thu|Fri|Sat"
-msgstr "日|月|火|水|木|金|土"
-
-#: Reservations/View/ReservationMailSettings/edit.ctp:27
-msgid "Please set from Select the room for which you want e-mail notification settings. It will be the setting of one room."
-msgstr "メール通知設定を行う対象のルームを選んでから設定してください。1ルームずつの設定となります。"
-
-#: Reservations/View/ReservationMailSettings/edit.ctp:28
-msgid "Target room"
-msgstr "対象のルーム"
-
-#: Reservations/View/ReservationMailSettings/edit.ctp:49
-msgid "MailSetting.mail_fixed_phrase_body.popover"
-msgstr "{X-SITE_NAME} : サイト名
{X-PLUGIN_NAME} : プラグイン名
{X-ROOM} : 公開対象
{X-SUBJECT} : 件名
{X-START_TIME} : 開始日時
{X-END_TIME} : 終了日時
{X-LOCATION} : 場所
{X-CONTACT} : 連絡先
{X-USER} : 記入者
{X-TO_DATE} : 記入日時
{X-RRULE} : 繰返し
{X-BODY} : 詳細
{X-URL} : この予約へのURL"
-
-#: Reservations/View/ReservationPlans/can_not_edit.ctp:14
-msgid "Registration and editing of the plan please go from correctly installed in the reservation on the screen ."
-msgstr "申し訳ありませんが、予約の登録・編集は画面に正しく設置された施設予約から行ってください。"
-
-#: Reservations/View/ReservationPlans/delete.ctp:14
-msgid "delete"
-msgstr "削除処理"
-
-#: Reservations/View/ReservationPlans/delete.ctp:61
-msgid "This plan has been repeatedly set. Select the plan that you want to remove from the following items, please press the delete button.
It can not be undone once you delete."
-msgstr "この予約は繰り返し設定されています。削除する予約を下記項目から選択し、削除ボタンを押してください。
一度削除すると元に戻せません。"
-
-#: Reservations/View/ReservationPlans/delete.ctp:67
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:100
-msgid "all after this one"
-msgstr "これ以降に指定した全ての予約"
-
-#: Reservations/View/ReservationPlans/delete.ctp:68
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:101
-msgid "all"
-msgstr "設定した全ての予約"
-
-#: Reservations/View/ReservationPlans/delete.ctp:78
-msgid "Delete event.
It can not be undone once you delete."
-msgstr "この予約を削除します。
一度削除すると元に戻せません。"
-
-#: Reservations/View/ReservationPlans/detail_edit.ctp:91
-msgid "Setting the date"
-msgstr "予約日の設定"
-
-#: Reservations/View/ReservationPlans/detail_edit.ctp:97
-msgid "Setting the time"
-msgstr "期間・時間の指定"
-
-#: Reservations/View/ReservationPlans/view.ctp:54
-msgid "Date and time"
-msgstr "日時"
-
-#: Reservations/View/ReservationPlans/view.ctp:62
-msgid " - "
-msgstr "-"
-
-#: Reservations/View/ReservationPlans/view.ctp:74
-msgid "Repeat the event:"
-msgstr "※繰返し予約:"
-
-#: Reservations/View/ReservationPlans/view.ctp:82
-#: Reservations/View/Helper/ReservationExposeTargetHelper.php:87
-msgid "Category"
-msgstr "公開対象"
-
-#: Reservations/View/ReservationPlans/view.ctp:96
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:25
-msgid "Location"
-msgstr "施設"
-
-#: Reservations/View/ReservationPlans/view.ctp:103
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:35
-#: Reservations/View/Helper/ReservationDailyHelper.php:141
-msgid "Approver"
-msgstr "施設管理者"
-
-#: Reservations/View/ReservationPlans/view.ctp:110
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:45
-msgid "Details"
-msgstr "詳細"
-
-#: Reservations/View/ReservationPlans/view.ctp:117
-msgid "Author"
-msgstr "作成者"
-
-#: Reservations/View/ReservationPlans/view.ctp:122
-msgid "Date"
-msgstr "更新日時"
-
-#: Reservations/View/Reservations/lmonthly.ctp:24
-#: Reservations/View/Reservations/smonthly.ctp:36
-#: Reservations/View/Helper/ReservationCommonHelper.php:40;392
-msgid "Sun"
-msgstr "日"
-
-#: Reservations/View/Reservations/lmonthly.ctp:25
-#: Reservations/View/Reservations/smonthly.ctp:37
-#: Reservations/View/Helper/ReservationCommonHelper.php:40;393
-msgid "Mon"
-msgstr "月"
-
-#: Reservations/View/Reservations/lmonthly.ctp:26
-#: Reservations/View/Reservations/smonthly.ctp:38
-#: Reservations/View/Helper/ReservationCommonHelper.php:40;394
-msgid "Tue"
-msgstr "火"
-
-#: Reservations/View/Reservations/lmonthly.ctp:27
-#: Reservations/View/Reservations/smonthly.ctp:39
-#: Reservations/View/Helper/ReservationCommonHelper.php:41;395
-msgid "Wed"
-msgstr "水"
-
-#: Reservations/View/Reservations/lmonthly.ctp:28
-#: Reservations/View/Reservations/smonthly.ctp:40
-#: Reservations/View/Helper/ReservationCommonHelper.php:41;396
-msgid "Thu"
-msgstr "木"
-
-#: Reservations/View/Reservations/lmonthly.ctp:29
-#: Reservations/View/Reservations/smonthly.ctp:41
-#: Reservations/View/Helper/ReservationCommonHelper.php:41;397
-msgid "Fri"
-msgstr "金"
-
-#: Reservations/View/Reservations/lmonthly.ctp:30
-#: Reservations/View/Reservations/smonthly.ctp:42
-#: Reservations/View/Helper/ReservationCommonHelper.php:42;398
-msgid "Sat"
-msgstr "土"
-
-#: Reservations/View/Reservations/smonthly.ctp:21
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:128
-msgid "%d/ %d"
-msgstr "%d年 %d月"
-
-#: Reservations/View/Elements/ReservationBlockRolePermissions/edit_form.ctp:21
-msgid "Only you can create your private event."
-msgstr "予約を追加できるのは本人だけです。"
-
-#: Reservations/View/Elements/ReservationBlockRolePermissions/permission.ctp:31
-msgid "It does not exist yet Room."
-msgstr "まだルームが存在しません。"
-
-#: Reservations/View/Elements/ReservationBlockRolePermissions/permission_table_header.ctp:12
-msgid "Set the permissions that you can add an appointment to the reservation."
-msgstr "施設予約に予約を追加できる権限を設定します。"
-
-#: Reservations/View/Elements/ReservationFrameSettings/display_count.ctp:14
-msgid "Display days"
-msgstr "表示日数"
-
-#: Reservations/View/Elements/ReservationFrameSettings/display_count.ctp:19
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:200
-msgid "%dday(s)"
-msgstr "%d日"
-
-#: Reservations/View/Elements/ReservationFrameSettings/edit_form.ctp:32
-msgid "Display type"
-msgstr "表示方法"
-
-#: Reservations/View/Elements/ReservationFrameSettings/room_select.ctp:26
-msgid "Display only designated room"
-msgstr "指定したルームのみ表示する"
-
-#: Reservations/View/Elements/ReservationFrameSettings/room_select.ctp:33
-msgid "Select room for participation."
-msgstr "表示させるルームを選択してください。"
-
-#: Reservations/View/Elements/ReservationFrameSettings/start_pos.ctp:14
-msgid "Start point"
-msgstr "開始位置"
-
-#: Reservations/View/Elements/ReservationFrameSettings/start_pos.ctp:20
-#: Reservations/View/Helper/ReservationScheduleHelper.php:390
-msgid "today"
-msgstr "今日"
-
-#: Reservations/View/Elements/ReservationFrameSettings/start_pos.ctp:21
-msgid "Previous day"
-msgstr "前日"
-
-#: Reservations/View/Elements/ReservationFrameSettings/timeline_start.ctp:13
-msgid "Timeline start time"
-msgstr "タイムライン開始時刻"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_datetime.ctp:27
-msgid "From"
-msgstr "開始"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_datetime.ctp:39
-msgid "All day"
-msgstr "終日"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_datetime.ctp:50
-msgid "-"
-msgstr "-"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_datetime.ctp:63
-msgid "To"
-msgstr "終了"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:16
-msgid "detail information"
-msgstr "詳細な情報の入力"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:60
-#: Reservations/View/Elements/ReservationPlans/edit_timezone.ctp:15
-msgid "Time zone"
-msgstr "タイムゾーン"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_heading.ctp:14
-msgid "Form to edit schedule item"
-msgstr "予約の編集"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_heading.ctp:16
-msgid "Form to add schedule item"
-msgstr "予約の追加"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:39
-msgid "Event 5 minutes ago"
-msgstr "イベント5分前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:40
-msgid "Event 10 minutes ago"
-msgstr "イベント10分前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:41
-msgid "Event 15 minutes ago"
-msgstr "イベント15分前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:42
-msgid "Event 20 minutes ago"
-msgstr "イベント20分前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:43
-msgid "Event 25 minutes ago"
-msgstr "イベント25分前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:44
-msgid "Event 30 minutes ago"
-msgstr "イベント30分前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:45
-msgid "Event 45 minutes ago"
-msgstr "イベント45分前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:46
-msgid "Event 1 hour ago"
-msgstr "イベント1時間前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:47
-msgid "Event 2 hours ago"
-msgstr "イベント2時間前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:48
-msgid "Event 3 hours ago"
-msgstr "イベント3時間前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:49
-msgid "Event 12 hours ago"
-msgstr "イベント12時間前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:50
-msgid "Event 24 hours ago"
-msgstr "イベント24時間前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:51
-msgid "Event 2 days ago"
-msgstr "イベント2日前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:52
-msgid "Event 1 week ago"
-msgstr "イベント1週間前"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:16
-msgid "Repeat the event"
-msgstr "予約を繰り返す"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:37
-msgid "Units of repeated"
-msgstr "繰り返しの単位"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:46
-#: Reservations/View/Elements/Reservations/reservation_tabs.ctp:58;61
-msgid "day"
-msgstr "日"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:47
-#: Reservations/View/Elements/Reservations/reservation_tabs.ctp:49;52
-#: Reservations/View/Helper/ReservationMonthlyHelper.php:374
-msgid "week"
-msgstr "週"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:48
-#: Reservations/View/Elements/Reservations/reservation_tabs.ctp:40;43
-msgid "month"
-msgstr "月"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:49
-msgid "year"
-msgstr "年"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:70
-msgid "every %dday(s)"
-msgstr "%d日ごと"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:75;103;149;224
-msgid "Repeating pattern"
-msgstr "繰り返しのパターン"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:109
-msgid "%dweek(s)"
-msgstr "%d週"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:154
-msgid "every %d month(s)"
-msgstr "%dヶ月ごと"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:170
-msgid "Please select either."
-msgstr "どちらかを選択してください。"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:176
-msgid "- select day of the week -"
-msgstr "-曜日指定-"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:192
-msgid "or"
-msgstr "または"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:198
-msgid "- select day of the month -"
-msgstr "-日付指定-"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:229
-msgid "every %d year(s)"
-msgstr "%d年ごと"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:247
-msgid "%d"
-msgstr "%d月"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:263
-msgid "Setting of repeat"
-msgstr "繰り返しの設定"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:266
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:196
-msgid "Start date"
-msgstr "開始日と同日"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:289
-msgid "End date"
-msgstr "繰返しの終了"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:294
-msgid "Times repeated"
-msgstr "繰返し回数を指定する"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:295
-msgid "Day repetition ended"
-msgstr "繰返しの終了日を指定する"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:335
-msgid "times"
-msgstr "回"
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:364
-msgid "until"
-msgstr "まで繰り返す"
-
-#: Reservations/View/Elements/ReservationPlans/edit_plan_share.ctp:20
-msgid "Please select a person to share the schedule."
-msgstr "予約を共有する人を選択してください。"
-
-#: Reservations/View/Elements/ReservationPlans/edit_title.ctp:12
-msgid "Title"
-msgstr "件名"
-
-#: Reservations/View/Elements/Reservations/change_sort.ctp:45
-msgid "Times"
-msgstr "時間順"
-
-#: Reservations/View/Elements/Reservations/change_sort.ctp:56
-msgid "User"
-msgstr "会員順"
-
-#: Reservations/View/Elements/Reservations/daily_tabs.ctp:49
-msgid "Plan list"
-msgstr "予約一覧"
-
-#: Reservations/View/Elements/Reservations/daily_tabs.ctp:58
-msgid "Timeline"
-msgstr "タイムライン"
-
-#: Reservations/View/Helper/ReservationCommonHelper.php:416
-#: Reservations/View/Helper/ReservationLegendHelper.php:180
-#: Reservations/View/Helper/ReservationWeeklyHelper.php:207
-msgid "Schedule of fellow"
-msgstr "仲間の予約"
-
-#: Reservations/View/Helper/ReservationDailyHelper.php:137
-#: Reservations/View/Helper/ReservationScheduleHelper.php:137;228
-msgid "Location details:"
-msgstr "場所の詳細:"
-
-#: Reservations/View/Helper/ReservationExposeTargetHelper.php:96
-msgid "You can not change the target space after published."
-msgstr "あなたは公開された後の予約の対象空間を変更する権限がありません。"
-
-#: Reservations/View/Helper/ReservationLegendHelper.php:108
-msgid "Room"
-msgstr "ルーム"
-
-#: Reservations/View/Helper/ReservationLegendHelper.php:153
-msgid "Shared plan"
-msgstr "共有した予約"
-
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:112
-msgid "When you select the [all] will be re-set to the contents is repeated first plan."
-msgstr "「設定した全ての予約」を選択すると、現在の編集がキャンセルされ、繰返しの初回予約に再設定されます。"
-
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:115
-msgid "If you want to edit without changing the schedule key, select [all after this one] and edit."
-msgstr "予約のキーを替えずに編集されたい時は、「この予約のみ」を選択して編集してください。"
-
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:131
-msgid "This plan has been repeatedly set. Select the plan that you want to edit from the following items, Repetation of the plan [only this one] is not displayed."
-msgstr "この予約は繰り返し設定されています。変更した予約を下記項目から選択し、予約編集してください。なお「この予約のみ」の時は予約の繰返しは表示されません。"
-
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:137
-msgid "Because it was specified in the [only this one], repetation of the plan can not be specified."
-msgstr "「この予約のみ」指定で変更された予約なので、予約の繰返しは指定できません。"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:56;85
-msgid "%s/%s/%s"
-msgstr "%s年%s月%s日"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:61
-msgid "%s:%s"
-msgstr "%s:%s"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:239
-msgid "1st week"
-msgstr "第1週"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:241
-msgid "2nd week"
-msgstr "第2週"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:243
-msgid "3rd week"
-msgstr "第3週"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:245
-msgid "4th week"
-msgstr "第4週"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:247
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:324
-msgid "last week"
-msgstr "最終週"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:262
-msgid "Sunday"
-msgstr "日曜日"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:265
-msgid "Monday"
-msgstr "月曜日"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:268
-msgid "Tuesday"
-msgstr "火曜日"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:271
-msgid "Wednesday"
-msgstr "水曜日"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:274
-msgid "Thursday"
-msgstr "木曜日"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:277
-msgid "Friday"
-msgstr "金曜日"
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:280
-msgid "Saturday"
-msgstr "土曜日"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:71
-msgid "none"
-msgstr "繰返しなし"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:109
-msgid "|January|February|March|April|May|June|July|August|September|October|November|December"
-msgstr "|1月|2月|3月|4月|5月|6月|7月|8月|9月|10月|11月|12月"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:134
-msgid "Day %s"
-msgstr "%s日"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:153
-msgid "Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday"
-msgstr "日曜日|月曜日|火曜日|水曜日|木曜日|金曜日|土曜日"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:190
-msgid "every year"
-msgstr "毎年"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:192
-msgid "every %s years"
-msgstr "%s年ごとに"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:217
-msgid "every month"
-msgstr "毎月"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:219
-msgid "every %s months"
-msgstr "%sヶ月ごとに"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:241
-msgid "every week"
-msgstr "毎週"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:243
-msgid "every %s weeks"
-msgstr "%s週ごとに"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:264
-msgid "every day"
-msgstr "毎日"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:266
-msgid "every %s days"
-msgstr "%s日ごとに"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:285
-msgid "Until Y/m/d"
-msgstr "Y年m月d日まで"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:288
-msgid "%s times"
-msgstr "%s回"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:312
-msgid "First week"
-msgstr "第1週"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:315
-msgid "Second week"
-msgstr "第2週"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:318
-msgid "Third week"
-msgstr "第3週"
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:321
-msgid "Forth week"
-msgstr "第4週"
-
-#: Reservations/View/Helper/ReservationScheduleHelper.php:141;233
-msgid "Contact"
-msgstr "連絡先"
-
-#: Reservations/View/Helper/ReservationScheduleHelper.php:247;291
-msgid "No plan."
-msgstr "予約はありません。"
-
-#: Reservations/View/Helper/ReservationScheduleHelper.php:392
-msgid "tomorrow"
-msgstr "明日"
-
-#: Reservations/View/Helper/ReservationShareUsersHelper.php:44
-msgid "People to share the schedule"
-msgstr "予約を共有する人"
-
-#: Reservations/View/Helper/ReservationShareUsersHelper.php:46
-msgid "Person who made the schedule"
-msgstr "予約を入れた人"
-
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:135
-msgid "%d/%d/%d(%s)
%s"
-msgstr "%d年 %d月%d日(%s)
%s"
-
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:165
-msgid "This month"
-msgstr "今月へ"
-
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:168
-msgid "This week"
-msgstr "今週へ"
-
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:171
-msgid "Today"
-msgstr "今日へ"
-
-#: Reservations/View/Helper/ReservationUrlHelper.php:171
-msgid "Back"
-msgstr "戻る"
-
-
-
-####### 以下、使われてるか不明
-
-msgid "%d/%d (%s)"
-msgstr "%d月%d日(%s)"
-
-#: View/Helper/ReservationPlanHelper.php:132
-msgid "More details"
-msgstr "詳細な登録"
-
-#: View/Helper/ReservationPlanRruleHelper.php:111
-msgid "%s months"
-msgstr "%s月"
-
-#: View/Helper/ReservationPlanRruleHelper.php:131
-msgid "%s days"
-msgstr "%s日"
-
-#: View/Helper/ReservationTurnReservationHelper.php:160
-msgid "(%s)"
-msgstr "(%s)"
-
-#: View/Helper/ReservationUrlHelper.php:135
-msgid "Back to this month"
-msgstr "今月に戻る"
-
-#: View/Helper/ReservationUrlHelper.php:137
-msgid "Back to this week"
-msgstr "今週に戻る"
-
-#: View/Helper/ReservationUrlHelper.php:139
-msgid "Back to today"
-msgstr "今日に戻る"
-
-#: View/Helper/ReservationUrlHelper.php:141
-msgid "Back to First view"
-msgstr "最初の画面に戻る"
-
-msgid "An unknown error has occurred."
-msgstr "不明なエラーが発生しました。"
-
-#: Controller/ReservationPlansController.php:101
-msgid "There is no block ID. Display a blank page."
-msgstr "ブロックIDがないのでブランクページを表示します"
-
-#: Controller/ReservationPlansController.php:121
-msgid "There is no event. Display a blank page. 1"
-msgstr "対象eventの指定がないのでブランクページを表示します"
-
-#: Controller/ReservationPlansController.php:136;387
-msgid "There is no event. Display a blank page. 2"
-msgstr "対象eventがないのでブランクページを表示します"
-
-#: View/ReservationPlans/daylist.ctp:22
-msgid "back to reservation"
-msgstr "施設予約に戻る"
-
-#: View/ReservationPlans/detail_edit.ctp:990
-msgid "Notify by e-mail"
-msgstr "メールで通知"
-
-#: View/ReservationPlans/detail_edit.ctp:1007
-msgid "e-mail notification before event"
-msgstr "イベント前にメール通知する"
-
-#: View/ReservationPlans/easy_edit.ctp:10
-#: View/ReservationPlans/view.ctp:10
-msgid "Reservation"
-msgstr "施設予約"
-
-#: View/ReservationPlans/easy_edit.ctp:54
-#: View/Elements/ReservationPlans/select_target_to_expose.ctp:68
-msgid "Plans(date)"
-msgstr "予約(年月日)"
-
-#: View/ReservationPlans/easy_edit.ctp:117
-#: View/Elements/ReservationPlans/select_target_to_expose.ctp:118
-msgid "To specify the start time and end time"
-msgstr "開始時間と終了時間の指定"
-
-#: View/ReservationPlans/easy_edit.ctp:128
-msgid "Plans(Start time - End time)"
-msgstr "予約(開始時間~終了時間) "
-
-#: View/ReservationPlans/easy_edit.ctp:212
-#: View/Elements/ReservationPlans/select_target_to_expose.ctp:232
-msgid "E-mail notification timing"
-msgstr "メール通知タイミング"
-
-#: View/ReservationPlans/view.ctp:86
-msgid "End date and time"
-msgstr "終了日時"
-
-msgid "Location setting"
-msgstr "施設設定"
-
-msgid "Location category setting"
-msgstr "施設カテゴリ設定"
-
-msgid "TimeFrame setting"
-msgstr "時間枠設定"
-
-msgid "Import Reservations"
-msgstr "予約のインポート"
-
-msgid "Location name"
-msgstr "施設名"
-
-msgid "Invalid reservation time range."
-msgstr "予約時間の範囲に誤りがあります。予約時間を確認し、正しい時間帯を入力してください。"
-
-msgid "alters by time of use"
-msgstr "閲覧時刻により変動"
-
-msgid "fixed"
-msgstr "時刻を固定"
-
-msgid "Default institution"
-msgstr "最初に表示する施設"
-
-msgid "no category"
-msgstr "カテゴリ無し"
-
-msgid "Display all"
-msgstr "全て表示"
-
-msgid "Available"
-msgstr "利用時間"
-
-msgid "[Available]"
-msgstr "【使用時間】"
-
-msgid "Default category"
-msgstr "最初に表示するカテゴリ"
-
-msgid "Authority"
-msgstr "予約できる権限"
-
-msgid "Select rooms"
-msgstr "予約を受け付けるルーム"
-
-msgid "Allow all the groups to use?"
-msgstr "全てのルームから予約を受け付ける"
-
-msgid "Description"
-msgstr "説明"
-
-msgid "Not specify"
-msgstr "利用時間の制限無し"
-
-msgid "Register Location"
-msgstr "施設登録"
-
-msgid "Allow private use?"
-msgstr "個人的な予約を受け付ける"
-
-msgid "Need approval reservations"
-msgstr "予約に承認が必要"
-
-msgid "No institution yet registered."
-msgstr "施設がありません。"
-
-msgid "Time frame name"
-msgstr "時間枠名"
-
-msgid "Time frame range"
-msgstr "時間範囲"
-
-msgid "Time frame color"
-msgstr "時間枠色"
-
-msgid "%s - %s"
-msgstr "%s 〜 %s"
-
-msgid "Available datetime"
-msgstr "利用可能日時"
-
-msgid "Time Frames setting"
-msgstr "時間枠表示"
-
-msgid "No Timeframes yet registered."
-msgstr "時間枠がありません。"
-
-msgid "Display timeframe"
-msgstr "時間枠を表示する"
-
-msgid "Duplicate time frames."
-msgstr "時間枠が重複しています。"
-
-msgid "TimeFrame"
-msgstr "時間枠"
-
-msgid "Invalid input. Please enter the correct time."
-msgstr "時間の設定に誤りがあります。正しい時間枠を設定してください。"
-
-msgid "Invalid input. Please enter week day."
-msgstr "曜日を選択してください。"
-
-msgid "This mail setting is mail setting common to all facilities. If you select \"Use mail notification function\", "
-"select whether or not to actually mail notification at reservation registration. "
-"In addition, the right to receive notifications is the setting of which privileges to notify of e-mails if you specify a room to be \"published\"."
-msgstr "このメール設定は、全施設共通のメール設定です。
"
-"「メール通知機能を使う」にした場合、実際にメール通知するかどうかは、予約登録時に選択します。
"
-"また、通知を受け取る権限は、「公開対象」でルームを指定した場合にどの権限までメール通知するかの設定です。"
-
-msgid "It has been alreay reserved by someone else.Try different time and date."
-msgstr "既に予約が入っているため、予約できません。"
-
-msgid "Inform other members by e-mail?"
-msgstr "メールで通知する"
-
-msgid "-- search for institutions --"
-msgstr "--施設の絞り込み--"
-
-msgid "Delete all reservation items and import."
-msgstr "公開対象の全予約を削除してインポートする"
-
-msgid "The duplicate subject name and reservation time are disregarded."
-msgstr "件名と予約日時が一致するデータは無視する"
-
-msgid "Please designate CSV file for import."
-msgstr "インポートファイルを指定してください"
-
-msgid "Please select csv file."
-msgstr "CSVファイルを選択してください。"
-
-msgid "Line %d : %s"
-msgstr "%d行目 : %s"
-
-msgid "Registration failed."
-msgstr "登録できませんでした。"
-
-# ===================================
-# CSVインポート画面
-# ===================================
-
-msgid "Download format"
-msgstr "フォーマットのダウンロード"
-
-msgid "/reservations/locale/eng/reservation_import.csv"
-msgstr "/reservations/locale/jpn/reservation_import.csv"
-
-msgid "Explanations of items"
-msgstr "各項目の説明"
-
-msgid "Item"
-msgstr "項目"
-
-msgid "All-day event"
-msgstr "利用時間の制限なし"
-
-msgid "Day"
-msgstr "予約日"
-
-msgid "Start time"
-msgstr "開始時間"
-
-msgid "End time"
-msgstr "終了時間"
-
-msgid "* Mandatory item(s)"
-msgstr "※必須入力項目"
-
-msgid "<Options>
0 : Set event time(default)
1 : All-day event"
-msgstr "<選択肢>
0 : 制限あり(デフォルト)
1 : 制限なし"
-
-msgid "Enter in the form of yyyymmdd.
ex)20170607"
-msgstr "yyyymmdd形式で入力して下さい。
例)20170607"
-
-msgid "Enter in the form of hhnnss.
"
- "ex)090000
* When setting all-day event, enter \'null\' instead."
-msgstr "hhmmss形式で入力して下さい。
"
- "例)090000
※利用時間の制限なしの場合、「null」としてください。"
-
-msgid "Enter in the form of hhnnss.
ex)180000
* When"
- "setting all-day event, enter \'null\' instead."
-msgstr "hhmmss形式で入力して下さい。
例)180000
"
- "※利用時間の制限なしの場合、「null」としてください。"
-
-
-msgid "To see details of import file item settings, please see below.
"
- "Further, for itesm that have no settings, enter 'null' instead of blank spaces.
"
- "Also, in the case of no setting (setting of 'null') or outside range setting, it is changed to 'no setting'."
-msgstr "インポートファイルへの設定項目の詳細は、下記を参照ください。
"
- "なお、各項目を無指定とする場合、空白の代わりに文字列「null」を設定してください。
"
- "また、無指定(「null」指定)または指定外の設定をした場合、未設定 とします。"
-
-msgid "-- not specified --"
-msgstr "-- 指定しない --"
-
-msgid "Location not found in select category."
-msgstr "選択したカテゴリに登録されている施設はありません。"
-
-msgid "No locations are available."
-msgstr "予約可能な施設がありません。"
-
-msgid "Invalid input location"
-msgstr "施設を選択してください。"
-
diff --git a/Locale/reservations.pot b/Locale/reservations.pot
deleted file mode 100644
index e52326f..0000000
--- a/Locale/reservations.pot
+++ /dev/null
@@ -1,1106 +0,0 @@
-# LANGUAGE translation of CakePHP Application
-# Copyright YEAR NAME
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
-"Last-Translator: NAME \n"
-"Language-Team: LANGUAGE \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:113
-msgid "Monthly Reservation (small)"
-msgstr ""
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:115
-msgid "Monthly Reservation (large)"
-msgstr ""
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:117
-msgid "Weekly Reservation"
-msgstr ""
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:119
-msgid "Day View"
-msgstr ""
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:121
-msgid "Schedule (ordered-by-time)"
-msgstr ""
-
-#: Reservations/Controller/ReservationFrameSettingsController.php:123
-msgid "Schedule (ordered-by-user)"
-msgstr ""
-
-#: Reservations/Controller/ReservationMailSettingsController.php:127
-#: Reservations/Model/Behavior/ReservationExposeRoomBehavior.php:82;85
-#: Reservations/Model/Behavior/ReservationMailBehavior.php:199
-#: Reservations/View/Elements/ReservationBlockRolePermissions/permission_all_members.ctp:17
-#: Reservations/View/Helper/ReservationCategoryHelper.php:42
-#: Reservations/View/Helper/ReservationDailyHelper.php:45
-#: Reservations/View/Helper/ReservationLegendHelper.php:130
-#: Reservations/View/Helper/ReservationPermissionHelper.php:43
-#: Reservations/View/Helper/ReservationRoomSelectHelper.php:54
-msgid "All the members"
-msgstr ""
-
-#: Reservations/Controller/ReservationPlansController.php:233
-msgid "Delete failed."
-msgstr ""
-
-#: Reservations/Controller/ReservationPlansController.php:419
-#: Reservations/Test/Case/Controller/ReservationPlans/EditTest.php:547
-msgid "Cyclic rules using deadline specified exceeds the maximum number of %d"
-msgstr ""
-
-#: Reservations/Controller/ReservationPlansController.php:426
-msgid "An unknown error occurred."
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:263
-msgid "(GMT-12:00) Eniwetok, Kwajalein"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:265
-msgid "(GMT-11:00) Midway Island, Samoa"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:267
-msgid "(GMT-10:00) Hawaii"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:269
-msgid "(GMT-9:00) Alaska"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:271
-msgid "(GMT-8:00) Pacific Time (US & Canada)"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:273
-msgid "(GMT-7:00) Mountain Time (US & Canada)"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:276
-msgid "(GMT-6:00) Central Time (US & Canada), Mexico City"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:279
-msgid "(GMT-5:00) Eastern Time (US & Canada), Bogota, Lima, Quito"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:282
-msgid "(GMT-4:00) Atlantic Time (Canada), Caracas, La Paz"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:285
-msgid "(GMT-3:30) Newfoundland"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:287
-msgid "(GMT-3:00) Brasilia, Buenos Aires, Georgetown"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:290
-msgid "(GMT-2:00) Mid-Atlantic"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:292
-msgid "(GMT-1:00) Azores, Cape Verde Islands"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:294
-msgid "(GMT) Greenwich Mean Time, London, Dublin, Lisbon, Casablanca, Monrovia"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:297
-msgid "(GMT+1:00) Amsterdam, Berlin, Rome, Copenhagen, Brussels, Madrid, Paris"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:300
-msgid "(GMT+2:00) Athens, Istanbul, Minsk, Helsinki, Jerusalem, South Africa"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:303
-msgid "(GMT+3:00) Baghdad, Kuwait, Riyadh, Moscow, St. Petersburg"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:305
-msgid "(GMT+3:30) Tehran"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:307
-msgid "(GMT+4:00) Abu Dhabi, Muscat, Baku, Tbilisi"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:309
-msgid "(GMT+4:30) Kabul"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:311
-msgid "(GMT+5:00) Ekaterinburg, Islamabad, Karachi, Tashkent"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:314
-msgid "(GMT+5:30) Bombay, Calcutta, Madras, New Delhi"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:317
-msgid "(GMT+6:00) Almaty, Dhaka, Colombo"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:320
-msgid "(GMT+7:00) Bangkok, Hanoi, Jakarta"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:322
-msgid "(GMT+8:00) Beijing, Perth, Singapore, Hong Kong, Urumqi, Taipei"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:325
-msgid "(GMT+9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:327
-msgid "(GMT+9:30) Adelaide, Darwin"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:329
-msgid "(GMT+10:00) Brisbane, Canberra, Melbourne, Sydney, Guam,Vlasdiostok"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:332
-msgid "(GMT+11:00) Magadan, Solomon Islands, New Caledonia"
-msgstr ""
-
-#: Reservations/Controller/Component/ReservationsComponent.php:334
-msgid "(GMT+12:00) Auckland, Wellington, Fiji, Kamchatka, Marshall Island"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:336
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:327
-msgid "Invalid input. (change of repetition)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:343
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:329;331;333;338
-msgid "Invalid input. (repetition)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:370
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:296;299;301;305;307;309
-msgid "Invalid input. (time)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:378
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:303
-msgid "Invalid input. (year/month/day)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:386
-msgid "Invalid input. (start time)(easy edit mode)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:390
-msgid "Invalid input. (start time and end time)(easy edit mode)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:398
-msgid "Invalid input. (end time)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:404
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:320
-msgid "Invalid input. (start time)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:408
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:322
-msgid "Invalid input. (start day (time) and end day (time))"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:414
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:324
-msgid "Invalid input. (end date)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:434
-#: Reservations/Test/Case/Controller/ReservationPlans/AddTest.php:337
-#: Reservations/Test/Case/Controller/ReservationPlans/EditTest.php:540
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:286
-msgid "Invalid input. (plan title)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:438
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:288
-msgid "%d character limited. (plan title)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:447
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:291
-msgid "%d character limited. (title icon)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:477
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:270
-msgid "Invalid input. (authority)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:484
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:272
-msgid "Invalid input. (timezone)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:491
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:274
-msgid "Invalid input. (detail)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:498
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:276
-msgid "%d character limited. (location)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:506
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:279
-msgid "%d character limited. (contact)"
-msgstr ""
-
-#: Reservations/Model/ReservationActionPlan.php:515
-#: Reservations/Test/Case/Model/ReservationActionPlan/ValidateTest.php:282
-msgid "%d character limited. (detail)"
-msgstr ""
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:147
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:103
-msgid "Invalid input. (edit rrule)"
-msgstr ""
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:157
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:105
-msgid "Invalid input. (repeat flag)"
-msgstr ""
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:167
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:107
-msgid "Invalid input. (first sib ebent id)"
-msgstr ""
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:175
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:109
-msgid "Invalid input. (origin event id)"
-msgstr ""
-
-#: Reservations/Model/ReservationDeleteActionPlan.php:183
-#: Reservations/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php:111
-msgid "Invalid input. (recurrence flag)"
-msgstr ""
-
-#: Reservations/Model/ReservationEvent.php:222
-#: Reservations/Test/Case/Model/ReservationEvent/ValidateTest.php:88
-msgid "Please input title text."
-msgstr ""
-
-#: Reservations/Model/ReservationEvent.php:234;244;250;265;271
-#: Reservations/Test/Case/Model/ReservationEvent/ValidateTest.php:92;96;98;102;104;106
-msgid "Invalid value."
-msgstr ""
-
-#: Reservations/Model/ReservationEvent.php:238;254
-#: Reservations/Test/Case/Model/ReservationEvent/ValidateTest.php:94;100
-msgid "Out of range value."
-msgstr ""
-
-#: Reservations/Model/ReservationEvent.php:379;413
-msgid "There is no event. To continue the event in the blank."
-msgstr ""
-
-#: Reservations/Model/ReservationEventContent.php:90
-#: Reservations/Test/Case/Model/ReservationEventContent/ValidateTest.php:80
-msgid "Model Name"
-msgstr ""
-
-#: Reservations/Model/ReservationEventContent.php:98
-#: Reservations/Test/Case/Model/ReservationEventContent/ValidateTest.php:82
-msgid "content key"
-msgstr ""
-
-#: Reservations/Model/ReservationEventContent.php:107
-#: Reservations/Test/Case/Model/ReservationEventContent/ValidateTest.php:84
-msgid "reservation_event id"
-msgstr ""
-
-#: Reservations/Model/ReservationMailSetting.php:82
-#: Reservations/Test/Case/Model/ReservationMailSetting/ValidateTest.php:77
-msgid "Mail Key"
-msgstr ""
-
-#: Reservations/Model/ReservationMailSetting.php:90
-#: Reservations/Test/Case/Model/ReservationMailSetting/ValidateTest.php:79
-msgid "use mail"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationExposeRoomBehavior.php:285
-msgid "Unknown My Room"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationMailBehavior.php:167
-msgid "nothing"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:33
-msgid "Before 0 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:34
-msgid "Before 5 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:35
-msgid "Before 10 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:36
-msgid "Before 15 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:37
-msgid "Before 20 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:38
-msgid "Before 25 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:39
-msgid "Before 30 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:40
-msgid "Before 45 minutes"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:41
-msgid "1 hour before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:42
-msgid "2 hours before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:43
-msgid "3 hours before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:44
-msgid "12 hours before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:45
-msgid "24 hours before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:46
-msgid "2 days before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:47
-msgid "1 week before"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanOptionBehavior.php:48
-msgid "Right now"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:44
-msgid "Input required. (Times repeated)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:51
-msgid "Only numbers can be entered."
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:61
-#: Reservations/Test/Case/Controller/ReservationPlans/AddTest.php:344
-msgid "The number of repetition is %d or more and %d or less."
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:140
-msgid "It is not in the YYYY-MM-DD format."
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:144
-msgid "Invalid input. Day that does not exist has been specified."
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:174
-msgid "Invalid input. Term end date is earlier than the start date."
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:180
-msgid "date that can be specified is %s or more and %s or less."
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:61
-msgid "Invalid input. (repeat interval. Please specify day/week/month/year)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:85
-msgid "Invalid input. (repeat interval: every day)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:109
-msgid "Invalid input. (repeat interval: every week)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:126
-msgid "Invalid input. (repeat interval:week)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:150
-msgid "Invalid input. (repeat interbal:every month)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:182
-msgid "Invalid input. (rrule error. day of the month or date)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:207
-msgid "Invalid input. (rrule error. interval YEARLY)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:217
-msgid "Invalid input. (rrule error. Interval of year. there is no specification of the month.)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:236
-msgid "Invalid input. (rrule error. Interval of year, specified month.)"
-msgstr ""
-
-#: Reservations/Model/Behavior/ReservationValidateAppBehavior.php:249
-msgid "Invalid input. (rrule error. Interval of year. Week of the year unit,week value is invalid.)"
-msgstr ""
-
-#: Reservations/Test/Case/Controller/ReservationPlans/DeleteTest.php:129
-#: Reservations/Test/Case/Controller/ReservationPlans/EditTest.php:327;332;337;343;348;353
-#: Reservations/View/ReservationPlans/delete.ctp:65
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:97
-msgid "only this one"
-msgstr ""
-
-#: Reservations/Test/Case/Controller/Reservations/IndexTest.php:200;205;211;217
-#: Reservations/View/Helper/ReservationScheduleHelper.php:388
-msgid "yesterday"
-msgstr ""
-
-#: Reservations/Utility/ReservationTime.php:509
-msgid "Sun|Mon|Tue|Wed|Thu|Fri|Sat"
-msgstr ""
-
-#: Reservations/View/ReservationMailSettings/edit.ctp:27
-msgid "Please set from Select the room for which you want e-mail notification settings . It will be the setting of one room."
-msgstr ""
-
-#: Reservations/View/ReservationMailSettings/edit.ctp:28
-msgid "Target room"
-msgstr ""
-
-#: Reservations/View/ReservationMailSettings/edit.ctp:49
-msgid "MailSetting.mail_fixed_phrase_body.popover"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/can_not_edit.ctp:14
-msgid "Registration and editing of the plan please go from correctly installed in the reservation on the screen ."
-msgstr ""
-
-#: Reservations/View/ReservationPlans/delete.ctp:14
-msgid "delete"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/delete.ctp:61
-msgid "This plan has been repeatedly set. Select the plan that you want to remove from the following items, please press the delete button.
It can not be undone once you delete."
-msgstr ""
-
-#: Reservations/View/ReservationPlans/delete.ctp:67
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:100
-msgid "all after this one"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/delete.ctp:68
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:101
-msgid "all"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/delete.ctp:78
-msgid "Delete event.
It can not be undone once you delete."
-msgstr ""
-
-#: Reservations/View/ReservationPlans/detail_edit.ctp:91
-msgid "Setting the date"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/detail_edit.ctp:97
-msgid "Setting the time"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:54
-msgid "Date and time"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:62
-msgid " - "
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:74
-msgid "Repeat the event:"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:82
-#: Reservations/View/Helper/ReservationExposeTargetHelper.php:87
-msgid "Category"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:96
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:25
-msgid "Location"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:103
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:35
-#: Reservations/View/Helper/ReservationDailyHelper.php:141
-msgid "Contact"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:110
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:45
-msgid "Details"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:117
-msgid "Author"
-msgstr ""
-
-#: Reservations/View/ReservationPlans/view.ctp:122
-msgid "Date"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:24
-#: Reservations/View/Reservations/smonthly.ctp:36
-#: Reservations/View/Helper/ReservationCommonHelper.php:40;392
-msgid "Sun"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:25
-#: Reservations/View/Reservations/smonthly.ctp:37
-#: Reservations/View/Helper/ReservationCommonHelper.php:40;393
-msgid "Mon"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:26
-#: Reservations/View/Reservations/smonthly.ctp:38
-#: Reservations/View/Helper/ReservationCommonHelper.php:40;394
-msgid "Tue"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:27
-#: Reservations/View/Reservations/smonthly.ctp:39
-#: Reservations/View/Helper/ReservationCommonHelper.php:41;395
-msgid "Wed"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:28
-#: Reservations/View/Reservations/smonthly.ctp:40
-#: Reservations/View/Helper/ReservationCommonHelper.php:41;396
-msgid "Thu"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:29
-#: Reservations/View/Reservations/smonthly.ctp:41
-#: Reservations/View/Helper/ReservationCommonHelper.php:41;397
-msgid "Fri"
-msgstr ""
-
-#: Reservations/View/Reservations/lmonthly.ctp:30
-#: Reservations/View/Reservations/smonthly.ctp:42
-#: Reservations/View/Helper/ReservationCommonHelper.php:42;398
-msgid "Sat"
-msgstr ""
-
-#: Reservations/View/Reservations/smonthly.ctp:21
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:128
-msgid "%d/ %d"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationBlockRolePermissions/edit_form.ctp:21
-msgid "Only you can create your private event."
-msgstr ""
-
-#: Reservations/View/Elements/ReservationBlockRolePermissions/permission.ctp:31
-msgid "It does not exist yet Room."
-msgstr ""
-
-#: Reservations/View/Elements/ReservationBlockRolePermissions/permission_table_header.ctp:12
-msgid "Set the permissions that you can add an appointment to the reservation."
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/display_count.ctp:14
-msgid "Display days"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/display_count.ctp:19
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:200
-msgid "%dday(s)"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/edit_form.ctp:32
-msgid "Display type"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/room_select.ctp:26
-msgid "Display only designated room"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/room_select.ctp:33
-msgid "Select room for participation."
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/start_pos.ctp:14
-msgid "Start point"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/start_pos.ctp:20
-#: Reservations/View/Helper/ReservationScheduleHelper.php:390
-msgid "today"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/start_pos.ctp:21
-msgid "Previous day"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationFrameSettings/timeline_start.ctp:13
-msgid "Timeline start time"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_datetime.ctp:27
-msgid "From"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_datetime.ctp:39
-msgid "All day"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_datetime.ctp:50
-msgid "-"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_datetime.ctp:63
-msgid "To"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:16
-msgid "detail information"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_etc_details.ctp:60
-#: Reservations/View/Elements/ReservationPlans/edit_timezone.ctp:15
-msgid "Time zone"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_heading.ctp:14
-msgid "Form to edit schedule item"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_heading.ctp:16
-msgid "Form to add schedule item"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:39
-msgid "Event 5 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:40
-msgid "Event 10 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:41
-msgid "Event 15 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:42
-msgid "Event 20 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:43
-msgid "Event 25 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:44
-msgid "Event 30 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:45
-msgid "Event 45 minutes ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:46
-msgid "Event 1 hour ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:47
-msgid "Event 2 hours ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:48
-msgid "Event 3 hours ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:49
-msgid "Event 12 hours ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:50
-msgid "Event 24 hours ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:51
-msgid "Event 2 days ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_mail.ctp:52
-msgid "Event 1 week ago"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:16
-msgid "Repeat the event"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:37
-msgid "Units of repeated"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:46
-#: Reservations/View/Elements/Reservations/reservation_tabs.ctp:58;61
-msgid "day"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:47
-#: Reservations/View/Elements/Reservations/reservation_tabs.ctp:49;52
-#: Reservations/View/Helper/ReservationMonthlyHelper.php:374
-msgid "week"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:48
-#: Reservations/View/Elements/Reservations/reservation_tabs.ctp:40;43
-msgid "month"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:49
-msgid "year"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:70
-msgid "every %dday(s)"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:75;103;149;224
-msgid "Repeating pattern"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:109
-msgid "%dweek(s)"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:154
-msgid "every %d month(s)"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:170
-msgid "Please select either."
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:176
-msgid "- select day of the week -"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:192
-msgid "or"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:198
-msgid "- select day of the month -"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:229
-msgid "every %d year(s)"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:247
-msgid "%d"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:263
-msgid "Setting of repeat"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:266
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:196
-msgid "Start date"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:289
-msgid "End date"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:294
-msgid "Times repeated"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:295
-msgid "Day repetition ended"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:335
-msgid "times"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/detail_edit_repeat_items.ctp:364
-msgid "until"
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/edit_plan_share.ctp:20
-msgid "Please select a person to share the schedule."
-msgstr ""
-
-#: Reservations/View/Elements/ReservationPlans/edit_title.ctp:12
-msgid "Title"
-msgstr ""
-
-#: Reservations/View/Elements/Reservations/change_sort.ctp:45
-msgid "Times"
-msgstr ""
-
-#: Reservations/View/Elements/Reservations/change_sort.ctp:56
-msgid "User"
-msgstr ""
-
-#: Reservations/View/Elements/Reservations/daily_tabs.ctp:49
-msgid "Plan list"
-msgstr ""
-
-#: Reservations/View/Elements/Reservations/daily_tabs.ctp:58
-msgid "Timeline"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationCommonHelper.php:416
-#: Reservations/View/Helper/ReservationLegendHelper.php:180
-#: Reservations/View/Helper/ReservationWeeklyHelper.php:207
-msgid "Schedule of fellow"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationDailyHelper.php:137
-#: Reservations/View/Helper/ReservationScheduleHelper.php:137;228
-msgid "Location details:"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationExposeTargetHelper.php:96
-msgid "You can not change the target space after published."
-msgstr ""
-
-#: Reservations/View/Helper/ReservationLegendHelper.php:108
-msgid "Room"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationLegendHelper.php:153
-msgid "Shared plan"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:112
-msgid "When you select the [all] will be re-set to the contents is repeated first plan."
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:115
-msgid "If you want to edit without changing the schedule key, select "all after this one" and edit."
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:131
-msgid "This plan has been repeatedly set. Select the plan that you want to edit from the following items, Repetation of the plan [only this one] is not displayed."
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanEditRepeatOptionHelper.php:137
-msgid "Because it was specified in the [only this one], repetation of the plan can not be specified."
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:56;85
-msgid "%s/%s/%s"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:61
-msgid "%s:%s"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:239
-msgid "1st week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:241
-msgid "2nd week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:243
-msgid "3rd week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:245
-msgid "4th week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:247
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:324
-msgid "last week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:262
-msgid "Sunday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:265
-msgid "Monday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:268
-msgid "Tuesday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:271
-msgid "Wednesday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:274
-msgid "Thursday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:277
-msgid "Friday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanHelper.php:280
-msgid "Saturday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:71
-msgid "none"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:109
-msgid "|January|February|March|April|May|June|July|August|September|October|November|December"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:134
-msgid "Day %s"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:153
-msgid "Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:190
-msgid "every year"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:192
-msgid "every %s years"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:217
-msgid "every month"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:219
-msgid "every %s months"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:241
-msgid "every week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:243
-msgid "every %s weeks"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:264
-msgid "every day"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:266
-msgid "every %s days"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:285
-msgid "Until Y/m/d"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:288
-msgid "%s times"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:312
-msgid "First week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:315
-msgid "Second week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:318
-msgid "Third week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationPlanRruleHelper.php:321
-msgid "Forth week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationScheduleHelper.php:141;233
-msgid "Contact:"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationScheduleHelper.php:247;291
-msgid "No plan."
-msgstr ""
-
-#: Reservations/View/Helper/ReservationScheduleHelper.php:392
-msgid "tomorrow"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationShareUsersHelper.php:44
-msgid "People to share the schedule"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationShareUsersHelper.php:46
-msgid "Person who made the schedule"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:135
-msgid "%d/%d/%d(%s)
%s"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:165
-msgid "This month"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:168
-msgid "This week"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationTurnReservationHelper.php:171
-msgid "Today"
-msgstr ""
-
-#: Reservations/View/Helper/ReservationUrlHelper.php:171
-msgid "Back"
-msgstr ""
-
diff --git a/Model/Behavior/ReservationAppBehavior.php b/Model/Behavior/ReservationAppBehavior.php
deleted file mode 100644
index 1e180ef..0000000
--- a/Model/Behavior/ReservationAppBehavior.php
+++ /dev/null
@@ -1,562 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ModelBehavior', 'Model');
-//App::uses('ReservationTime', 'Reservations.Utility');
-App::uses('ReservationTime', 'Reservations.Utility');
-App::uses('ReservationSupport', 'Reservations.Utility');
-App::uses('ReservationRruleUtil', 'Reservations.Utility');
-App::uses('WorkflowComponent', 'Workflow.Controller/Component');
-App::uses('ReservationPermissiveRooms', 'Reservations.Utility');
-
-/**
- * ReservationAppBehavior
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- * @SuppressWarnings(PHPMD.NumberOfChildren)
- */
-class ReservationAppBehavior extends ModelBehavior {
- const CALENDAR_PLAN_EDIT_THIS = '0'; //この日の予定のみ変更(削除)
- const CALENDAR_PLAN_EDIT_AFTER = '1'; //この日以降の予定を変更(削除)
- const CALENDAR_PLAN_EDIT_ALL = '2'; //この日を含むすべての予定を変更(削除)
-
- const CALENDAR_PLUGIN_NAME = 'reservation';
- const TASK_PLUGIN_NAME = 'task'; //TODOプラグインに相当
- const RESERVATION_PLUGIN_NAME = 'reservation';
-
- const CALENDAR_LINK_UPDATE = 'update';
- const CALENDAR_LINK_CLEAR = 'clear';
-
- const CALENDAR_INSERT_MODE = 'insert';
- const CALENDAR_UPDATE_MODE = 'update';
-
-
- //以下は暫定定義
- const _ON = 1;
- const _OFF = 0;
-
- const ROOM_ZERO = 0;
-
-/**
- * reservationWdayArray
- *
- * @var array
- */
- public static $reservationWdayArray = array('SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA');
-
-/**
- * edit_rrrule_list
- *
- * @var array
- */
- public static $editRrules = array(
- self::CALENDAR_PLAN_EDIT_THIS,
- self::CALENDAR_PLAN_EDIT_AFTER,
- self::CALENDAR_PLAN_EDIT_ALL
- );
-
-/**
- * beforeValidate is called before a model is validated, you can use this callback to
- * add behavior validation rules into a models validate array. Returning false
- * will allow you to make the validation fail.
- *
- * @param Model $model Model using this behavior
- * @param array $options Options passed from Model::save().
- * @return mixed False or null will abort the operation. Any other result will continue.
- * @see Model::save()
- */
- public function beforeValidate(Model $model, $options = array()) {
- //ReservationEventに移動
- //if ($model->alias == 'ReservationEvent') {
- // ReservationPermissiveRooms::setCurrentPermission($model->data['ReservationEvent']['room_id']);
- //}
- }
-/**
- * Called after data has been checked for errors
- *
- * @param Model $model Model using this behavior
- * @return void
- */
- public function afterValidate(Model $model) {
- if ($model->alias == 'ReservationEvent') {
- //ReservationPermissiveRooms::recoverCurrentPermission();
- }
- }
-
-/**
- * 繰返し専用event登録処理(*event初回登録に使ってはいけません)
- *
- * 毎回 keyをclearしてから登録します。(初回登録から踏襲するのは、status, is_active, is_latestとします)
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams planParams
- * @param array $rruleData rruleData
- * @param array $eventData eventデータ(ReservationEventのモデルデータ)
- * @param string $startTime startTime 開始日付時刻文字列
- * @param string $endTime endTime 開始日付時刻文字列
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return array $rEventData
- * @throws InternalErrorException
- */
- public function insert(Model $model, $planParams, $rruleData, $eventData, $startTime, $endTime,
- $createdUserWhenUpd = null) {
- $this->loadEventAndRruleModels($model);
- $params = array(
- 'conditions' => array(
- 'ReservationRrule.id' => $eventData['ReservationEvent']['reservation_rrule_id']
- ),
- 'recursive' => (-1),
- 'fields' => array('ReservationRrule.*'),
- 'callbacks' => false
- );
- if (empty($this->rruleData)) {
- //ReservationRruleのデータがないので初回アクセス
- //
- $rruleData = $model->ReservationRrule->find('first', $params);
- if (!is_array($rruleData) || !isset($rruleData['ReservationRrule'])) {
- $model->validationErrors =
- Hash::merge($model->validationErrors, $model->ReservationRrule->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- //ReservationRruleのデータを記録し、2度目以降に備える。
- $this->rruleData = $rruleData;
- }
-
- //NC3では内部はサーバー系日付時刻になっているのでtimezoneDateはつかわない.
- //また、引数$starTime, $endTimeはすでに、YmdHis形式で渡されることになっているので、
- //$insertStartTime, $insertEndTimeにそのまま代入する。
- $insertStartTime = $startTime;
- $insertEndTime = $endTime;
-
- //eventDataをもとにrEventDataをつくり、モデルにセット
- $rEventData = $this->setReventData(
- $eventData, $insertStartTime, $insertEndTime, $planParams);
-
- //eventのkeyを新しく採番するため、nullクリアします。
- $rEventData['ReservationEvent']['key'] = null;
-
- //バリデーションエラー含め、モデルの状態リセット
- $model->ReservationEvent->clear();
-
- $model->ReservationEvent->set($rEventData);
- /* FIXME: なぜか子Modelのcontent_key不正がでる。要調査。
- if (!$model->ReservationEvent->validates()) { //rEventDataをチェック
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- */
- //eventの保存。
- //なお、追加情報(workflowcomment)は WFCのafterSave()で自動セットされる。
- //
- if (!$model->ReservationEvent->save(null, false)) { //保存のみ
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //施設予約独自の例外追加1)
- //変更後の公開ルームidが、「元予定生成者の*ルーム」から「編集者・承認者(=ログイン者)の
- //プライベート」に変化していた場合、created_userを、元予定生成者「から」編集者・承認者(=ログイン者)
- //「へ」に変更すること。=>これを考慮したcreatedUserWhenUpdを使えばよい。
- //
- //尚、saveの中で $createdUserWhenUpd を直接セットせず、以下のsaveField(=UPDATE文)を使ったのは
- //WFのbeforeSaveによりセットしたcreatedUserWhenUpd以外の値の書き換えられる可能性があるため。
- //
- if ($model->ReservationEvent->id > 0 && $createdUserWhenUpd !== null) {
- //saveが成功し、かつ、createdUserWhenUpd がnull以外なら、created_userを更新しておく。
- //modifiedも更新されるが、saveの直後なので誤差の範囲として了とする。
- $model->ReservationEvent->saveField('created_user', $createdUserWhenUpd, ['callbacks' => false]);
- //UPDATEでセットしたcreatedUserWhenUpdの値をeventDataに記録しておく
- $rEventData['ReservationEvent']['created_user'] = $createdUserWhenUpd;
- }
-
- //採番されたidをeventDataにセット
- $rEventData['ReservationEvent']['id'] = $model->ReservationEvent->id;
-
- $this->_insertChidren($model, $planParams, $rEventData, $createdUserWhenUpd);
-
- return $rEventData;
- }
-
-/**
- * rEventDataへのデータ設定
- *
- * @param array $eventData 元になるeventData配列
- * @param string $insertStartTime insertStartTime 登録用開始日付時刻文字列
- * @param string $insertEndTime insertEndTime 登録用終了日付時刻文字列
- * @param array $planParams planParamsが渡ってくる。追加拡張を取り出す為に必要。
- * @return array 実際に登録する$rEventData配列を返す
- */
- public function setReventData($eventData, $insertStartTime, $insertEndTime, $planParams) {
- $rEventData = $eventData;
-
- $rEventData['ReservationEvent']['id'] = null; //新規登録用にidにnullセット
-
- $rEventData['ReservationEvent']['start_date'] = substr($insertStartTime, 0, 8);
- $rEventData['ReservationEvent']['start_time'] = substr($insertStartTime, 8);
- $rEventData['ReservationEvent']['dtstart'] = $insertStartTime;
- $rEventData['ReservationEvent']['end_date'] = substr($insertEndTime, 0, 8);
- $rEventData['ReservationEvent']['end_time'] = substr($insertEndTime, 8);
- $rEventData['ReservationEvent']['dtend'] = $insertEndTime;
-
- if (isset($eventData['ReservationEvent']['created_user'])) {
- $rEventData['ReservationEvent']['created_user'] = $eventData['ReservationEvent']['created_user'];
- }
-
- if (isset($eventData['ReservationEvent']['created'])) {
- $rEventData['ReservationEvent']['created'] = $eventData['ReservationEvent']['created'];
- }
-
- if (isset($eventData['ReservationEvent']['modified_user'])) {
- $rEventData['ReservationEvent']['modified_user'] =
- $eventData['ReservationEvent']['modified_user'];
- }
-
- if (isset($eventData['ReservationEvent']['modified'])) {
- $rEventData['ReservationEvent']['modified'] = $eventData['ReservationEvent']['modified'];
- }
-
- //workflowcommentなどの追加拡張データはここで追加する。
- //
- $addInfo = Hash::get($planParams, ReservationsComponent::ADDITIONAL);
- if (! empty($addInfo)) {
- foreach ($addInfo as $modelName => $vals) {
- $rEventData[$modelName] = $vals;
- }
- }
-
- return $rEventData;
- }
-
-/**
- * startDate,startTime,endDate,endTime生成
- *
- * @param string $sTime サーバー系sTime文字列(YmdHis)
- * @param string $eTime サーバー系eTime文字列(YmdHis)
- * @param string $byday byday サーバー系byday日文字列(YmdHis)
- * @param string $userTz userTz ユーザー系タイムゾーンID (Asia/Tokyoなど)
- * @param string &$startDate 生成したサーバー系startDate文字列
- * @param string &$startTime 生成したサーバー系startTime文字列
- * @param string &$endDate 生成したサーバー系endDate文字列
- * @param string &$endTime 生成したサーバー系endTime文字列
- * @return void
- */
- public function setStartDateTiemAndEndDateTime($sTime, $eTime, $byday, $userTz,
- &$startDate, &$startTime, &$endDate, &$endTime) {
- //INPUT引数のsTime, eTime, bydayはサーバー系なので、
- //まずは、それぞれをTZのユーザー系のYmdHisに変換する。
- $userStartTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($sTime));
- $userStartTime = ReservationTime::dt2calDt($userStartTime);
- $userEndTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($eTime));
- $userEndTime = ReservationTime::dt2calDt($userEndTime);
- $userByday = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($byday));
- $userByday = ReservationTime::dt2calDt($userByday);
-
- //施設予約上(=ユーザー系)の開始日の00:00:00のtimestamp取得
- $date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザーTZ系のDateTimeObj生成
- $date->setDate(substr($userStartTime, 0, 4),
- substr($userStartTime, 4, 2), substr($userStartTime, 6, 2));
- $date->setTime(0, 0, 0);
- $startTimestamp = $date->getTimestamp();
-
- //施設予約上(=ユーザー系)の終了日の00:00:00のtimestamp取得
- $date->setDate(substr($userEndTime, 0, 4),
- substr($userEndTime, 4, 2), substr($userEndTime, 6, 2));
- $date->setTime(0, 0, 0);
- $endTimestamp = $date->getTimestamp();
-
- //開始日と終了日の差分の日数(a)を算出
- $diffNum = ($endTimestamp - $startTimestamp) / 86400;
-
- //日付がbyday日で時刻が開始日時刻のタイムスタンプの、「サーバー系」のYmdとHisを取得する
- //
- $sdate = new DateTime('now', (new DateTimeZone($userTz))); //ユーザーTZ系のDateTimeObj生成
- $sdate->setDate(substr($userByday, 0, 4),
- substr($userByday, 4, 2), substr($userByday, 6, 2));
- $sdate->setTime(substr($userStartTime, 8, 2),
- substr($userStartTime, 10, 2), substr($userStartTime, 12, 2));
- $sdate->setTimezone(new DateTimeZone('UTC')); //サーバーTZに切り替える
- $startDate = $sdate->format('Ymd'); //サーバー系の開始日付時刻のYmd
- $startTime = $sdate->format('His'); //サーバー系の開始日付時刻のHis
-
- //月がbyday月、日がbyday日+差分日数(a)で時刻が終了日時刻のタイムスタンプの、「サーバー系」のYmdとHisを取得する
- //
- $edate = new DateTime('now', (new DateTimeZone($userTz))); //ユーザーTZ系のDateTimeObj生成
- $edate->setDate(substr($userByday, 0, 4),
- substr($userByday, 4, 2), substr($userByday, 6, 2) + $diffNum);
- $edate->setTime(substr($userEndTime, 8, 2),
- substr($userEndTime, 10, 2), substr($userEndTime, 12, 2));
- $edate->setTimezone(new DateTimeZone('UTC')); //サーバーTZに切り替える
- $endDate = $edate->format('Ymd'); //サーバー系の終了日付時刻のYmd
- $endTime = $edate->format('His'); //サーバー系の終了日付時刻のHis
- }
-
-/**
- * RruleDataへのデータ設定
- *
- * @param Model $model model
- * @param array $planParams 予定パラメータ
- * @param array &$rruleData rruleデータ
- * @param string $mode mode insert時:self::CALENDAR_INSERT_MODE(デフォルト値) update時:self::CALENDAR_UPDATE_MODE
- * @param string $rruleKey rruleKey 未指定時はnull. null以外の文字列の時はこのkeyを使う。
- * @param int $rruleId rruleId updateの時、このrruleIdをidに使う
- * @return void
- */
- public function setRruleData($model, $planParams, &$rruleData,
- $mode = self::CALENDAR_INSERT_MODE, $rruleKey = null, $rruleId = 0) {
- if (!(isset($model->Reservation))) {
- $model->loadModels(['Reservation' => 'Reservations.Reservation']);
- }
- $blockKey = Current::read('Block.key');
- $reservation = $model->Reservation->findByBlockKey($blockKey); //find('first'形式で返る
- $reservationId = 1; //暫定初期値
- if (!empty($reservation['Reservation']['id'])) {
- $reservationId = $reservation['Reservation']['id'];
- }
- //CakeLog::debug("DBG: blockKey[" . $blockKey . "] reservation[" . print_r($reservation, true) .
- // "] reservationId[" . $reservationId . "]");
-
- $params = array(
- 'reservation_id' => $reservationId,
- 'name' => '',
- 'rrule' => '',
- 'ireservation_uid' => ReservationRruleUtil::generateIcalUid(
- $planParams['start_date'], $planParams['start_time']),
- 'ireservation_comp_name' => self::CALENDAR_PLUGIN_NAME,
- 'room_id' => Current::read('Room.id'), //FIXME: eventのroom_idと合わせるべきでは?
- //'language_id' => Current::read('Language.id'),
- //'status' => WorkflowComponent::STATUS_IN_DRAFT,
- );
-
- foreach ($planParams as $key => $val) {
- if (isset($params[$key])) {
- $params[$key] = $val;
- }
- }
-
- //レコード $rrule_data の初期化と'ReservationRrule'キーセットはおわっているので省略
- //rruleDataに詰める。
-
- //INSERT_MODEの時はidは自動採番されるので、セット不要
- if ($mode === self::CALENDAR_UPDATE_MODE && $rruleId !== 0) {
- //UPDATE_MODEの時は、更新対象のrruleIdを指定
- $rruleData['ReservationRrule']['id'] = $rruleId;
- }
-
- $rruleData['ReservationRrule']['reservation_id'] = $params['reservation_id'];
- $rruleData['ReservationRrule']['name'] = $params['name'];
- if ($rruleKey !== null) {
- $rruleData['ReservationRrule']['key'] = $rruleKey;
- }
- $rruleData['ReservationRrule']['rrule'] = $params['rrule'];
- if ($mode === self::CALENDAR_INSERT_MODE) {
- $rruleData['ReservationRrule']['ireservation_uid'] = $params['ireservation_uid'];
- $rruleData['ReservationRrule']['ireservation_comp_name'] = $params['ireservation_comp_name'];
- }
- $rruleData['ReservationRrule']['room_id'] = $params['room_id'];
- ////$rruleData['ReservationRrule']['language_id'] = $params['language_id'];
- ////$rruleData['ReservationRrule']['status'] = $params['status'];
- //is_active,is_latestは、Workflowが自動セット -> is_xxxは項目削除した。
- //create_user, created, modified_user, modifiedは、Trackableが自動セット
- }
-
-/**
- * setPlanParams2Params
- *
- * planParamsからparamsへの設定
- *
- * @param array &$planParams 予定パラメータ
- * @param array &$params paramsパラメータ
- * @return void
- */
- public function setPlanParams2Params(&$planParams, &$params) {
- $keys = array(
- 'title',
- 'title_icon',
- 'location',
- 'contact',
- 'description',
- 'is_allday',
- 'timezone',
- 'linked_model',
- 'linked_content_key',
- 'enable_email',
- 'email_send_timing',
- );
- foreach ($keys as $key) {
- if (isset($planParams[$key])) {
- $params[$key] = $planParams[$key];
- }
- }
- }
-
-/**
- * eventDataへのデータ設定
- *
- * @param array $planParams 予定パラメータ
- * @param array $rruleData rruleDataパラメータ
- * @param array &$eventData eventデータ
- * @return void
- */
- public function setEventData($planParams, $rruleData, &$eventData) {
- //
- //補足)ここでは、idとkeyは一切セットしていない。なので、$eventDataに値がなければ
- //新規生成されるし、あればその値がそのまま利用されます。
- //
- //初期化
- $params = array(
- 'reservation_rrule_id' => $rruleData['ReservationRrule']['id'], //外部キーをセット
- //keyは、Workflowが自動セット
- ////'room_id' => $rruleData['ReservationRrule']['room_id'], //rruleDataにroom_idがあるのはおかしい。
- 'room_id' => $planParams['room_id'], //画面で指定したroom_idとなるように修正.
- 'language_id' => Current::read('Language.id'),
- 'target_user' => Current::read('User.id'),
- 'title' => '',
- 'title_icon' => '',
- 'location' => '',
- 'contact' => '',
- 'description' => '',
- 'is_allday' => self::_OFF,
- 'start_date' => $planParams['start_date'],
- 'start_time' => $planParams['start_time'],
- 'dtstart' => $planParams['start_date'] . $planParams['start_time'],
- 'end_date' => $planParams['end_date'],
- 'end_time' => $planParams['end_time'],
- 'dtend' => $planParams['end_date'] . $planParams['end_time'],
- 'timezone' => $planParams['timezone'],
- 'timezone' => Hash::get($planParams, 'timezone'),
- 'status' => $planParams['status'],
- 'enable_email' => $planParams['enable_email'],
- 'email_send_timing' => $planParams['email_send_timing'],
-
- 'linked_model' => '',
- 'linked_content_key' => '',
- 'location_key' => $planParams['location_key'],
- );
-
- $this->setPlanParams2Params($planParams, $params);
-
- //レコード $event_data の初期化と'ReservationEvent'キーセットはおわっているので省略
- //$eventData = array();
- //$eventData['ReservationEvent'] = array();
-
- //eventを詰める。
- //$eventData['ReservationEvent']['id'] = null; //create()の後なので、不要。
- $eventData['ReservationEvent']['reservation_rrule_id'] = $params['reservation_rrule_id'];
- $eventData['ReservationEvent']['room_id'] = $params['room_id'];
- $eventData['ReservationEvent']['language_id'] = $params['language_id'];
- $eventData['ReservationEvent']['target_user'] = $params['target_user'];
- $eventData['ReservationEvent']['title'] = $params['title'];
- $eventData['ReservationEvent']['title_icon'] = $params['title_icon'];
- $eventData['ReservationEvent']['is_allday'] = $params['is_allday'];
- $eventData['ReservationEvent']['start_date'] = $params['start_date'];
- $eventData['ReservationEvent']['start_time'] = $params['start_time'];
- $eventData['ReservationEvent']['dtstart'] = $params['dtstart'];
- $eventData['ReservationEvent']['end_date'] = $params['end_date'];
- $eventData['ReservationEvent']['end_time'] = $params['end_time'];
- $eventData['ReservationEvent']['dtend'] = $params['dtend'];
- $eventData['ReservationEvent']['timezone'] = $params['timezone'];
- $eventData['ReservationEvent']['status'] = $params['status'];
-
- $eventData['ReservationEvent']['location'] = $params['location'];
- $eventData['ReservationEvent']['contact'] = $params['contact'];
- $eventData['ReservationEvent']['description'] = $params['description'];
-
- $eventData['ReservationEvent']['is_enable_mail'] = $params['enable_email']; //名違いに注意
- $eventData['ReservationEvent']['email_send_timing'] = $params['email_send_timing'];
-
- $eventData['ReservationEvent']['location_key'] = $params['location_key'];
-
- ////保存するモデルをここで替える
- //$eventData['ReservationEventContent']['linked_model'] = $params['linked_model'];
- //$eventData['ReservationEventContent']['linked_content_key'] = $params['linked_content_key'];
-
- //workflowcommentなどの追加拡張データはここで追加する。
- //
- $addInfo = Hash::get($planParams, ReservationsComponent::ADDITIONAL);
- if (! empty($addInfo)) {
- foreach ($addInfo as $modelName => $vals) {
- $eventData[$modelName] = $vals;
- }
- }
- }
-
-/**
- * eventとrruleの両モデルをロードする。
- *
- * @param Model $model モデル
- * @return void
- */
- public function loadEventAndRruleModels(Model $model) {
- if (!isset($model->ReservationEvent)) {
- $model->loadModels([
- 'ReservationEvent' => 'Reservations.ReservationEvent'
- ]);
- }
- if (!isset($model->ReservationRrule)) {
- $model->loadModels([
- 'ReservationRrule' => 'Reservations.ReservationRrule'
- ]);
- }
- }
-
-/**
- * _insertChidren
- *
- * 関連する(hasMany関係にある)子レコードを登録する
- *
- * @param Model $model モデル
- * @param array $planParams planParams
- * @param array $eventData eventData
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return void
- */
- protected function _insertChidren($model, $planParams, $eventData, $createdUserWhenUpd = null) {
- //カレンダ共有ユーザ登録
- if (!$model->Behaviors->hasMethod('insertShareUsers')) {
- $model->Behaviors->load('Reservations.ReservationShareUserEntry');
- }
- $model->insertShareUsers($planParams['share_users'], $eventData['ReservationEvent']['id'],
- $createdUserWhenUpd);
- //注: 他のモデルの組み込みBehaviorをcallする場合、第一引数に$modelの指定はいらない。
-
- //関連コンテンツの登録
- //if (isset($eventData['ReservationEventContent']) &&
- // $eventData['ReservationEventContent']['linked_model'] !== '') {
- // if (!(isset($model->ReservationEventContent))) {
- // $model->loadModels(['ReservationEventContent' => 'Reservation.ReservationEventContent']);
- // }
- // $model->ReservationEventContent->saveLinkedData($eventData, $createdUserWhenUpd);
- //}
- }
-
-/**
- * shareUser変数を整える
- *
- * @param array &$planParams planParamsパラメータ
- * @return void
- * @throws InternalErrorException
- */
- protected function _arrangeShareUsers(&$planParams) {
- if (!isset($planParams['share_users'])) {
- $planParams['share_users'] = null;
- return;
- }
- if (!is_null($planParams['share_users']) && !is_string($planParams['share_users']) &&
- !is_array($planParams['share_users'])) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- $planParams['share_users'] = is_string($planParams['share_users']) ?
- array($planParams['share_users']) : $planParams['share_users'];
- }
-}
diff --git a/Model/Behavior/ReservationCrudPlanCommonBehavior.php b/Model/Behavior/ReservationCrudPlanCommonBehavior.php
deleted file mode 100644
index 9618a24..0000000
--- a/Model/Behavior/ReservationCrudPlanCommonBehavior.php
+++ /dev/null
@@ -1,192 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('ReservationRruleUtil', 'Reservations.Utility');
-
-/**
- * ReservationCrudPlanCommonBehavior
- *
- * @property array $reservationWdayArray reservation weekday array 施設予約曜日配列
- * @property array $editRrules editRules 編集ルール配列
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationCrudPlanCommonBehavior extends ReservationAppBehavior {
-
-/**
- * saveRruleData
- *
- * RruleDataへのデータ登録共通処理
- *
- * @param Model $model モデル
- * @param array $rruleData rruleData
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return array $rruleDataを返す
- * @throws InternalErrorException
- */
- public function saveRruleData(Model $model, $rruleData, $createdUserWhenUpd = null) {
- if (!(isset($model->ReservationRrule))) {
- $model->loadModels(['ReservationRrule' => 'Reservations.ReservationRrule']);
- }
-
- if ($createdUserWhenUpd !== null) {
- $rruleData['ReservationRrule']['created_user'] = $createdUserWhenUpd;
- }
-
- $model->ReservationRrule->set($rruleData);
-
- if (!$model->ReservationRrule->validates()) {
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationRrule->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- if (!$model->ReservationRrule->save($rruleData, false)) {
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationRrule->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- $rruleData['ReservationRrule']['id'] = $model->ReservationRrule->id;
-
- return $rruleData;
- }
-
-/**
- * doArrangeData
- *
- * $planParamsデータを整える
- *
- * @param Model $model モデル
- * @param array $planParams planParamsデータ
- * @return array $planParamsを返す
- * @throws InternalErrorException
- */
- public function doArrangeData(Model $model, $planParams) {
- //開始日付と開始時刻は必須
- if (!isset($planParams['start_date']) && !isset($planParams['start_time'])) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //終了日付と終了時刻は必須
- if (!isset($planParams['end_date']) && !isset($planParams['end_time'])) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- if (!isset($planParams['status'])) { //statusは必須
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- if (!isset($planParams['language_id'])) { //language_idは必須
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- $this->_arrangeShareUsers($planParams);
-
- return $planParams;
- }
-
-/**
- * auditEventOrRewriteUntil
- *
- * 浮きリソースチェック、そして浮きEvent削除またはrruleDataのrruleのUNTIL条件書き換え
- *
- * @param Model $model モデル
- * @param array $eventData eventData
- * @param array $rruleData rruleData
- * @param string $baseDtstart ベース開始日付時刻(baseDtstart)
- * @return void
- * @throws InternalErrorException
- */
- public function auditEventOrRewriteUntil(Model $model, $eventData, $rruleData, $baseDtstart) {
- //////////////////////////////
- //(2) eventsを消した後、rruleIdを親にもつeventDataの件数を調べる。
- // 0件なら、不要となった親(rrule)なので、浮きリソースとならないよう、消す。
- //
- //注)「dtstar >= 自分のdtstart」で消しているので、指定(自分)のeventデータも含めて
- // 消している。が、rruleをこの後新規に作り直すので、それ自体は問題ない。
- // 「時間・繰返し系が変更された場合」keyを振り直すと仕様をきめているので、
- // 問題なし。('ReservationEvent.id <>' => $eventIdという条件はふくめなくて、よい)
- //
- if (!(isset($model->ReservationRrule))) {
- $model->loadModels([
- 'ReservationRrule' => 'Reservations.ReservationRrule',
- ]);
- }
- if (!(isset($model->ReservationEvent))) {
- $model->loadModels([
- 'ReservationEvent' => 'Reservations.ReservationEvent',
- ]);
- }
- $params = array(
- 'conditions' => array(
- 'ReservationEvent.reservation_rrule_id' =>
- $eventData['ReservationEvent']['reservation_rrule_id'],
- ),
- );
- $count = $model->ReservationEvent->find('count', $params);
- if (!is_int($count)) { //整数以外が返ってきたらエラー
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- if ($count === 0) {
- //(2)-1. 今の親rruleDataは、子を一切持たなくなった。
- //(自分の新しい親rruleDataをこの後つくるので)現在の親rruleDataは浮きリソースになるので、
- // 消しておく。
- $result = $model->ReservationRrule->delete(
- $eventData['ReservationEvent']['reservation_rrule_id'], false
- );
- if (! $result) {
- //delete失敗
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- } else {
- ///////////////////////////////////////
- //(2)-2 今の親rruleDataは、自分(eventData)以外の子(時間軸では自分より前の時間)を持っている。
- //なので、今の親rruleDataのrruleのUNTIL値を「自分の直前まで」に書き換える。
- //自分を今の親rruleDataの管理下から切り離す。(自分の新しい親rruleDataはこのあと作る)
- //
-
- //親のrruleDataはすでに取得しているので、rrule文字列はすぐに取得できる。
- $rruleArr = (new ReservationRruleUtil())->parseRrule($rruleData['ReservationRrule']['rrule']);
- //FREQ以外を篩い落とす
- $freq = $rruleArr['FREQ'];
- $rruleArr['FREQ'] = $freq;
-
- //$baseDtstart(=$eventData['ReservationEvent']['dtstart'])は、YYYYMMDDhhmmss(UTC)です。
- //なので、UNTILは単純に、YYYYMMDDThhmmssにすればいいだけだとおもう。
- //FIXME:
- //厳密には、UNTILが施設予約で時間を指定できない=ユーザー系の00:00:00に
- //なっているので、どうやって、時分秒をajustするか。要検討。
-
- $rruleArr['UNTIL'] = substr($baseDtstart, 0, 8) . 'T' . substr($baseDtstart, 8);
-
- //$timestamp = mktime(0, 0, 0,
- // substr($planParams['dtstart'], 4, 2),
- // substr($planParams['dtstart'], 6, 2),
- // substr($planParams['dtstart'], 0, 4));
- //UNTILを自分の直前までにする。
- //$rruleArr['UNTIL'] = date('Ymd', $timestamp) . 'T' . substr($planParams['dtstart'], 8);
-
- $rruleBeforeStr = (new ReservationRruleUtil())->concatRrule($rruleArr);
-
- //今のrruleDataデータのrrule文字列を書き換える。
- $rruleDataBefore = $rruleData;
- $rruleDataBefore['ReservationRrule']['rrule'] = $rruleBeforeStr;
- $model->ReservationRrule->clear();
- //rruleDataNowのidは、現rruleDataのidであるので、更新となる。
- if (!$model->ReservationRrule->save($rruleDataBefore, false)) {
- //save失敗
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
- }
-}
diff --git a/Model/Behavior/ReservationDailyEntryBehavior.php b/Model/Behavior/ReservationDailyEntryBehavior.php
deleted file mode 100644
index 4746836..0000000
--- a/Model/Behavior/ReservationDailyEntryBehavior.php
+++ /dev/null
@@ -1,121 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('ReservationSupport', 'Reservations.Utility');
-App::uses('ReservationTime', 'Reservations.Utility');
-
-/**
- * ReservationDailyEntryBehavior
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationDailyEntryBehavior extends ReservationAppBehavior {
-
-/**
- * Default settings
- *
- * @author Noriko Arai
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2015, NetCommons Project
- */
- protected $_defaults = array(
- );
-
-/**
- * 日単位の周期性登録(1日ごと、2日ごと、、、6日ごと)
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams planParams
- * @param ssary $rruleData rruleData
- * @param array $eventData eventデータ(ReservationEventのモデルデータ)
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return array $result 結果
- */
- public function insertDaily(Model $model, $planParams, $rruleData, $eventData,
- $createdUserWhenUpd = null) {
- $model->rrule['INDEX']++;
-
- //ユーザタイムゾーンを取得しておく。
- $userTz = (new NetCommonsTime())->getUserTimezone();
-
- //インターバル日数を加算した開始日の計算
- //
- ////NC3ではすでにサーバー系日付時刻になおっているから、timezoneDateは呼ばない.
- //catしてYmdHisにする
- $sTime = $eventData['ReservationEvent']['start_date'] .
- $eventData['ReservationEvent']['start_time'];
-
- //以下で使う時間系は施設予約画面上(=ユーザー系)でのカレンダ
- //日付時刻をさしているので、ユーザー系に直す。
- //
- $userStartTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($sTime));
- $userStartTime = ReservationTime::dt2calDt($userStartTime);
-
- //ユーザー系開始日の同年同月の日+インターバール(rrule[INTERVAL])
- //日数のタイムスタンプを取得
- $date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザー系DateTimeObj生成
- $date->setDate(substr($userStartTime, 0, 4), substr($userStartTime, 4, 2),
- substr($userStartTime, 6, 2) + $model->rrule['INTERVAL']);
- $date->setTime(substr($userStartTime, 8, 2),
- substr($userStartTime, 10, 2), substr($userStartTime, 12, 2));
- //サーバー系に直して、開始日のYmdとHisを取得
- $date->setTimeZone(new DateTimeZone('UTC')); //サーバー系TZに直す
- $svrStartDate = $date->format('Ymd');
- $svrStartTime = $date->format('His');
-
- //CakeLog::debug("DBGX: ReservationEvent[start_date]+[start_time][" . $eventData['ReservationEvent']['start_date'] . $eventData['ReservationEvent']['start_time'] . "] >> time[" . $time . "] >> timestamp[" . $timestamp . "] svrStartDate[" . $svrStartDate . "] svrStartTime[" . $svrStartTime . "]");
-
- //インターバル日数を加算した終了日の計算
- //
- ////NC3ではすでにサーバー系日付時刻になおっているから、timezoneDateは呼ばない.
- //catしてYmdHisにする
- $eTime = $eventData['ReservationEvent']['end_date'] . $eventData['ReservationEvent']['end_time'];
-
- //以下で使う時間系は施設予約画面上(=ユーザー系)でのカレンダ
- //日付時刻をさしているので、ユーザー系に直す。
- //
- $userEndTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($eTime));
- $userEndTime = ReservationTime::dt2calDt($userEndTime);
-
- //ユーザー系終了日の同年同月の日+インターバール(rrule[INTERVAL])日数
- //のタイムスタンプを取得
- $date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザー系DateTimeObj生成
- $date->setDate(substr($userEndTime, 0, 4),
- substr($userEndTime, 4, 2),
- substr($userEndTime, 6, 2) + $model->rrule['INTERVAL']);
- $date->setTime(substr($userEndTime, 8, 2),
- substr($userEndTime, 10, 2), substr($userEndTime, 12, 2));
-
- //サーバー系に直して、終了日のYmdとHisを取得
- $date->setTimeZone(new DateTimeZone('UTC')); //サーバー系TZに直す
- $svrEndDate = $date->format('Ymd');
- $svrEndTime = $date->format('His');
-
- if (!ReservationSupport::isRepeatable($model->rrule, ($svrStartDate . $svrStartTime),
- $eventData['ReservationEvent']['timezone'], $model->isOverMaxRruleIndex)) {
- return true;
- }
-
- //CakeLog::debug("DBGX: insert() svrStartDateTime[" . $svrStartDate . $svrStartTime . "] svrEndDateTime[" . $svrEndDate . $svrEndTime . "]");
- $rEventData = $this->insert($model, $planParams, $rruleData, $eventData,
- ($svrStartDate . $svrStartTime), ($svrEndDate . $svrEndTime), $createdUserWhenUpd);
- if ($rEventData['ReservationEvent']['id'] === null) {
- return false;
- }
-
- //CakeLog::debug("DBGDBG: insertDaily()を再帰CALLします。planParams[" . print_r($planParams, true) . "] rruleData[" . print_r($rruleData, true) . "] rEventData[" . print_r($rEventData, true) . "]");
- return $this->insertDaily($model, $planParams, $rruleData, $rEventData, $createdUserWhenUpd);
- }
-}
diff --git a/Model/Behavior/ReservationDeletePlanBehavior.php b/Model/Behavior/ReservationDeletePlanBehavior.php
deleted file mode 100644
index 8e2d402..0000000
--- a/Model/Behavior/ReservationDeletePlanBehavior.php
+++ /dev/null
@@ -1,399 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('ReservationRruleUtil', 'Reservations.Utility');
-
-/**
- * ReservationDeletePlanBehavior
- *
- * @property array $reservationWdayArray reservation weekday array 施設予約曜日配列
- * @property array $editRrules editRules 編集ルール配列
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- * @SuppressWarnings(PHPMD)
- */
-class ReservationDeletePlanBehavior extends ReservationAppBehavior {
-
-/**
- * Default settings
- *
- * VeventTime(+VeventRRule)の値自動変更
- * registered_into to reservation_information
- *
- * @author Noriko Arai
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2015, NetCommons Project
- */
- protected $_defaults = array(
- 'reservationRruleModel' => 'Reservations.ReservationRrule',
- 'fields' => array(
- 'registered_into' => 'reservation_information',
- ),
- );
- //上記のfields定義は、以下の意味です。
- // The (event|todoplugin|journal) was registerd into the reservation information.
- // =イベント(またはToDoまたは日報)が予定表の情報に登録されました。
-
-/**
- * deletePlan
- *
- * 予定の削除
- *
- * @param Model $model 実際のモデル名
- * @param array $curPlan 現世代予定(この現世代予定に対して削除を行う)
- * @param bool $isOriginRepeat 現予定が繰返しありかなしか
- * @param string $editRrule 編集ルール (この予定のみ、この予定以降、全ての予定)
- * @return 変更成功時 string reservationEventKey
- * @throws InternalErrorException
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function deletePlan(Model $model, $curPlan,
- $isOriginRepeat, $editRrule = self::CALENDAR_PLAN_EDIT_THIS) {
- $eventKey = $curPlan['cur_event_key'];
-
- //ReservationEventの対象データ取得
- $this->loadEventAndRruleModels($model);
-
- //対象となるデータを$eventData、$rruleDataそれぞれにセット
- $eventData = $rruleData = array();
-
- list($eventData, $rruleData) = $this->setCurEventDataAndRruleData($model, $curPlan);
-
- //「全削除」、「指定以降削除」、「この予定のみ削除or元予定に繰返しなし」
- if ($editRrule === self::CALENDAR_PLAN_EDIT_ALL) {
- //「この予定ふくめ全て削除」
- $eventKey = $this->deletePlanAll($model, $rruleData, $eventData, $curPlan);
- return $eventKey; //復帰
- } elseif ($editRrule === self::CALENDAR_PLAN_EDIT_AFTER) {
- //「この予定以降を削除」
- $eventKey = $this->deletePlanByAfter(
- $model, $rruleData, $eventData, $curPlan);
-
- return $eventKey; //復帰
- } else {
- //「この予定のみ削除or元予定に繰返しなし」
-
- //いずれのケースも、まず対象のeventDataは削除する。
-
- //eventのidではなく、keyで消さないといけない。(なぜなら同一キーをもつ過去世代が複数あり
- //1つのidをけしても、同一keyの他のidのデータが拾われて表示されてしまうため。
-
- //(1)-1 実際に削除する。
- $conditions = array(
- array(
- $model->ReservationEvent->alias . '.key' => $curPlan['cur_event_key'],
- )
- );
- //第2引数cascade==trueで、関連する子 ReservationEventShareUsers, ReservationEventContentを
- //ここで消す。
- //第3引数callbacks==trueで、メール関連のafterDeleteを動かす? FIXME: 要確認
- //
- if (!$model->ReservationEvent->deleteAll($conditions, true, true)) {
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //$isOriginRepeatについて
- //
- //$isOriginRepeat==trueの時、元予定に繰返しあり、の「この予定のみ削除」ケース
- //
- //他の兄弟がいるので、親のrruleは残しておく可能性が高いが、
- //自分が最後の子の場合、それを消すと、結果,rruleDataが浮く
- //可能性がある
- //
- //一方、$isOriginRepeat==falseの時、「元予定に繰返しなし」=元予定は単一予定
- //
- //親のrruleは浮きリソースになる.
- //
- //つまり、両方を加味して、rrule配下に子がいなければ、rrule自体を消す処理を
- //以下に書く。
- //
- $params = array(
- 'conditions' => array(
- 'ReservationEvent.reservation_rrule_id' => $curPlan['cur_rrule_id'],
- ),
- );
- $count = $model->ReservationEvent->find('count', $params);
- if (!is_int($count)) { //整数以外が返ってきたらエラー
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- if ($count === 0) {
- //(2)-1. 今の親rruleDataは、子を一切持たなくなった。
- //(自分の新しい親rruleDataをこの後つくるので)現在の親rruleDataは浮きリソースになるので、
- // 消しておく。
- if (!$model->ReservationRrule->delete($curPlan['cur_rrule_id'], false)) {
- //delete失敗
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
-
- return $eventKey; //復帰
- }
- }
-
-/**
- * $planParamsデータを整える
- *
- * @param array &$planParams planParamsデータ
- * @return void
- * @throws InternalErrorException
- */
- public function arrangeData(&$planParams) {
- //開始日付と開始時刻は必須
- if (!isset($planParams['start_date']) && !isset($planParams['start_time'])) {
- //throw new InternalErrorException(__d('Reservations', 'No start_date or start_time'));
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //終了日付と終了時刻は必須
- if (!isset($planParams['end_date']) && !isset($planParams['end_time'])) {
- //throw new InternalErrorException(__d('Reservations', 'No end_date or end_time.'));
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- if (!isset($planParams['status'])) { //statusは必須
- //throw new InternalErrorException(__d('Reservations', 'status is required.'));
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- if (!isset($planParams['language_id'])) { //language_idは必須
- //throw new InternalErrorException(__d('Reservations', 'language_id is required.'));
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- $this->_arrangeShareUsers($planParams);
- }
-
-/**
- * ReservationEventの対象データ取得
- *
- * @param Model $model 実際のモデル名
- * @param int $eventId ReservationEvent.id
- * @param string $editRrule editRrule デフォルト値 self::CALENDAR_PLAN_EDIT_THIS
- * @return 成功時 array 条件にマッチするReservationEventDataとそのbelongsTo,hasOne関係のデータ(実際には、ReservationRruleData), 失敗時 空配列
- */
- public function getReservationEventAndRrule(Model $model, $eventId, $editRrule) {
- $params = array(
- 'conditions' => array('ReservationEvent.id' => $eventId),
- 'recursive' => 0, //belongTo, hasOneの1跨ぎの関係までとってくる。
- 'fields' => array('ReservationEvent.*', 'ReservationRrule.*'),
- 'callbacks' => false
- );
- return $model->ReservationEvent->find('first', $params);
- }
-
-/**
- * RruleDataへのデータをdateへセット
- *
- * @param array $rruleData rruleData
- * @param array &$data data
- * @return void
- */
- public function setRruleData2Data($rruleData, &$data) {
- //$data['ReservationRrule']['location'] = $rruleData['ReservationRrule']['location'];
- //$data['ReservationRrule']['contact'] = $rruleData['ReservationRrule']['contact'];
- //$data['ReservationRrule']['description'] = $rruleData['ReservationRrule']['description'];
- $data['ReservationRrule']['rrule'] = $rruleData['ReservationRrule']['rrule'];
- $data['ReservationRrule']['room_id'] = $rruleData['ReservationRrule']['room_id'];
- //$data['ReservationRrule']['status'] = $rruleData['ReservationRrule']['status'];
- //$data['ReservationRrule']['language_id'] = $rruleData['ReservationRrule']['language_id'];
- }
-
-/**
- * 予定データの全削除
- *
- * @param Model $model モデル
- * @param array $rruleData rruleData
- * @param array $eventData eventData(編集画面のevent)
- * @param array $curPlan 現世代予定データ
- * @return string eventKeyを返す
- * @throws InternalErrorException
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function deletePlanAll(Model $model, $rruleData, $eventData, $curPlan) {
- if (!(isset($model->ReservationRrule))) {
- $model->loadModels([
- 'ReservationRrule' => 'Reservations.ReservationRrule',
- ]);
- }
- $eventKey = $curPlan['cur_event_key'];
- $rruleId = $curPlan['cur_rrule_id'];
-
- ////////////////////////
- //(1)現在のrrule配下の全eventDataを消す
-
- //まずcurPlanより、消す対象のeventのidをすべて抽出する。
- //eventのidではなく、keyで消すこと。
- //そうしないと、直近のidだけ消しても、過去世代の同一keyの別idの
- //eventデータが拾われてしますから。
- $eventKeys = Hash::extract($curPlan, 'ReservationEvent.{n}.key');
-
- //(2) 実際に削除する。
- $conditions = array(
- array(
- $model->ReservationEvent->alias . '.key' => $eventKeys,
- )
- );
- //第2引数cascade==trueで、子のReservationEventShareUsers, ReservationEventContentを消す。
- //第3引数callbacks==trueで、メール関連のデキューをここでおこなう? FIXME:要確認
- //
- if (!$model->ReservationEvent->deleteAll($conditions, true, true)) {
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- /////////////////////////////
- //(2) eventsを消した後、rruleIdを親にもつeventDataの件数を調べる。
- // 0件なら、不要となった親(rrule)なので、浮きリソースとならないよう、消す。
- //
- $params = array(
- 'conditions' => array(
- 'ReservationEvent.reservation_rrule_id' => $rruleId,
- ),
- );
- $count = $model->ReservationEvent->find('count', $params);
- if (!is_int($count)) { //整数以外が返ってきたらエラー
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- if ($count === 0) {
- //(2)-1. 今の親rruleDataは、子を一切持たなくなった。
- //現在の親rruleDataは浮きリソースになるので、消しておく。
- if (!$model->ReservationRrule->delete($rruleId, false)) {
- //delete失敗
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
-
- return $eventKey;
- }
-
-/**
- * 指定eventデータ以降の予定の削除
- *
- * @param Model $model 実際のモデル名
- * @param array $rruleData rruleData
- * @param array $eventData eventData
- * @param array $curPlan 現世代予定データ
- * @return string $eventKeyを返す
- * @throws InternalErrorException
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function deletePlanByAfter(Model $model, $rruleData, $eventData, $curPlan) {
- if (!(isset($model->ReservationRrule))) {
- $model->loadModels([
- 'ReservationRrule' => 'Reservations.ReservationRrule',
- ]);
- }
-
- $eventKey = $curPlan['cur_event_key'];
-
- ////////////////////////
- //(1)指定eventのdtstart以降の全eventDataを消す
-
- //まずcurPlanより、基準日時以後の消す対象eventのidをすべて抽出する。
- //注)ここに来る前に、setEventDataAndRruleData()で、
- //rruleData, eventDataには、curPlanより指定したものが抽出・セットされているので、
- //それを使う。
- //ここでは、指定された元予定の時刻をつかわないといけない。
- //
-
- //開始の日付時刻を、$baseDtstartにする。
- $baseDtstart = $eventData['ReservationEvent']['dtstart']; //基準日時
-
- //eventのidではなく、keyで消さないといけない。(なぜなら同一キーをもつ過去世代が複数あり
- //1つのidをけしても、同一keyの他のidのデータが拾われて表示されてしまうため。
- $eventKeys = Hash::extract(
- $curPlan['ReservationEvent'], '{n}[dtstart>=' . $baseDtstart . '].key'
- );
-
- //(1)-1 実際に削除する。
- $conditions = array(
- array(
- $model->ReservationEvent->alias . '.key' => $eventKeys,
- )
- );
- //第2引数cascade==trueで、関連する子 ReservationEventShareUsers, ReservationEventContentを
- //ここで消す。
- //第3引数callbacks==trueで、メール関連のafterDeleteを動かす? FIXME: 要確認
- //
- if (!$model->ReservationEvent->deleteAll($conditions, true, true)) {
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //////////////////////////////
- //(2) eventsを消した後、rruleIdを親にもつeventDataの件数を調べる。
- //(2)-1. eventData件数==0、つまり、今の親rruleDataは、子を一切持たなくなった。
- // 現在の親rruleDataは浮きリソースになるので消す。
- // 注)「dtstar >= 自分のdtstart」で消しているので、指定(自分)のeventデータも含めて
- // 消している。
- //
- //(2)-2. eventData件数!=0、つまり、今の親rruleDataは自分(eventData)以外の子(時間軸では自分より前の時間)
- // を持っている。
- // なので、今の親rruleDataのrruleのUNTIL値を「自分の直前まで」に書き換える。
- // 自分を今の親rruleDataの管理下から切り離す。
- //
- // =>これらの(2)の一連処理を実行する関数 auditEventOrRewriteUntil() をcallする。
- //
- if (!$model->Behaviors->hasMethod('auditEventOrRewriteUntil')) {
- $model->Behaviors->load('Reservations.ReservationCrudPlanCommon');
- }
- $model->auditEventOrRewriteUntil($eventData, $rruleData, $baseDtstart); //aaaaaa
-
- return $eventKey;
- }
-
-/**
- * curPlanより現在eventDataとrruleDataに値セット
- *
- * @param Model $model モデル
- * @param array $curPlan 現世代予定
- * @return array array($eventData, $rruleData)を返す
- * @throws InternalErrorException
- */
- public function setCurEventDataAndRruleData(Model $model, $curPlan) {
- $rruleData['ReservationRrule'] = $curPlan['ReservationRrule'];
- $events = Hash::extract($curPlan, 'ReservationEvent.{n}[id=' . $curPlan['cur_event_id'] . ']');
- $eventData['ReservationEvent'] = $events[0];
- return array($eventData, $rruleData);
- }
-
-/**
- * getEditRruleForUpdate
- *
- * request->data情報より、editRruleモードを決定し返す。
- *
- * @param Model $model モデル
- * @param array $data data
- * @return string 成功時editRruleモード(0/1/2)を返す。失敗時 例外をthrowする
- * @throws InternalErrorException
- */
- public function getEditRruleForUpdate(Model $model, $data) {
- if (empty($data['ReservationActionPlan']['edit_rrule'])) {
- //edit_rruleが存在しないか'0'ならば、「この予定のみ変更」
- return self::CALENDAR_PLAN_EDIT_THIS;
- }
- if ($data['ReservationActionPlan']['edit_rrule'] == self::CALENDAR_PLAN_EDIT_AFTER) {
- return self::CALENDAR_PLAN_EDIT_AFTER;
- }
- if ($data['ReservationActionPlan']['edit_rrule'] == self::CALENDAR_PLAN_EDIT_ALL) {
- return self::CALENDAR_PLAN_EDIT_ALL;
- }
- //ここに流れてくる時は、モードの値がおかしいので、例外throw
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-}
diff --git a/Model/Behavior/ReservationEntryBehavior.php b/Model/Behavior/ReservationEntryBehavior.php
deleted file mode 100644
index 44d8bee..0000000
--- a/Model/Behavior/ReservationEntryBehavior.php
+++ /dev/null
@@ -1,185 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-
-/**
- * ReservationEntryBehavior
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationEntryBehavior extends ReservationAppBehavior {
-
-/**
- * Default settings
- *
- * 値が変わった時、発動する。
- *
- * @author Noriko Arai
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2015, NetCommons Project
- */
- protected $_defaults = array(
- //'reservationRruleModel' => 'Reservations.ReservationRrule',
- //'fields' => array(
- // 'rrule_id' => 'reservation_rrule_id',
- // ),
- );
-
-/**
- * Setup
- *
- * @param Model $model instance of model
- * @param array $config array of configuration settings.
- * @return void
- */
- public function setup(Model $model, $config = array()) {
- $this->settings[$model->alias] = Hash::merge($this->_defaults, $config);
- }
-
-/**
- * Checks wether model has the required fields
- *
- * @param Model $model instance of model
- * @return bool True if $model has the required fields
- */
- protected function _hasReservationEntryFields(Model $model) {
- $fields = $this->settings[$model->alias]['fields'];
- return $model->hasField($fields['description']) && $model->hasField($fields['start_date']);
- }
-
- ///**
- //* Bind relationship on the fly
- // *
- // * @param Model $model instance of model
- // * @param bool $cascade 削除時のカスケード指定
- // * @return void
- // */
- //public function beforeDelete(Model $model, $cascade = true) {
- // $this->log("DBG : beforeDelete", LOG_DEBUG);
- //
- // return parent::beforeDelete($model, $cascade);
- //}
-
-/**
- * Bind relationship on the fly
- *
- * @param Model $model instance of model
- * @return void
- */
- public function afterDelete(Model $model) {
- $this->log('DBG : afterDelete', LOG_DEBUG);
-
- return parent::afterDelete($model);
- }
-
-/**
- * Bind relationship on the fly
- *
- * @param Model $model instance of model
- * @param array $options オプション配列
- * @return void
- */
- public function beforeSave(Model $model, $options = array()) {
- $this->log('DBG: before Save', LOG_DEBUG);
- if (isset($this->reservationEntryIndicator)) {
- //施設予約登録指示子(insert|update)があれば、それに従う
- //$this->log('DBG: given reservationEntryIndicator[' . $this->reservationEntryIndicator . ']', LOG_DEBUG);
- return parent::beforeSave($model, $options);
- }
-
- //施設予約指示子がないので、自分で見つけ出す。
- //
- $linkPlugin = Current::read('Plugin.name');
- $linkPluginModel = $model->alias;
- $this->log('DBG: linkPluginModel[' . $linkPluginModel . ']', LOG_DEBUG);
-
- $vars = get_object_vars($model);
- $mdl = $vars[$model->alias];
- $linkPluginKey = $mdl->data[$model->alias]['key'];
- /* FUJI 意味のない処理?後でカットする
- $frameAndBlockInfo = array(
- 'Frame.id' => Current::read('Frame.id'),
- 'Block.id' => Current::read('Block.id'),
- );
- $linkPluginOhterInfos = serialize($frameAndBlockInfo);
- $this->log('DBG: linkPluginOhterInfos[' . $linkPluginOhterInfos . ']', LOG_DEBUG);
- */
- $this->loadEventAndRruleModels($model);
- $params = array(
- 'conditions' => array(
- 'ReservationEvent.link_plugin' => $linkPlugin,
- //'ReservationEvent.link_plugin_model' => $linkPluginModel,
- 'ReservationEvent.link_key' => $linkPluginKey,
- ),
- 'recursive' => -1, //belongTo, hasOneの1跨ぎの関係までとってくる。
- 'callbacks' => false
- );
- $count = $model->ReservationEvent->find('count', $params);
- if ($count > 0) {
- //既にlinkデータがあるので、update
- $this->reservationEntryIndicator = 'update';
- } else {
- //データがないので、insert
- $this->reservationEntryIndicator = 'insert';
- }
- //$this->log('DBG: i descid reservationEntryIndicator[' . $this->reservationEntryIndicator . ']', LOG_DEBUG);
-
- return parent::beforeSave($model, $options);
- }
-
-/**
- * Bind relationship on the fly
- *
- * @param Model $model instance of model
- * @param bool $created 生成しかたどうか
- * @param array $options オプション配列
- * @return void
- */
- public function afterSave(Model $model, $created, $options = array()) {
- $this->log("DBG : afterSave", LOG_DEBUG);
- $this->log(
- 'DBG: reservationEntryIndicator is[' . $this->reservationEntryIndicator . ']', LOG_DEBUG
- );
- //$this->log("DBG : All Current Props[" . print_r( Current::read(), true). "]", LOG_DEBUG);
- return;
-
- /*
- * 以下、コーディング中。
- *
- if (!$this->_hasReservationEntryFields($model)) {
- $this->log("DBG : nop", LOG_DEBUG);
- return;
- }
-
- $this->log("DBG : OK created[" . $created . "]", LOG_DEBUG);
- //$this->log("DBG :" . serialize($model->data), LOG_DEBUG);
-
- $fields = $this->settings[$model->alias]['fields'];
- //$this->log("DBG : description[" . $model->data[$model->alias][$fields['description']] . "]", LOG_DEBUG);
- //$this->log("DBG : start_date[" . $model->data[$model->alias][$fields['start_date']] . "]", LOG_DEBUG);
-
- if (!$model->Behaviors->hasMethod('insertPlan')) {
- $model->Behaviors->load('Reservations.ReservationInsertPlan');
- }
- $planParams = array(
- 'description' => $model->data[$model->alias][$fields['description']],
- 'start_date' => $model->data[$model->alias][$fields['start_date']],
- );
-
- $this->log("DBG : planParams[" . serialize($planParams) . "]", LOG_DEBUG);
- $model->insertPlan($planParams);
- */
- }
-}
diff --git a/Model/Behavior/ReservationExposeRoomBehavior.php b/Model/Behavior/ReservationExposeRoomBehavior.php
deleted file mode 100644
index 0376a1b..0000000
--- a/Model/Behavior/ReservationExposeRoomBehavior.php
+++ /dev/null
@@ -1,263 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-//プラグインセパレータ(.)とパスセバレータ(/)混在に注意
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-
-/**
- * ReservationExposeRoomBehavior
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationExposeRoomBehavior extends ReservationAppBehavior {
-
-/**
- * getExposeRoomOptions
- *
- * 公開可能なルーム一覧をselectのoptions配列および自分自身のroomd_idを取得
- *
- * @param Model $model 実際のモデル名
- * @param int $frameSetting フレーム設定情報
- * @return mixed 生成したoptions配列とmyself(自分自身のroom_id)とルーム毎空間名配列を返す
- */
- public function getExposeRoomOptions(Model $model, $frameSetting) {
- //事前準備
- if (!(isset($this->Room))) {
- $model->loadModels(['Room' => 'Rooms.Room']);
- }
-
- $spaces = $model->Room->getSpaces();
- $spaceIds = array(Space::PUBLIC_SPACE_ID, Space::COMMUNITY_SPACE_ID);
-
- $rooms = array();
- $roomTreeList = array();
- foreach ($spaceIds as $spaceId) {
- $rooms[$spaceId] = $this->getRoomsOfSpace($model, $spaceId);
- $roomTreeList[$spaceId] = $this->getRoomTreeOfSpace(
- $model, $spaces[$spaceId]['Room']['id'], $rooms[$spaceId]);
- }
-
- //オプション生成
- $options = array();
- $spaceNameOfRooms = array();
- $allRoomNames = array();
- $myself = null;
- $userId = Current::read('User.id');
- foreach ($spaces as $space) { //Space::PUBLIC_SPACE_ID, Space::COMMUNITY_SPACE_IDを順次処理.
- //$title = $model->Rooms->roomName($space);
- $roomsLanguage = Hash::extract($space, 'RoomsLanguage.{n}[language_id=' .
- Current::read('Language.id') . ']');
- $title = h($roomsLanguage[0]['name']);
-
- if ($space['Space']['id'] == Space::PRIVATE_SPACE_ID) {
- //プライベート
- list($myself, $options, $spaceNameOfRooms, $allRoomNames) =
- $this->__getRoomIdEtcWhenPrivateCase(
- $model, $space, $frameSetting, $userId, $title,
- $myself, $options, $spaceNameOfRooms, $allRoomNames);
- } else { //公開空間またはグループ空間
- list($options, $spaceNameOfRooms, $allRoomNames) =
- $this->mergeSelectExposeTargetOptions(
- $model, $options, $title, $space, $roomTreeList[$space['Space']['id']],
- $rooms[$space['Space']['id']], $frameSetting, $spaceNameOfRooms, $allRoomNames);
- }
- }
-
- // 全会員
- //
- // 全会員が、指定したルームのみ表示ONの時表示OKになっているか確認
- //if (! empty($userId)) {
- // //全会員を表すIDは↓これです。
- // $roomId = Space::getRoomIdRoot(Space::COMMUNITY_SPACE_ID);
- // $spaceNameOfRooms[$roomId] = 'member'; //例外的に文字列を渡す
- // $allRoomNames[$roomId] = __d('reservations', 'All the members');
- // //if ($this->_isEnableRoomInFrameSetting($roomId, $frameSetting)) {
- // //ログインしている時、optionに積む
- // $options[$roomId] = __d('reservations', 'All the members');
- // //}
- //}
-
- return array($options, $myself, $spaceNameOfRooms, $allRoomNames);
- }
-
-/**
- * mergeSelectExposeTargetOptions
- *
- * 空間単位で、空間、ルーム、サブルーム要素を$otions配列にマージする
- *
- * @param Model $model 実際のモデル名
- * @param array $options マージ元のoptions配列
- * @param string $title タイトル
- * @param array $space 空間配列
- * @param array $roomTreeList 単一空間でのルームツリー
- * @param array $rooms 単一空間でのルーム群
- * @param int $frameSetting 施設予約フレーム設定情報
- * @param array $spaceNameOfRooms ルーム毎空間名配列
- * @param array $allRoomNames ルーム名一覧
- * @return array マージ後のoptions配列とルーム毎空間名配列
- */
- public function mergeSelectExposeTargetOptions(Model $model, $options, $title, $space,
- $roomTreeList, $rooms, $frameSetting, $spaceNameOfRooms, $allRoomNames) {
- $userId = Current::read('User.id');
- if ($roomTreeList) {
- foreach ($roomTreeList as $roomId => $tree) {
- if (Hash::get($rooms, $roomId)) {
- $nest = substr_count($tree, Room::$treeParser);
- $roomsLanguage = Hash::extract($rooms[$roomId],
- 'RoomsLanguage.{n}[language_id=' . Current::read('Language.id') . ']');
- $targetTitle = h($roomsLanguage[0]['name']);
-
- $spaceNameOfRooms[$roomId] =
- ($space['Space']['type'] == Space::COMMUNITY_SPACE_ID) ? 'group' : 'public';
- $allRoomNames[$roomId] = $targetTitle;
-
- //if ($this->_isEnableRoomInFrameSetting($roomId, $frameSetting)) {
- if ($space['Space']['type'] == Space::COMMUNITY_SPACE_ID) {
- if (empty($userId)) {
- //未ログインなので、グループ空間をoptionに積んではいけない。抜ける。
- continue;
- }
- //グループ空間の時は、インデントを1つ減らす。..これにより、NC2と同じレベルの表現になる。
- $nest -= 1;
- }
- $options[$roomId] = str_repeat(' ', $nest * 1) . $targetTitle;
- //}
- }
- }
- }
- //CakeLog::debug("DBG: options[" . print_r($options, true) . "]");
- return array($options, $spaceNameOfRooms, $allRoomNames);
- }
-
-/**
- * getRoomsOfSpace
- *
- * 指定空間のルーム群を取得する
- *
- * @param Model $model 実際のモデル名
- * @param int $spaceId space id
- * @return array 取得されたルーム配列
- */
- public function getRoomsOfSpace(Model $model, $spaceId) {
- //指定空間配下で読み取り可能なルーム群を取得し、(room_id => room情報配列)集合にして返す。
- $rooms = Hash::combine(
- ($model->Room->find('all',
- $model->Room->getReadableRoomsConditions(array('Room.space_id' => $spaceId)))
- ),
- '{n}.Room.id', '{n}'
- );
- return $rooms;
- }
-
-/**
- * getRoomTreeOfSpace
- *
- * 指定空間にあるルーム群よりルームルームTreeリスト取得
- *
- * @param Model $model 実際のモデル名
- * @param int $spaceRoomId room id which is space's
- * @param array $rooms room information
- * @return array 指定した
- */
- public function getRoomTreeOfSpace(Model $model, $spaceRoomId, $rooms) {
- $roomTreeList = $model->Room->generateTreeList(
- array('Room.id' => array_merge(array($spaceRoomId), array_keys($rooms))
- ), null, null, Room::$treeParser);
- return $roomTreeList;
- }
-
-/**
- * getMyPrivateRoomId($model);
- *
- * ログイン者のプライベートルームIDを返す
- *
- * @param Model $model 実際のモデル名
- * @return mixed 成功時、ルームIDを返す。失敗時はnullを返す。
- */
- public function getMyPrivateRoomId($model) {
- $userId = Current::read('User.id');
- if (!isset($model->Room)) {
- $model->loadModels(['Room' => 'Roomrs.Room']);
- }
- $readableRoomInfos = $model->Room->find('all', $model->Room->getReadableRoomsConditions());
- if (empty($userId)) {
- //未ログイン時
- return null;
- }
-
- //ログイン時
- $privateRoomId = Hash::extract($readableRoomInfos,
- '{n}.Room[space_id=' . Space::PRIVATE_SPACE_ID . '].id');
- $privateRoomId = array_shift($privateRoomId); //privateRoomID取得
- return $privateRoomId;
- }
-
-/**
- * __getRoomIdEtcWhenPrivateCase
- *
- * プライベート時、各種変数・配列を取得セット
- *
- * @param Model $model 実際のモデル名
- * @param array $space space配列
- * @param array $frameSetting frameSetting配列
- * @param int $userId userId
- * @param string $title title
- * @param mixed $myself ログインしている人のプライベートルームID
- * @param array $options ルーム選択(兼、表示)時の選択できうるルームのoptions配列
- * @param array $spaceNameOfRooms ルーム毎の空間名を格納した配列
- * @param array $allRoomNames ルーム名一覧
- * @return array プライベート時の情報を、$myselfと$optionsと$spaceNameOfRoomsにセットし、配列に格納して返す。
- */
- private function __getRoomIdEtcWhenPrivateCase($model, $space, $frameSetting,
- $userId, $title, $myself, $options, $spaceNameOfRooms, $allRoomNames) {
- //プライベート
- //
- //プライベートが、指定したルームのみ表示ONの時表示OKになっているか確認
- $roomId = $this->getMyPrivateRoomId($model);
-
- //プライベートルームIDが見つかった
- if ($roomId) {
- $spaceNameOfRooms[$roomId] = 'private';
- $allRoomNames[$roomId] = $this->__getPrivateRoomName($model, $roomId);
-
- if (!empty($userId)) {
- $myself = $roomId;
- //ログインしている時、optionに積む
- /////$options[$roomId] = $title;
- $options[$roomId] = $allRoomNames[$roomId];
- }
-
- }
- return array($myself, $options, $spaceNameOfRooms, $allRoomNames);
- }
-
-/**
- * __getPrivateRoomName
- *
- * プライベートルーム名の取得
- *
- * @param Model $model 実際のモデル名
- * @param string $myself プライベートルームのroom_id
- * @return array 取得されたプライベートルーム名
- */
- private function __getPrivateRoomName($model, $myself) {
- if (!isset($model->RoomsLanguage)) {
- $model->loadModels(['RoomsLanguage' => 'Rooms.RoomsLanguage']);
- }
- $roomsLang = $model->RoomsLanguage->findByRoomIdAndLanguageId(
- $myself, Current::read('Language.id'));
- if (empty($roomsLang['RoomsLanguage']['name'])) {
- return __d('reservations', 'Unknown My Room');
- }
- return $roomsLang['RoomsLanguage']['name'];
- }
-}
diff --git a/Model/Behavior/ReservationInsertPlanBehavior.php b/Model/Behavior/ReservationInsertPlanBehavior.php
deleted file mode 100644
index dd4faf2..0000000
--- a/Model/Behavior/ReservationInsertPlanBehavior.php
+++ /dev/null
@@ -1,196 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-
-/**
- * ReservationInsertPlanBehavior
- *
- * @property array $reservationWdayArray reservation weekday array 施設予約曜日配列
- * @property array $editRrules editRules 編集ルール配列
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationInsertPlanBehavior extends ReservationAppBehavior {
-
-/**
- * Default settings
- *
- * VeventTime(+VeventRRule)の値自動変更
- * registered_into to reservation_information
- *
- * @author Noriko Arai
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2015, NetCommons Project
- */
- protected $_defaults = array(
- 'reservationRruleModel' => 'Reservations.ReservationRrule',
- 'fields' => array(
- 'registered_into' => 'reservation_information',
- ),
- );
- //上記のfields定義は、以下の意味です。
- // The (event|todoplugin|journal) was registerd into the reservation information.
- // =イベント(またはToDoまたは日報)が予定表の情報に登録されました。
-
-/**
- * 予定の追加
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams 予定パラメータ
- * @param bool $isMyPrivateRoom isMyPrivateRoom 予定の公開対象が自分のプライベートルームかどうか
- * @return int 追加成功時 $eventId(reservationEvent.id)を返す。追加失敗時 InternalErrorExceptionを投げる。
- * @throws InternalErrorException
- */
- public function insertPlan(Model $model, $planParams, $isMyPrivateRoom) {
- if (!$model->Behaviors->hasMethod('doArrangeData')) {
- $model->Behaviors->load('Reservations.ReservationCrudPlanCommon');
- }
- $planParams = $model->doArrangeData($planParams);
-
- $rruleData = $this->insertRruleData($model, $planParams); //rruleDataの1件登録
-
- $eventData = $this->insertEventData($model, $planParams, $rruleData); //eventDataの1件登録
- if (!isset($eventData['ReservationEvent']['id'])) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- $eventId = $eventData['ReservationEvent']['id'];
-
- if ($rruleData['ReservationRrule']['rrule'] !== '') { //Rruleの登録
- if (!$model->Behaviors->hasMethod('insertRrule')) {
- $model->Behaviors->load('Reservations.ReservationRruleEntry');
- }
- $model->insertRrule($planParams, $rruleData, $eventData);
- }
-
- return $eventId;
- }
-
-/**
- * RruleDataへのデータ登録
- *
- * @param Model $model モデル
- * @param array $planParams 予定パラメータ
- * @param string $icalUidPart icalUidPart
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return array $rruleDataを返す
- * @throws InternalErrorException
- */
- public function insertRruleData(Model $model, $planParams,
- $icalUidPart = '', $createdUserWhenUpd = null) {
- if (!(isset($model->ReservationRrule) && is_callable($model->ReservationRrule->create))) {
- $model->loadModels([
- 'ReservationRrule' => 'Reservations.ReservationRrule',
- ]);
- }
- //rruleData保存のためにモデルをリセット(insert用)
- $rruleData = $model->ReservationRrule->create();
-
- //rruleDataにplanParamデータを詰め、それをモデルにセット
- $this->setRruleData($model, $planParams, $rruleData);
-
- //icalUidパーツの指定があれば、それをセットしておく。
- //「この予定以降の変更」で1つのCalenarRruleが2つにスプリットする
- //ケースを想定している。
- //
- if ($icalUidPart !== '') {
- $rruleData['ReservationRrule']['ireservation_uid'] = $icalUidPart;
- }
-
- if (!$model->Behaviors->hasMethod('saveRruleData')) {
- $model->Behaviors->load('Reservations.ReservationCrudPlanCommon');
- }
- $rruleData = $model->saveRruleData($rruleData, $createdUserWhenUpd);
-
- return $rruleData;
- }
-
-/**
- * EventDataへのデータ登録
- *
- * @param Model $model モデル
- * @param array $planParams 予定パラメータ
- * @param array $rruleData rruleデータ
- * @param int $createdUserWhenUpd created_userを明示指定する時にnull以外を指定。updatePlanで主に利用されている。
- * @return array $eventDataを返す
- * @throws InternalErrorException
- * @SuppressWarnings(PHPMD)
- */
- public function insertEventData(Model $model, $planParams, $rruleData,
- $createdUserWhenUpd = null) {
- if (!(isset($model->ReservationEvent) && is_callable($model->ReservationEvent->create))) {
- $model->loadModels([
- 'ReservationEvent' => 'Reservations.ReservationEvent',
- ]);
- }
- //eventData保存のためにモデルをリセット(insert用)
- $eventData = $model->ReservationEvent->create();
-
- //eventDataにplanParamデータを詰め、それをモデルにセット
- $this->setEventData($planParams, $rruleData, $eventData);
-
- $model->ReservationEvent->set($eventData);
-
- if (!$model->ReservationEvent->validates()) { //eventDataをチェック
- //CakeLog::debug("DBG: validationErrors[ " . print_r($model->ReservationEvent->validationErrors, true) . "}");
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- if (!$model->ReservationEvent->save(null, false)) { //保存のみ
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //施設予約独自の例外追加1)
- //変更後の公開ルームidが、「元予定生成者の*ルーム」から「編集者・承認者(=ログイン者)の
- //プライベート」に変化していた場合、created_userを、元予定生成者「から」編集者・承認者(=ログイン者)
- //「へ」に変更すること。=>これを考慮したcreatedUserWhenUpdを使えばよい。
- //
- //尚、saveの中で $createdUserWhenUpd を直接セットせず、以下のsaveField(=UPDATE文)を使ったのは
- //WFのbeforeSaveによりセットしたcreatedUserWhenUpd以外の値の書き換えられる可能性があるため。
- //
- if ($model->ReservationEvent->id > 0 && $createdUserWhenUpd !== null) {
- //saveが成功し、かつ、createdUserWhenUpd がnull以外なら、created_userを更新しておく。
- //modifiedも更新されるが、saveの直後なので誤差の範囲として了とする。
- $model->ReservationEvent->saveField('created_user', $createdUserWhenUpd, ['callbacks' => false]);
- //UPDATEでセットしたcreatedUserWhenUpdの値をeventDataに記録しておく
- $eventData['ReservationEvent']['created_user'] = $createdUserWhenUpd;
- }
-
- //採番されたidをeventDataにセットしておく
- $eventData['ReservationEvent']['id'] = $model->ReservationEvent->id;
-
- //ShareUsersとContentは、reservation_event_id単位に登録するので、ここにもってきた。
- //
- if (!$model->Behaviors->hasMethod('insertShareUsers')) {
- $model->Behaviors->load('Reservations.ReservationShareUserEntry');
- }
- //カレンダ共有ユーザ登録
- $model->insertShareUsers($planParams['share_users'], $eventData['ReservationEvent']['id'],
- $createdUserWhenUpd);
- //注: 他のモデルの組み込みBehaviorをcallする場合、第一引数に$modelの指定はいらない。
-
- ////関連コンテンツの登録
- //if ($eventData['ReservationEventContent']['linked_model'] !== '') {
- // if (!(isset($model->ReservationEventContent))) {
- // $model->loadModels(['ReservationEventContent' => 'Reservations.ReservationEventContent']);
- // }
- // $model->ReservationEventContent->saveLinkedData($eventData, $createdUserWhenUpd);
- //}
-
- return $eventData;
- }
-}
diff --git a/Model/Behavior/ReservationLocationDeleteBehavior.php b/Model/Behavior/ReservationLocationDeleteBehavior.php
deleted file mode 100644
index f4117b5..0000000
--- a/Model/Behavior/ReservationLocationDeleteBehavior.php
+++ /dev/null
@@ -1,104 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-
-/**
- * Class ReservationLocationDeleteBehavior
- */
-class ReservationLocationDeleteBehavior extends ReservationAppBehavior {
-
-/**
- * 施設削除にともなう施設関係データの削除
- *
- * @param ReservationLocation $model ReservationLocation
- * @param string $locationKey 施設キー
- * @throws InternalErrorException
- * @return void
- */
- public function deleteLocationData(ReservationLocation $model, $locationKey) {
- // ReservationLocation 削除
- $conditions = [
- $model->alias . '.key' => $locationKey
- ];
- if (!$model->deleteAll($conditions)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- // ReservationLocationsRoom 削除
- $conditions = [
- $model->ReservationLocationsRoom->alias . '.reservation_location_key' => $locationKey
- ];
- if (!$model->ReservationLocationsRoom->deleteAll($conditions)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- // ReservationLocationReservable 削除
- $conditions = [
- $model->ReservationLocationReservable->alias . '.location_key' => $locationKey
- ];
- if (!$model->ReservationLocationReservable->deleteAll($conditions)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- // ReservationLocationsApprovalUser 削除
- $conditions = [
- $model->ReservationLocationsApprovalUser->alias . '.location_key' => $locationKey
- ];
- if (!$model->ReservationLocationsApprovalUser->deleteAll($conditions)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
-
-/**
- * 施設削除にともなう予約データの削除
- *
- * @param ReservationLocation $model ReservationLocation
- * @param string $locationKey 施設キー
- * @throws InternalErrorException
- * @return void
- */
- public function deleteEventData(ReservationLocation $model, $locationKey) {
- // 削除するReservationEvent.id 取得
- $conditions = [
- $model->ReservationEvent->alias . '.location_key' => $locationKey
- ];
- $reserveIds = $model->ReservationEvent->find(
- 'list',
- [
- 'recursive' => -1,
- 'conditions' => $conditions
- ]
- );
- $reserveIds = array_values($reserveIds);
-
- //// ReservationEventContent 削除
- //$conditions = [
- // $model->ReservationEventContent->alias . '.reservation_event_id' => $reserveIds
- //];
- //if (!$model->ReservationEventContent->deleteAll($conditions)) {
- // throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- //}
-
- // ReservationEventShareUser 削除
- $conditions = [
- $model->ReservationEventShareUser->alias . '.reservation_event_id' => $reserveIds
- ];
- if (!$model->ReservationEventShareUser->deleteAll($conditions)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- // ReservationEvent 削除
- $conditions = [
- $model->ReservationEvent->alias . '.location_key' => $locationKey
- ];
- if (!$model->ReservationEvent->deleteAll($conditions)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
-}
\ No newline at end of file
diff --git a/Model/Behavior/ReservationLocationValidateBehavior.php b/Model/Behavior/ReservationLocationValidateBehavior.php
deleted file mode 100644
index 6e51c14..0000000
--- a/Model/Behavior/ReservationLocationValidateBehavior.php
+++ /dev/null
@@ -1,33 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class ReservationLocationValidateBehavior
- */
-class ReservationLocationValidateBehavior extends ReservationAppBehavior {
-
-/**
- * 施設管理者のバリデート
- *
- * @param Model $model ReservationLocation
- * @param array $check チェック対象データ
- * @return bool
- */
- public function validateSelectUser($model, $check) {
- if ($model->data['ReservationLocation']['use_workflow']) {
- // 承認必要なら承認者必須
- $users = Hash::get($model->data, 'ReservationLocationsApprovalUser', false);
- if ($users) {
- return (count($users) > 0);
- }
- return false;
- }
- return true;
- }
-}
\ No newline at end of file
diff --git a/Model/Behavior/ReservationMailBehavior.php b/Model/Behavior/ReservationMailBehavior.php
deleted file mode 100644
index 9b0fedd..0000000
--- a/Model/Behavior/ReservationMailBehavior.php
+++ /dev/null
@@ -1,212 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('WorkflowComponent', 'Workflow.Controller/Component');
-App::uses('ReservationPermissiveRooms', 'Reservations.Utility');
-App::uses('ReservationPlan', 'Reservations.Helper');
-App::uses('ReservationPlanRrule', 'Reservations.Helper');
-
-/**
- * ReservationMailBehavior
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationMailBehavior extends ReservationAppBehavior {
-
-/**
- * sendWorkflowAndNoticeMail
- *
- * 承認依頼メールや公開通知メールを送る処理
- * 施設予約は「カレント」のルームIDじゃない情報を作ったりするのでカレントのすり替え処理が必要
- *
- * @param Model $model モデル
- * @param int $eventId イベントID(繰り返しの場合は先頭のイベント)
- * @param bool $isMyPrivateRoom (プライベートルームの情報かどうか)
- * @return void
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- */
- public function sendWorkflowAndNoticeMail(Model $model, $eventId, $isMyPrivateRoom) {
- $model->loadModels([
- 'Block' => 'Blocks.Block',
- 'ReservationEvent' => 'Reservations.ReservationEvent',
- 'ReservationLocation' => 'Reservations.ReservationLocation'
- ]);
- $model->ReservationEvent->Behaviors->load('Reservations.ReservationMailQueue');
-
- // 指定されたイベント情報を取得
- $data = $model->ReservationEvent->getEventById($eventId);
- if (! $data) {
- return;
- }
-
- $model->ReservationEvent->set($data);
-
- $this->_setDateTags($model, $data);
- $this->_setRruleTags($model, $data);
- $this->_setUrlTags($model, $data);
- $this->_setRoomTags($model, $data);
-
- $reservationEvent = $data['ReservationEvent'];
- $model->ReservationEvent->setAddEmbedTagValue('X-SUBJECT', $reservationEvent['title']);
- $model->ReservationEvent->setAddEmbedTagValue('X-CONTACT', $reservationEvent['contact']);
-
- // 施設名に置き換え
- $location = $model->ReservationLocation->getByKey($data['ReservationEvent']['location_key']);
- $model->ReservationEvent->setAddEmbedTagValue('X-LOCATION',
- $location['ReservationLocation']['location_name']);
-
- $model->ReservationEvent->setAddEmbedTagValue('X-BODY', $reservationEvent['description']);
-
- // すり替え前にオリジナルルームID,オリジナルのBlockID,オリジナルのBlockKeyを確保
- $originalRoomId = Current::read('Room.id');
- $originalBlockId = Current::read('Block.id');
- $originalBlockKey = Current::read('Block.key');
-
- // 予定のルームID
- $eventRoomId = $data['ReservationEvent']['room_id'];
- $eventBlockId = $originalBlockId;
- $eventBlockKey = $originalBlockKey;
- $block = $model->Block->find('first', array(
- 'conditions' => array(
- 'plugin_key' => 'reservations',
- 'room_id' => $eventRoomId
- )
- ));
- if ($block) {
- $eventBlockId = $block['Block']['id'];
- $eventBlockKey = $block['Block']['key'];
- }
-
- // パーミッション情報をターゲットルームのものにすり替え
- //ReservationPermissiveRooms::setCurrentPermission($eventRoomId);
- // カレントのルームIDなどをすり替え
- Current::$current['Room']['id'] = $eventRoomId;
- Current::$current['Block']['id'] = $eventBlockId;
- Current::$current['Block']['key'] = $eventBlockKey;
-
- // プライベートのものの場合は自分と共有者に
- if ($isMyPrivateRoom) {
- $userIds = Hash::merge(
- array(
- Current::read('User.id'),
- ),
- Hash::extract($data['ReservationEventShareUser'], '{n}.share_user')
- );
- $model->ReservationEvent->setSetting(MailQueueBehavior::MAIL_QUEUE_SETTING_USER_IDS, $userIds);
- }
-
- $model->ReservationEvent->Behaviors->load('Mails.IsMailSend',
- array(
- 'keyField' => 'key',
- MailQueueBehavior::MAIL_QUEUE_SETTING_IS_MAIL_SEND_POST => true,
- ));
-
- $isMailSend = $model->ReservationEvent->isMailSend(
- MailSettingFixedPhrase::DEFAULT_TYPE, $data['ReservationEvent']['key'], 'reservations');
-
- if ($isMailSend) {
- // メールキュー作成
- $model->ReservationEvent->setSetting('workflowType', 'workflow');
- $model->ReservationEvent->saveQueue();
- MailSend::send();
- //}
- }
-
- $model->ReservationEvent->Behaviors->unload('Mails.IsMailSend');
- $model->ReservationEvent->Behaviors->unload('Reservations.ReservationMailQueue');
-
- // すり替えものをリカバー
- Current::$current['Room']['id'] = $originalRoomId;
- Current::$current['Block']['id'] = $originalBlockId;
- Current::$current['Block']['key'] = $originalBlockKey;
- //ReservationPermissiveRooms::recoverCurrentPermission();
- }
-
-/**
- * _setDateTags
- *
- * @param Model $model モデル
- * @param array $data 予定データ
- * @return void
- */
- protected function _setDateTags(Model $model, $data) {
- $view = new View();
- $planHelper = $view->loadHelper('Reservations.ReservationPlan');
-
- $startDate = $planHelper->makeDatetimeWithUserSiteTz(
- $data['ReservationEvent']['dtstart'], $data['ReservationEvent']['is_allday']);
- $model->ReservationEvent->setAddEmbedTagValue('X-START_TIME', $startDate);
-
- if ($data['ReservationEvent']['is_allday']) {
- $endDate = $planHelper->makeDatetimeWithUserSiteTz(
- $data['ReservationEvent']['dtstart'], $data['ReservationEvent']['is_allday']);
- } else {
- $endDate = $planHelper->makeDatetimeWithUserSiteTz(
- $data['ReservationEvent']['dtend'], $data['ReservationEvent']['is_allday']);
- }
- $model->ReservationEvent->setAddEmbedTagValue('X-END_TIME', $endDate);
- }
-/**
- * _setRruleTags
- *
- * @param Model $model モデル
- * @param array $data 予定データ
- * @return void
- */
- protected function _setRruleTags(Model $model, $data) {
- $view = new View();
- $rruleHelper = $view->loadHelper('Reservations.ReservationPlanRrule');
-
- $rrule = $rruleHelper->getStringRrule($data['ReservationRrule']['rrule']);
-
- if ($rrule != '') {
- $rrule = str_replace(' ', ' ', $rrule);
- $model->ReservationEvent->setAddEmbedTagValue('X-RRULE', htmlspecialchars_decode($rrule));
- } else {
- $model->ReservationEvent->setAddEmbedTagValue('X-RRULE', __d('reservations', 'nothing'));
- }
- }
-/**
- * _setUrlTags
- *
- * @param Model $model モデル
- * @param array $data 予定データ
- * @return void
- */
- protected function _setUrlTags(Model $model, $data) {
- $url = NetCommonsUrl::actionUrl(array(
- 'plugin' => Current::read('Plugin.key'),
- 'controller' => 'reservation_plans',
- 'action' => 'view',
- 'block_id' => '',
- // メールを受け取ったユーザが必ずしもこのフレームにアクセスできるとは限らないのでFrameIdは入れない
- //'frame_id' => Current::read('Frame.id'),
- 'key' => $data['ReservationEvent']['key']
- ));
- $url = NetCommonsUrl::url($url, true);
- $model->ReservationEvent->setAddEmbedTagValue('X-URL', $url);
- }
-
-/**
- * _setRoomTags
- *
- * @param Model $model モデル
- * @param array $data 予定データ
- * @return void
- */
- protected function _setRoomTags(Model $model, $data) {
- if ($data['ReservationEvent']['room_id'] == Space::getRoomIdRoot(Space::COMMUNITY_SPACE_ID)) {
- $model->ReservationEvent->setAddEmbedTagValue('X-ROOM', __d('reservations', 'All the members'));
- }
- }
-}
diff --git a/Model/Behavior/ReservationMailQueueBehavior.php b/Model/Behavior/ReservationMailQueueBehavior.php
deleted file mode 100644
index 60f4177..0000000
--- a/Model/Behavior/ReservationMailQueueBehavior.php
+++ /dev/null
@@ -1,379 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-App::uses('MailQueueBehavior', 'Mails.Model/Behavior');
-
-/**
- * Class ReservationMailQueueBehavior
- */
-class ReservationMailQueueBehavior extends MailQueueBehavior {
-
-/**
- * キュー保存
- *
- * ε( v ゚ω゚) <内部でCallしている___saveQueueNoticeMailがprivateメソッドで上書きできなかったので
- * このメソッドごとラップした。___saveQueueNoticeMailをprotectedにできれば、このメソッドは不要
- *
- * @param Model $model モデル
- * @param array $sendTimes メール送信日時 配列
- * @param string $typeKey メールの種類
- * @param string $sendRoomPermission 送信するルームの役割。ルームでないときは無視される
- * @return void
- */
- public function saveQueue(Model $model, $sendTimes = null,
- $typeKey = MailSettingFixedPhrase::DEFAULT_TYPE, $sendRoomPermission = null) {
- $model->Behaviors->load('Mails.IsMailSend', $this->settings[$model->alias]);
-
- $languageId = Current::read('Language.id');
- $workflowType = Hash::get($this->settings, $model->alias . '.' .
- self::MAIL_QUEUE_SETTING_WORKFLOW_TYPE);
- $userIds = $this->settings[$model->alias][self::MAIL_QUEUE_SETTING_USER_IDS];
- $toAddresses = $this->settings[$model->alias][self::MAIL_QUEUE_SETTING_TO_ADDRESSES];
- $roomId = Current::read('Room.id');
- if ($workflowType == self::MAIL_QUEUE_WORKFLOW_TYPE_GROUP_ONLY) {
- // グループ配信は、ルーム配信しない
- $roomId = null;
- }
-
- $workflowTypeCheck = array(
- self::MAIL_QUEUE_WORKFLOW_TYPE_WORKFLOW,
- self::MAIL_QUEUE_WORKFLOW_TYPE_COMMENT,
- );
- if (in_array($workflowType, $workflowTypeCheck, true)) {
- // --- ワークフローのstatusによって送信内容を変える
- // 各プラグインが承認機能=ONかどうかは、気にしなくてOK。承認機能=OFFなら status=公開が飛んでくるため。
-
- //承認ワークフローを使うときのみ承認関連のメールは送らない
- if ($model->data['ReservationLocation']['use_workflow']) {
- // 承認依頼通知, 差戻し通知, 承認完了通知メール(即時)
- $this->_saveQueueNoticeMail($model, $languageId, $typeKey);
- }
-
- $mailSettingPlugin = $this->__getMailSettingPlugin($model, $languageId, $typeKey);
- $isMailSend = Hash::get($mailSettingPlugin, 'MailSetting.is_mail_send');
- $contentKey = $this->__getContentKey($model);
-
- /** @see IsMailSendBehavior::isSendMailQueuePublish() */
- if (! $model->isSendMailQueuePublish($isMailSend, $contentKey)) {
- return;
- }
-
- // 施設予約は予約毎にメール通知するか決められる
- if (!$model->data['ReservationEvent']['is_enable_mail']) {
- // 予約で「メールで通知する」になってなかったら
- return;
- }
-
- // 投稿メール - ルーム配信
- $this->saveQueuePostMail($model, $languageId, $sendTimes, $userIds, $toAddresses,
- $roomId, $typeKey);
-
- } else {
- //$workflowType == self::MAIL_QUEUE_WORKFLOW_TYPE_NONE ||
- //$workflowType == self::MAIL_QUEUE_WORKFLOW_TYPE_ANSWER ||
- //$workflowType == self::MAIL_QUEUE_WORKFLOW_TYPE_GROUP_ONLY) {
- // ・承認機能なし - 「公開」記事の内容を投稿メールでルーム配信
- // ・回答メール配信(即時) - ユーザID、メールアドレス、ルームに即時配信
- // ・グループ送信のみ - ユーザIDに配信
-
- // メールキューSave
- $this->saveQueuePostMail($model, $languageId, $sendTimes, $userIds, $toAddresses,
- $roomId, $typeKey);
- }
- }
-
-/**
- * 通知メール - 登録者に配信(即時) - メールキューSave
- * - 承認依頼通知, 差戻し通知, 承認完了通知メール
- *
- * @param Model $model モデル
- * @param int $languageId 言語ID
- * @param string $typeKey メールの種類
- * @return void
- * @throws InternalErrorException
- */
- protected function _saveQueueNoticeMail(Model $model, $languageId,
- $typeKey = MailSettingFixedPhrase::DEFAULT_TYPE) {
- $mailSettingPlugin = $this->__getMailSettingPlugin($model, $languageId, $typeKey);
-
- $isMailSendApproval = Hash::get($mailSettingPlugin, 'MailSetting.is_mail_send_approval');
- //$modifiedUserId = Hash::get($model->data, $model->alias . '.modified_user');
- //$settingPluginKey = $this->__getSettingPluginKey($model);
-
- if (!$isMailSendApproval) {
- // 承認メール使わないなら何もしない
- return;
- }
- /** @see IsMailSendBehavior::isSendMailQueueNotice() */
- // ワークフローを使うかチェックいれてたけど不要なのでコメントアウト
- //if (! $model->isSendMailQueueNotice($isMailSendApproval, $modifiedUserId, $settingPluginKey)) {
- // return;
- //}
-
- // 承認コメント
- $comment = Hash::get($model->data, 'WorkflowComment.comment');
- $contentKey = $this->__getContentKey($model);
- /** @see IsMailSendBehavior::isPublishableEdit() */
- $isPublishableEdit = $model->isPublishableEdit($contentKey);
-
- // 定型文の種類
- $mailAssignTag = new NetCommonsMailAssignTag();
- $status = Hash::get($model->data, $model->alias . '.status');
- $fixedPhraseType = $mailAssignTag->getFixedPhraseType($status, $comment, $isPublishableEdit);
-
- $mailQueue = $this->__createMailQueue($model, $languageId, $typeKey, $fixedPhraseType);
- $mailQueue['MailQueue']['send_time'] = $model->MailQueue->getSaveSendTime();
-
- /** @see MailQueue::saveMailQueue() */
- if (! $mailQueueResult = $model->MailQueue->saveMailQueue($mailQueue)) {
- throw new InternalErrorException('Failed ' . __METHOD__);
- }
- $mailQueueId = $mailQueueResult['MailQueue']['id'];
-
- // 登録者に配信
- $this->__addMailQueueUserInCreatedUser($model, $mailQueueId);
-
- // ルーム内の承認者達に配信
- //$this->__addMailQueueUserInRoomAuthorizers($model, $mailQueueId);
- $this->__addMailQueueUserInApprovalUsers($model, $mailQueueId);
- }
-
-/**
- * 施設の承認者に配信 登録
- *
- * @param Model $model モデル
- * @param int $mailQueueId メールキューID
- * @return bool
- * @throws InternalErrorException
- */
- private function __addMailQueueUserInApprovalUsers(Model $model, $mailQueueId) {
- $contentKey = $this->__getContentKey($model);
- $pluginKey = $this->settings[$model->alias]['pluginKey'];
- //$permissionKey = $this->settings[$model->alias]['editablePermissionKey'];
-
- // 既に登録者に配信セット済みの人には送らない
- $notSendKey = self::MAIL_QUEUE_SETTING_NOT_SEND_ROOM_USER_IDS;
- $notSendRoomUserIds = $this->settings[$model->alias][$notSendKey];
-
- // 施設の承認者にメールする
- // 予約の施設取得
- $this->ReservationLocation = ClassRegistry::init('Reservations.ReservationLocation');
- $locationKey = $model->data['ReservationEvent']['location_key'];
- $location = $this->ReservationLocation->getByKey($locationKey);
- // 施設の承認者取得
- $approvalUserIds = $location['approvalUserIds'];
-
- $blockKey = Current::read('Block.key');
- // 承認者にのメールキュー登録
- $mailQueueUser = [
- 'MailQueueUser' => [
- 'plugin_key' => $pluginKey,
- 'block_key' => $blockKey,
- 'content_key' => $contentKey,
- 'mail_queue_id' => $mailQueueId,
- 'user_id' => null,
- 'room_id' => null,
- 'to_address' => null,
- 'send_room_permission' => null,
- 'not_send_room_user_ids' => null,
- ],
- ];
- foreach ($approvalUserIds as $userId) {
- // 送らないユーザIDにあれば、登録しない
- if (in_array($userId, $notSendRoomUserIds)) {
- continue;
- }
- $mailQueueUser['MailQueueUser']['user_id'] = $userId;
- // 新規登録
- $mailQueueUser = $model->MailQueueUser->create($mailQueueUser);
- if (! $model->MailQueueUser->saveMailQueueUser($mailQueueUser)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- // 承認完了時に2通(承認完了とルーム配信)を送らず1通にする対応
- // ルーム配信で送らないユーザID を返す
- $notSendRoomUserIds[] = $userId;
- }
-
- // 編集者達(編集許可ありユーザ)
- /** @see MailQueueUser::addMailQueueUserInRoomByPermission() */
- //$notSendRoomUserIds = $model->MailQueueUser->addMailQueueUserInRoomByPermission($mailQueueId,
- // $contentKey, $pluginKey, $permissionKey, $notSendRoomUserIds);
- //
- //// 承認者達(公開許可ありユーザ)
- //$permissionKey = $this->settings[$model->alias]['publishablePermissionKey'];
- //$notSendRoomUserIds = $model->MailQueueUser->addMailQueueUserInRoomByPermission($mailQueueId,
- // $contentKey, $pluginKey, $permissionKey, $notSendRoomUserIds);
-
- // 承認完了時に2通(承認完了とルーム配信)を送らず1通にする対応
- // ルーム配信で送らないユーザID セット
- $this->settings[$model->alias][$notSendKey] =
- Hash::merge($this->settings[$model->alias][$notSendKey], $notSendRoomUserIds);
- }
-
- // ============== 以下MailQueueBehaviorそのまま privateメソッドを呼べないのもってきただけ============
-
-/**
- * コンテンツキー ゲット
- *
- * @param Model $model モデル
- * @return string コンテンツキー
- */
- private function __getContentKey(Model $model) {
- $keyField = $this->settings[$model->alias]['keyField'];
- return $model->data[$model->alias][$keyField];
- }
-
-/**
- * プラグインのメール設定(定型文等) 取得
- *
- * @param Model $model モデル
- * @param int $languageId 言語ID
- * @param string $typeKey メールの種類
- * @return array メール設定データ配列
- */
- private function __getMailSettingPlugin(Model $model, $languageId,
- $typeKey = MailSettingFixedPhrase::DEFAULT_TYPE) {
- if (!$this->_mailSettingPlugin) {
- $settingPluginKey = $this->__getSettingPluginKey($model);
- /** @see MailSetting::getMailSettingPlugin() */
- $this->_mailSettingPlugin = $model->MailSetting->getMailSettingPlugin($languageId, $typeKey,
- $settingPluginKey);
- }
- return $this->_mailSettingPlugin;
- }
-
-/**
- * プラグイン設定を取得するためのプラグインキー ゲット
- *
- * @param Model $model モデル
- * @return string コンテンツキー
- */
- private function __getSettingPluginKey(Model $model) {
- $workflowType = Hash::get($this->settings, $model->alias . '.' .
- self::MAIL_QUEUE_SETTING_WORKFLOW_TYPE);
- if ($workflowType == self::MAIL_QUEUE_WORKFLOW_TYPE_COMMENT) {
- return $model->data[$model->alias]['plugin_key'];
- }
- // 通常
- return Current::read('Plugin.key');
- }
-/**
- * メールキューデータ 新規作成
- *
- * @param Model $model モデル
- * @param int $languageId 言語ID
- * @param string $typeKey メールの種類
- * @param string $fixedPhraseType SiteSettingの定型文の種類
- * @param string $fixedPhraseBodyAfter 末尾定型文
- * @return array メールキューデータ
- */
- private function __createMailQueue(Model $model,
- $languageId,
- $typeKey = MailSettingFixedPhrase::DEFAULT_TYPE,
- $fixedPhraseType = null,
- $fixedPhraseBodyAfter = '') {
- $mailSettingPlugin = $this->__getMailSettingPlugin($model, $languageId, $typeKey);
- $replyTo = Hash::get($mailSettingPlugin, 'MailSetting.reply_to');
- $contentKey = $this->__getContentKey($model);
- $pluginKey = $this->settings[$model->alias]['pluginKey'];
- $pluginName = $this->settings[$model->alias][self::MAIL_QUEUE_SETTING_PLUGIN_NAME];
- $blockKey = Current::read('Block.key');
-
- // メール生文の作成
- $mailAssignTag = new NetCommonsMailAssignTag();
- $mailAssignTag->initPlugin($languageId, $pluginName);
- $mailAssignTag->setMailFixedPhrase($languageId, $fixedPhraseType, $mailSettingPlugin);
-
- // 埋め込みタグのウィジウィグ対象
- $mailAssignTag->embedTagsWysiwyg = $this->settings[$model->alias]['embedTagsWysiwyg'];
-
- // 末尾定型文
- $mailAssignTag->setFixedPhraseBody($mailAssignTag->fixedPhraseBody . $fixedPhraseBodyAfter);
-
- // --- 埋め込みタグ
- $embedTags = $this->settings[$model->alias]['embedTags'];
- $xUrl = Hash::get($embedTags, 'X-URL', array());
- $mailAssignTag->setXUrl($contentKey, $xUrl);
- if (is_array($xUrl)) {
- $embedTags = Hash::remove($embedTags, 'X-URL');
- }
-
- $createdUserId = Hash::get($model->data, $model->alias . '.created_user');
- $mailAssignTag->setXUser($createdUserId);
-
- // ワークフロー
- $useWorkflowBehavior = $model->Behaviors->loaded('Workflow.Workflow');
- $mailAssignTag->setXWorkflowComment($model->data, $fixedPhraseType, $useWorkflowBehavior);
-
- $workflowType = Hash::get($this->settings, $model->alias . '.' .
- self::MAIL_QUEUE_SETTING_WORKFLOW_TYPE);
- $useTagBehavior = $model->Behaviors->loaded('Tags.Tag');
-
- // タグプラグイン
- $mailAssignTag->setXTags($model->data, $workflowType, $useTagBehavior);
-
- // 定型文の埋め込みタグをセット
- $mailAssignTag->assignTagDatas($embedTags, $model->data);
-
- // - 追加の埋め込みタグ セット
- // 既にセットされているタグであっても、上書きされる
- $mailAssignTag->assignTags($this->settings[$model->alias]['addEmbedTagsValues']);
-
- // 埋め込みタグ変換:メール定型文の埋め込みタグを変換して、メール生文にする
- $mailAssignTag->assignTagReplace();
-
- // メール本文の共通ヘッダー文、署名追加
- $mailAssignTag->fixedPhraseBody =
- $mailAssignTag->addHeaderAndSignature($mailAssignTag->fixedPhraseBody);
-
- $mailQueue['MailQueue'] = array(
- 'language_id' => $languageId,
- 'plugin_key' => $pluginKey,
- 'block_key' => $blockKey,
- 'content_key' => $contentKey,
- 'reply_to' => $replyTo,
- 'mail_subject' => $mailAssignTag->fixedPhraseSubject,
- 'mail_body' => $mailAssignTag->fixedPhraseBody,
- 'send_time' => null,
- );
-
- // MailQueueは新規登録
- $mailQueue = $model->MailQueue->create($mailQueue);
- return $mailQueue;
- }
-
-/**
- * 登録者に配信 登録
- *
- * @param Model $model モデル
- * @param int $mailQueueId メールキューID
- * @return void
- */
- private function __addMailQueueUserInCreatedUser(Model $model, $mailQueueId) {
- $createdUserId = Hash::get($model->data, $model->alias . '.created_user');
-
- // ルーム配信で送らないユーザID にセット済みであれば、既に登録者に配信セット済みのため、セットしない
- $notSendKey = self::MAIL_QUEUE_SETTING_NOT_SEND_ROOM_USER_IDS;
- $notSendRoomUserIds = $this->settings[$model->alias][$notSendKey];
- if (in_array($createdUserId, $notSendRoomUserIds)) {
- return;
- }
-
- $contentKey = $this->__getContentKey($model);
- $pluginKey = $this->settings[$model->alias]['pluginKey'];
-
- /** @see MailQueueUser::addMailQueueUserInCreatedUser() */
- $model->MailQueueUser->addMailQueueUserInCreatedUser($mailQueueId, $createdUserId, $contentKey,
- $pluginKey);
-
- // 承認完了時に2通(承認完了とルーム配信)を送らず1通にする対応
- // ルーム配信で送らないユーザID セット
- $this->settings[$model->alias][$notSendKey][] = $createdUserId;
- }
-}
\ No newline at end of file
diff --git a/Model/Behavior/ReservationMonthlyEntryBehavior.php b/Model/Behavior/ReservationMonthlyEntryBehavior.php
deleted file mode 100644
index 5801212..0000000
--- a/Model/Behavior/ReservationMonthlyEntryBehavior.php
+++ /dev/null
@@ -1,313 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('ReservationSupport', 'Reservations.Utility');
-App::uses('ReservationTime', 'Reservations.Utility');
-
-/**
- * ReservationMonthlyEntryBehavior
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationMonthlyEntryBehavior extends ReservationAppBehavior {
-
-/**
- * Default settings
- *
- * @author Noriko Arai
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2015, NetCommons Project
- */
- protected $_defaults = array(
- );
-
-/**
- * 月周期の登録(月単位-各月の指定日)
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams planParams
- * @param array $rruleData rruleData
- * @param array $eventData eventデータ(ReservationEventのモデルデータ)
- * @param int $bymonthday bymonthday
- * @param int $first 最初のデータかどうか 1:最初である 0:最初ではない. 初期値は0
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return mixed boolean true:登録せず終了 false:失敗、array 登録成功: array(登録した開始年月日時分秒, 登録した終了年月日時分秒)
- */
- public function insertMonthlyByMonthday(Model $model, $planParams, $rruleData,
- $eventData, $bymonthday, $first = 0, $createdUserWhenUpd = null) {
- CakeLog::debug("DBG: insertMonthlyByMonthday() start.
- rrule[INDEX]=[" . $model->rrule['INDEX'] . "]");
-
- $model->rrule['INDEX']++;
-
- //ユーザタイムゾーンを取得しておく。
- $userTz = (new NetCommonsTime())->getUserTimezone();
-
- //開始日付時刻の処理
- $userStartTime = '';
- $startTimestamp = $currentDay = $interval = $intervalDay = 0;
- $this->__setMonthlyByMonthdayStartDtProc($eventData, $userStartTime, $startTimestamp,
- $userTz, $currentDay, $first, $model, $interval, $intervalDay);
-
- CakeLog::debug("DBG: 開始日付時刻処理. startTimestamp[" . $startTimestamp . "]
- first[" . $first . "] currentDay[" . $currentDay . "]
- rrule[BYMONTHDAY][0]=[" . $model->rrule['BYMONTHDAY'][0] . "]
- interval[" . $interval . "] intervalDay[" . $intervalDay . "]");
-
- //終了日付時刻の処理
- //NC3は内部はサーバー系時刻なのでtimezoneDateはつかわない
- $eTime = $eventData['ReservationEvent']['end_date'] .
- $eventData['ReservationEvent']['end_time']; //catしてYmdHisにする
-
- //以下で使う時間系は、00:00:00など画面上(=ユーザー系)でのカレンダ日付時刻を
- //さしているので、ユーザー系に直す。
- //
- $userEndTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($eTime));
- $userEndTime = ReservationTime::dt2calDt($userEndTime);
-
- //ユーザー系終了日の00:00:00のタイムスタンプを取得
- $date = new DateTime('now', (new DateTimeZone($userTz)));
- $date->setDate(substr($userEndTime, 0, 4),
- substr($userEndTime, 4, 2), substr($userEndTime, 6, 2));
- $date->setTime(0, 0, 0);
- $endTimestamp = $date->getTimestamp();
-
- //開始日と終了日の差分日数の計算
- $diffNum = ($endTimestamp - $startTimestamp) / 86400;
-
- CakeLog::debug("DBG: 終了日付時刻処理. eTime[" . $eTime . "]
- endTimestamp[" . $endTimestamp . "] 開始日と終了日の差分日数[" . $diffNum . "]");
-
- //ユーザー系開始日、終了日をつかった、インターバル月数とインター
- //バル日数を考慮した開始・終了日付時刻の実計算
- $date = new DateTime('now', (new DateTimeZone($userTz)));
- $date->setDate(substr($userStartTime, 0, 4),
- substr($userStartTime, 4, 2) + $interval,
- $model->rrule['BYMONTHDAY'][0] - $intervalDay);
- $date->setTime(substr($userStartTime, 8, 2),
- substr($userStartTime, 10, 2), substr($userStartTime, 12, 2));
- $startTimestamp = $date->getTimestamp(); //debug出力用にtimestamp取得
- //isRepeatable(),insert()の引数は、サーバー系なので「ここで」TZを変換
- $date->setTimeZone(new DateTimeZone('UTC'));
- $svrStartDate = $date->format('Ymd');
- $svrStartTime = $date->format('His');
-
- $date = new DateTime('now', (new DateTimeZone($userTz)));
- $date->setDate(substr($userStartTime, 0, 4), //年月は"userStartTime"を計算に使う
- substr($userStartTime, 4, 2) + $interval,
- $model->rrule['BYMONTHDAY'][0] - $intervalDay + $diffNum);
- $date->setTime(substr($userEndTime, 8, 2), //時分秒は"userEndTime"を使う
- substr($userEndTime, 10, 2), substr($userEndTime, 12, 2));
- $endTimestamp = $date->getTimestamp(); //debug出力用にtimestamp取得
- //isRepeatable(),insert()の引数は、サーバー系なので「ここで」TZを変換
- $date->setTimeZone(new DateTimeZone('UTC'));
- $svrEndDate = $date->format('Ymd');
- $svrEndTime = $date->format('His');
-
- CakeLog::debug("DBG: startTimestamp[" . $startTimestamp . "]
- svrStartDate[" . $svrStartDate . "] svrStartTime[" . $svrStartTime . "]
- endTimestamp[" . $endTimestamp . "] svrEndDate[" . $svrEndDate . "]
- svrEndTime[" . $svrEndTime . "]");
-
- if (!ReservationSupport::isRepeatable($model->rrule, ($svrStartDate . $svrStartTime),
- $eventData['ReservationEvent']['timezone'], $model->isOverMaxRruleIndex)) {
- CakeLog::debug("DBG: 繰返しがとまったので、callから復帰する。");
- //繰返しがとまったので、callから復帰する。
- return true;
- }
-
- CakeLog::debug("DBG: insert(svrStartDateTime[" . $svrStartDate . $svrStartTime . "]
- svrEndDateTime[" . $svrEndDate . $svrEndTime . "])実行");
- $rEventData = $this->insert($model, $planParams, $rruleData, $eventData,
- ($svrStartDate . $svrStartTime), ($svrEndDate . $svrEndTime), $createdUserWhenUpd);
- if ($rEventData['ReservationEvent']['id'] === null) {
- return false;
- }
-
- return $this->insertMonthlyByMonthday($model, $planParams, $rruleData, $rEventData,
- $bymonthday, 0, $createdUserWhenUpd);
- }
-
-/**
- * 月周期の登録(月単位-第N週M曜日)
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams planParams
- * @param array $rruleData rruleData
- * @param array $eventData eventデータ(ReservationEventのモデルデータ)
- * @param int $first 最初のデータかどうか 1:最初である 0:最初ではない
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return mixed boolean true:登録せず終了 false:失敗、array 登録成功: array(登録した開始年月日時分秒, 登録した終了年月日時分秒)
- */
- public function insertMonthlyByDay(Model $model, $planParams, $rruleData, $eventData,
- $first = 0, $createdUserWhenUpd = null) {
- CakeLog::debug("DBG: insertMonthlyByDay() start. rrule[INDEX]=[" . $model->rrule['INDEX'] . "]");
- $model->rrule['INDEX']++;
-
- //ユーザタイムゾーンを取得しておく。
- $userTz = (new NetCommonsTime())->getUserTimezone();
-
- //setStimeEtimeAndByday()返ってくる$sTime, $eTime, $bydayはすべてサーバー系日付時刻です。
- $this->setStimeEtimeAndByday($model->rrule, $eventData, $first, $userTz, $sTime, $eTime, $byday);
-
- CakeLog::debug("DBG: setStimeEtimeAndByday(first[" . $first . "] userTz[" . $userTz . "])
- 結果. sTime[" . $sTime . "] eTime[" . $eTime . "] byday[" . $byday . "]");
-
- //call復帰条件のチェック
- if ($first && $sTime >= $byday) {
- CakeLog::debug("DBG: first[" . $first . "] is TRUE and
- sTime[" . $sTime . "] >= byday[" . $byday, "]. i DEC and ReCall.");
- //開始日(対象日?)が繰返しENDのb(第x週第y曜日の実日)を超したら、行き過ぎなので、INDEXをデクリメントして、自分を再帰callする。
- $model->rrule['INDEX']--;
- return $this->insertMonthlyByDay($model, $planParams, $rruleData, $eventData,
- 0, $createdUserWhenUpd);
- }
-
- //setStartDateTiemAndEndDateTime()より返される時刻系はサーバー系です
- $svrStartDate = $svrStartTime = $svrEndDate = $svrEndTime = '';
- $this->setStartDateTiemAndEndDateTime($sTime, $eTime, $byday, $userTz, $svrStartDate,
- $svrStartTime, $svrEndDate, $svrEndTime);
-
- CakeLog::debug("DBG: setStartDateTiemAndEndDateTime処理結果.
- svrStartDate[" . $svrStartDate . "] svrStartTime[" . $svrStartTime . "]
- svrEndDate[" . $svrEndDate . "] svrEndTime[" . $svrEndTime . "]");
-
- if (!ReservationSupport::isRepeatable($model->rrule, ($svrStartDate . $svrStartTime),
- $eventData['ReservationEvent']['timezone'], $model->isOverMaxRruleIndex)) {
-
- CakeLog::debug("DBG: isRepeatable() がFALSEを返したので、
- 繰返しをとめて復帰します。");
-
- //繰り返しがとまったので、復帰いたします。
- return true;
- }
-
- CakeLog::debug("DBG: insert(svrStartDateTime[" . $svrStartDate . $svrStartTime . "]
- svrEndDateTime[" . $svrEndDate . $svrEndTime . "])実行");
-
- $rEventData = $this->insert($model, $planParams, $rruleData, $eventData,
- ($svrStartDate . $svrStartTime), ($svrEndDate . $svrEndTime), $createdUserWhenUpd);
- if ($rEventData['ReservationEvent']['id'] === null) {
- return false;
- }
-
- return $this->insertMonthlyByDay($model, $planParams, $rruleData, $rEventData,
- 0, $createdUserWhenUpd);
- }
-
-/**
- * sTime,eTimeおよびbydayの設定
- *
- * @param array $rrule rrule配列
- * @param array $eventData eventData
- * @param int $first first 1:最初のデータ 0:最初のデータでない
- * @param string $userTz userTz ユーザー系のタイムゾーンID
- * @param string &$sTime sTime サーバー系開始日付時刻をセットして返す。
- * @param string &$eTime eTime サーバー系終了日付時刻をセットして返す。
- * @param string &$byday byday
- * @return void
- */
- public function setStimeEtimeAndByday($rrule, $eventData, $first, $userTz, &$sTime,
- &$eTime, &$byday) {
- //BYDAYは'2MO','3SA'といった形式である
- //よって、wdayNumにはSUなら0, SAなら6とった値になる。
- $wdayNum = array_search(substr($rrule['BYDAY'][0], -2), self::$reservationWdayArray);
- //よって、weekには、、最後2文字を取り除いた、第x月曜、第y土曜のx、yが取り出せる。
- $week = intval(substr($rrule['BYDAY'][0], 0, -2));
-
- //NC3は内部はサーバー系時刻なのでtimezoneDateはつかわない
- //このsTime, eTimeはcall元に返すための変数.
- $sTime = $eventData['ReservationEvent']['start_date'] .
- $eventData['ReservationEvent']['start_time']; //catしてYmdHisにする
- $eTime = $eventData['ReservationEvent']['end_date'] .
- $eventData['ReservationEvent']['end_time']; //catしてYmdHisにする
-
- //以下で使うmkdateの「1日00:00:00」とは、画面上(=ユーザー系)でのカレンダ
- //日付時刻をさしているので、ユーザー系に直す。
- //
- $userStartTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($sTime));
- $userStartTime = ReservationTime::dt2calDt($userStartTime);
-
- //ユーザー系開始日の同年インターバル月数考慮月1日のtimestampを求める。
- $date = new DateTime('now', (new DateTimeZone($userTz)));
- $date->setDate(substr($userStartTime, 0, 4),
- substr($userStartTime, 4, 2) + ($first ? 0 : $rrule['INTERVAL']), 1);
- $date->setTime(0, 0, 0);
- $timestamp = $date->getTimestamp();
-
- //タイムスタンプとユーザタイムゾーンを引数にわたしてgetByday()をcallする。
- //getByday()はサーバ系のYmdHis形式の文字列を返す。
- $byday = ReservationSupport::getByday($timestamp, $week, $wdayNum, $userTz);
- }
-
-/**
- * __setMonthlyByMonthdayStartDtProc
- *
- * 月周期のbymonthdayでの開始日処理
- *
- * @param array &$eventData eventData
- * @param string &$userStartTime userStartTime
- * @param int &$startTimestamp startTimestamp
- * @param string &$userTz userTz
- * @param int &$currentDay currentDay
- * @param int &$first first
- * @param Model $model model
- * @param int &$interval interval
- * @param int &$intervalDay intervalDay
- * @return void
- */
- private function __setMonthlyByMonthdayStartDtProc(&$eventData, &$userStartTime,
- &$startTimestamp, &$userTz, &$currentDay, &$first, $model, &$interval, &$intervalDay) {
- //NC3は内部はサーバー系時刻なのでtimezoneDateはつかわない
- $sTime = $eventData['ReservationEvent']['start_date'] .
- $eventData['ReservationEvent']['start_time']; //catしてYmdHisにする
-
- //以下で使う時間系は「1日00:00:00」など、画面上(=ユーザー系)でのカレンダ
- //日付時刻をさしているので、ユーザー系に直す。
- //
- $userStartTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($sTime));
- $userStartTime = ReservationTime::dt2calDt($userStartTime);
-
- //ユーザー系開始日の00:00:00のタイムスタンプを取得
- $date = new DateTime('now', (new DateTimeZone($userTz)));
- $date->setDate(substr($userStartTime, 0, 4), substr($userStartTime, 4, 2),
- substr($userStartTime, 6, 2));
- $date->setTime(0, 0, 0);
- $startTimestamp = $date->getTimestamp();
-
- //ユーザー系開始日をつかった、インターバル月数の計算
- $currentDay = intval(substr($userStartTime, 6, 2));
-
- if ($first && $currentDay < $model->rrule['BYMONTHDAY'][0]) {
- $interval = 0;
- } else {
- $interval = $model->rrule['INTERVAL'];
- }
-
- //ユーザー系開始日をつかった、指定月の1日(ついたち)の日付時刻の計算(指定月はインターバル月数を考慮して計算)
- $date = new DateTime('now', (new DateTimeZone($userTz)));
- $date->setDate(substr($userStartTime, 0, 4), substr($userStartTime, 4, 2) + $interval, 1);
- $date->setTime(0, 0, 0);
- //$firstTimestamp = $date->getTimestamp();
- $firstNumOfDaysOfMth = $date->format('t'); //指定月の日数y (28-31)
- if ($model->rrule['BYMONTHDAY'][0] > $firstNumOfDaysOfMth) {
- $intervalDay = $model->rrule['BYMONTHDAY'][0] - $firstNumOfDaysOfMth;
- //毎月x日のxが、指定月の日数(y)より大きき時、その差分日数(x-y)をインターバイル日数とする。
- } else {
- $intervalDay = 0;
- //毎月x日のxが、指定月の日数(y)以下の時、インターバイル日数は0(なし)とする。
- }
- }
-}
diff --git a/Model/Behavior/ReservationPlanGenerationBehavior.php b/Model/Behavior/ReservationPlanGenerationBehavior.php
deleted file mode 100644
index 2b08ed8..0000000
--- a/Model/Behavior/ReservationPlanGenerationBehavior.php
+++ /dev/null
@@ -1,499 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('WorkflowComponent', 'Workflow.Controller/Component');
-
- /**
- * ReservationPlanGenerationBehavior
- *
- * @property array $reservationWdayArray reservation weekday array 施設予約曜日配列
- * @property array $editRrules editRules 編集ルール配列
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationPlanGenerationBehavior extends ReservationAppBehavior {
-
-/**
- * Default settings
- *
- * @author Noriko Arai
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2015, NetCommons Project
- */
- protected $_defaults = array(
- );
-
-/**
- * 現世代の予定を作り出す
- *
- * @param Model $model 実際のモデル名
- * @param array $data data POSTされたrequest->data配列
- * @param int $originEventId originEventId(現eventのid)
- * @param string $originEventKey originEventKey(現eventのkey)
- * @param int $originRruleId originRruleId(現eventのkey)
- * @return int 成功時 現世代予定を返す。失敗時 InternalErrorExceptionを投げる。
- * @throws InternalErrorException
- */
- public function makeCurGenPlan(Model $model, $data,
- $originEventId, $originEventKey, $originRruleId) {
- $action = 'delete';
- $plan = $this->__makeCommonGenPlan($model, $action, $data, $originRruleId);
-
- //現世代予定のrruleDataのidとkeyをマーキングしておく.
- $plan['cur_rrule_id'] = $plan['ReservationRrule']['id'];
- $plan['cur_rrule_key'] = $plan['ReservationRrule']['key'];
-
- //現世代予定の指定されたeventDataのidとkeyをマーキングしておく.
- $plan['cur_event_id'] = $originEventId;
- $plan['cur_event_key'] = $originEventKey;
-
- return $plan;
- }
-
-/**
- * 元予定の新世代予定を作り出す
- *
- * @param Model $model 実際のモデル名
- * @param array $data POSTされたrequest->data配列
- * @param string $status status 変更時の施設予約独自の新status
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @param bool $isMyPrivateRoom isMyPrivateRoom
- * @param string|int $editRrule 編集ルール(この予約のみ、これ以降に指定した全ての予約、設定した全ての予約)
- * @return int 生成成功時 新しく生成した次世代予定($plan)を返す。失敗時 InternalErrorExceptionを投げる。
- * @throws InternalErrorException
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
- */
- public function makeNewGenPlan(Model $model, $data, $status,
- $createdUserWhenUpd, $isMyPrivateRoom, $editRrule) {
- $action = 'update';
- $plan = $this->__makeCommonGenPlan($model, $action, $data,
- $data['ReservationActionPlan']['origin_rrule_id']);
-
- //keyが同じrrule -> key同一のevents -> eventsの各子供をcopy保存する
-
- $plan = $this->__copyRruleData($model, $plan, $createdUserWhenUpd, $editRrule);
-
- $baseDate = str_replace('-', '', $data['ReservationActionPlanForDisp']['detail_start_datetime']);
-
- unset($plan['new_event_id']); //念のため変数クリア
- $effectiveEvents = array(); //有効なeventだけを格納する配列を用意
- foreach ($plan['ReservationEvent'] as &$event) {
- //exception_event_id int ... 1以上のとき、例外(削除)イベントidを指す」より、
- //ここの値が1以上の時は、例外(削除)イベントなので、copy対象から外す.
- if ($event['exception_event_id'] >= 1) {
- continue;
- }
- if ($editRrule == self::CALENDAR_PLAN_EDIT_THIS &&
- $data['ReservationActionPlan']['origin_event_id'] != $event['id']) {
- //この予約のみの場合、自分自身の予約以外は無視する。
- continue;
- }
- if ($editRrule == self::CALENDAR_PLAN_EDIT_AFTER &&
- $data['ReservationActionPlan']['origin_event_id'] != $event['id'] &&
- $baseDate > $event['start_date']) {
- //これ以降に指定した全ての予約の場合、基準日より過去のものは無視する。
- continue;
- }
-
- $newEventId = $newEventKey = null;
- list($event, $newEventId, $newEventKey) = $this->__copyEventData($model,
- $event,
- $plan['ReservationRrule']['id'],
- $status,
- $data['ReservationActionPlan']['origin_event_id'],
- $data['ReservationActionPlan']['origin_event_key'],
- $createdUserWhenUpd, $isMyPrivateRoom
- );
- if (!isset($plan['new_event_id']) && !empty($newEventId) && !empty($newEventKey)) {
- //対象元となったeventの新世代なので、新世代eventのidとkeyの値をplanにセットしておく
- //なお、この処理は1度だけ実行され2度は実行されない。
- $plan['new_event_id'] = $newEventId;
- $plan['new_event_key'] = $newEventKey;
- }
- $effectiveEvents[] = $event; //有効なeventだったので配列にappend
- }
-
- //有効なイベント集合配列に置き換える
- $plan['ReservationEvent'] = $effectiveEvents;
-
- return $plan;
- }
-
-/**
- * __copyRruleData
- *
- * 元予定の次世代CalenarRruleを作り出す
- *
- * @param Model $model 実際のモデル名
- * @param array $plan plan
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @param string|int $editRrule 編集ルール(この予約のみ、これ以降に指定した全ての予約、設定した全ての予約)
- * @return int 生成成功時 新しい$planを返す。失敗時 InternalErrorExceptionを投げる。
- * @throws InternalErrorException
- */
- private function __copyRruleData(Model $model, $plan, $createdUserWhenUpd, $editRrule) {
- //ReservationRruleには、status, is_latest, is_activeはない。
-
- $rruleData = array();
- $rruleData['ReservationRrule'] = $plan['ReservationRrule'];
-
- //次世代データの新規登録
- $originRruleId = $rruleData['ReservationRrule']['id'];
- $rruleData['ReservationRrule']['id'] = null;
- if ($editRrule == self::CALENDAR_PLAN_EDIT_THIS) {
- $rruleData['ReservationRrule']['rrule'] = '';
- }
-
- //作成者・作成日は原則、元予定のデータを引き継ぐ、、、が!例外がある。
- //例外追加1)
- //変更後の公開ルームidが、「元予定生成者の*ルーム」から「編集者・承認者(=ログイン者)の
- //プライベート」に変化していた場合、created_userを、元予定生成者「から」編集者・承認者(=ログイン者)
- //「へ」に変更すること。
- //=>これを考慮したcreatedUserWhenUpdを使えばよい。
- if ($createdUserWhenUpd !== null) {
- $rruleData['ReservationRrule']['created_user'] = $createdUserWhenUpd;
- }
-
- $rruleData['ReservationRrule']['modified_user'] = null;
- $rruleData['ReservationRrule']['modified'] = null;
-
- if (!isset($model->ReservationRrule)) {
- $model->loadModels(['ReservationRrule' => 'Reservations.ReservationRrule']);
- }
- $model->ReservationRrule->set($rruleData);
- if (!$model->ReservationRrule->validates()) { //ReservationRruleのチェック
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationRrule->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- $rruleData = $model->ReservationRrule->save($rruleData, false);
- if (!$rruleData) { //保存のみ
- CakeLog::error("変更時に指定された元予定(reservation_rrule_id=[" .
- $originRruleId . "])のCOPYに失敗");
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- $plan['ReservationRrule'] = $rruleData['ReservationRrule'];
-
- //新世代のrruleのidとkeyをReservationActionPlan直下に保存しておく。
- //
- $plan['new_rrule_id'] = $rruleData['ReservationRrule']['id'];
- $plan['new_rrule_key'] = $rruleData['ReservationRrule']['key'];
-
- return $plan;
- }
-
-/**
- * __copyEventData
- *
- * 元予定の次世代CalenarEventを作り出す
- * なお、対象元となったeventのCOPYの時だけ、newEventId, newEventKeyをセットして返す。
- *
- * @param Model $model 実際のモデル名
- * @param array $event event
- * @param int $reservationRruleId reservationRruleId
- * @param string $status status 変更時の施設予約独自新status
- * @param sring $originEventId 選択されたeventのid(origin_event_id)
- * @param sring $originEventKey 選択されたeventのkey(origin_event_key)
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @param bool $isMyPrivateRoom isMyPrivateRoom
- * @return int 生成成功時 新しい$event、newEventId, newEventKeyを返す。失敗時 InternalErrorExceptionを投げる。
- * @throws InternalErrorException
- * @SuppressWarnings(PHPMD)
- */
- private function __copyEventData(Model $model, $event, $reservationRruleId, $status,
- $originEventId, $originEventKey, $createdUserWhenUpd, $isMyPrivateRoom) {
- //ReservationEventには、status, is_latest, is_activeがある。
- //
- //通常、WFを組み込んでいる時は、is_latest,is_activeは、WFのbeforeSaveで、
- //insertの時だけstatusに従い自動調整セットされ、update(updateAll含む)の時は、
- //is_latest,is_activeは自動調整セットされない。
- //が!以下では、WF,WFCommentをunloadして外し、代わりに施設予約拡張の処理を実行
- //させているので、注意すること。
-
- $eventData = array();
- $eventData['ReservationEvent'] = $event;
-
- //次世代データの新規登録
- $originEventId = $eventData['ReservationEvent']['id'];
-
- $setNewIdAndKey = false;
- if ($eventData['ReservationEvent']['id'] == $originEventId &&
- $eventData['ReservationEvent']['key'] == $originEventKey) {
- //このeventは対象元となったeventである。
- $setNewIdAndKey = true;
- }
-
- $eventData['ReservationEvent']['id'] = null;
- $eventData['ReservationEvent']['reservation_rrule_id'] = $reservationRruleId;
-
- //「status, is_active, is_latest, created, created_user について」
- //statusは、元世代のstatus値を引き継ぐ。
- $eventData['ReservationEvent']['modified_user'] = null;
- $eventData['ReservationEvent']['modified'] = null;
-
- if (!isset($model->ReservationEvent)) {
- $model->loadModels(['ReservationEvent' => 'Reservations.ReservationEvent']);
- }
- // 各種Behaviorはずす FUJI
- $model->ReservationEvent->Behaviors->unload('Reservations.ReservationWorkflow');
- $model->ReservationEvent->Behaviors->unload('Workflow.WorkflowComment');
-
- $model->ReservationEvent->set($eventData);
- if (!$model->ReservationEvent->validates()) { //ReservationEventのチェック
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- //各種Behavior終わったら戻す FUJI
- //
- //=> WFのbeforeSaveのis_active調整処理は
- //INSERTではなく、UPDATEまで処理delayさせる必要があるが、is_latestとcreatedは
- // ここで行なうべき。ゆえに、(a) load(WF.WF)をsave()の後に移動し、(b)カレンダ
- // のLatestおよびCreated準備処理をここに差し込む。
- // (eventDataの値、一部更新等しています) HASHI
- //
- //例外追加)createdUserWhenUpdにnull以外の値(ユーザID)が入っていたら、
- //keyが一致する過去世代予定の有無に関係なく、そのcreatedUserWhenUpdを、created_userに
- //セットするようにした。
- $model->ReservationEvent->prepareLatestCreatedForIns($eventData, $createdUserWhenUpd);
-
- // $eventDataがprepareLatestCreatedForIns()で変更されるので、再度setする
- $model->ReservationEvent->set($eventData);
- //子もsave()で返ってくる。
- $eventData = $model->ReservationEvent->save(null, false); //aaaaaaaaaaaaa
- if (!$eventData) { //保存のみ
- CakeLog::error("変更時に指定された元イベント(reservation_event_id=[" .
- $originEventId . "])のCOPYに失敗");
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- // 各種Behavior終わったら戻す FUJI => 再load(WF.WF)の発行位置をsave後に変更 HASHI
- $model->ReservationEvent->Behaviors->load('Reservations.ReservationWorkflow');
-
- // 各種Behavior終わったら戻す FUJI
- $model->ReservationEvent->Behaviors->load('Workflow.WorkflowComment');
-
- $newEventId = $newEventKey = null;
- if ($setNewIdAndKey) {
- //対象元となったeventの新世代なので、新世代eventのidとkeyの値をセットする
- $newEventId = $eventData['ReservationEvent']['id'];
- $newEventKey = $eventData['ReservationEvent']['key'];
- }
-
- ////reservation_event_contentsをcopyする
- //foreach ($eventData['ReservationEvent']['ReservationEventContent'] as &$content) {
- // $content = $this->__copyEventContentData($model, $content,
- // $eventData['ReservationEvent']['id'], $createdUserWhenUpd);
- //}
-
- if ($isMyPrivateRoom) {
- //変更後の公開ルームidが、「編集者・承認者(=ログイン者)のプライベート」なので
- //reservation_event_share_usersをcopyする
- //CakeLog::debug("DBG: 変更後の公開ルームidがログイン者のプライべートのケース.");
- foreach ($eventData['ReservationEvent']['ReservationEventShareUser'] as &$shareUser) {
- $shareUser = $this->__copyEventShareUserData(
- $model, $shareUser, $eventData['ReservationEvent']['id'], $createdUserWhenUpd);
- }
- } else {
- //変更後の公開ルームidが、「編集者・承認者(=ログイン者)のプライベート」「以外」の場合、
- //仲間の予定はプライベートの時のみ許される子情報なので、これらはcopy対象から外す(stripする)こと。
- if (isset($eventData['ReservationEvent']['ReservationEventShareUser'])) {
- //unset($eventData['ReservationEvent']['ReservationEventShareUser']);
- //CakeLog::debug("DBG: 変更後の公開ルームidがログイン者のプライべート「以外」のケース..");
- //CakeLog::debug("DBG: copyされない共有予定データ群[" . print_r($eventData['ReservationEvent']['ReservationEventShareUser'], true) . "]");
- $eventData['ReservationEvent']['ReservationEventShareUser'] = array();
- }
- }
-
- $event = $eventData['ReservationEvent'];
-
- return array($event, $newEventId, $newEventKey);
- }
-
-/**
- * __copyEventContentData
- *
- * 元予定の次世代CalenarEventContentを作り出す
- *
- * @param Model $model 実際のモデル名
- * @param array $content content
- * @param int $reservationEventId reservationEventId
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return int 生成成功時 新しい$contentを返す。失敗時 InternalErrorExceptionを投げる。
- * @throws InternalErrorException
- */
- //private function __copyEventContentData($model, $content,
- // $reservationEventId, $createdUserWhenUpd) {
- // //ReservationEventContentには、status, is_latest, is_activeはない
- //
- // $contentData = array();
- // $contentData['ReservationEventContent'] = $content;
- //
- // //次世代データの新規登録
- // $originContentId = $contentData['ReservationEventContent']['id'];
- // $contentData['ReservationEventContent']['id'] = null;
- // $contentData['ReservationEventContent']['reservation_event_id'] = $reservationEventId;
- //
- // //作成日と作成者は、元予定のreservation_event_contentsのものを継承する、、が!例外がある。
- // //例外追加1)
- // //変更後の公開ルームidが、「元予定生成者の*ルーム」から「編集者・承認者(=ログイン者)の
- // //プライベート」に変化していた場合、created_userを、元予定生成者「から」編集者・承認者(=ログイン者)
- // //「へ」に変更すること。
- // //=>これを考慮したcreatedUserWhenUpdを使えばよい。
- // if ($createdUserWhenUpd !== null) {
- // $contentData['ReservationEventContent']['created_user'] = $createdUserWhenUpd;
- // }
- //
- // $contentData['ReservationEventContent']['modified_user'] = null;
- // $contentData['ReservationEventContent']['modified'] = null;
- //
- // if (!isset($model->ReservationEventContent)) {
- // $model->loadModels(['ReservationEventContent' => 'Reservations.ReservationEventContent']);
- // }
- // $model->ReservationEventContent->set($contentData);
- // if (!$model->ReservationEventContent->validates()) { //ReservationEventContentのチェック
- // $model->validationErrors = Hash::merge(
- // $model->validationErrors, $model->ReservationEventContent->validationErrors);
- // throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- // }
- // $contentData = $model->ReservationEventContent->save($contentData, false);
- // if (!$contentData) { //保存のみ
- // CakeLog::error("変更時に指定された元コンテンツ(reservation_event_content_id=[" .
- // $originContentId . "])のCOPYに失敗");
- // throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- // }
- //
- // $content = $contentData['ReservationEventContent'];
- // return $content;
- //}
-
-/**
- * __copyEventShareUserData
- *
- * 元予定の次世代CalenarEventShareUserを作り出す
- *
- * @param Model $model 実際のモデル名
- * @param array $shareUser shareUser
- * @param int $reservationEventId reservationEventId
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return int 生成成功時 新しい$shareUserを返す。失敗時 InternalErrorExceptionを投げる。
- * @throws InternalErrorException
- */
- private function __copyEventShareUserData($model, $shareUser, $reservationEventId,
- $createdUserWhenUpd) {
- //ReservationEventShareUserには、status, is_latest, is_activeはない
-
- $shareUserData = array();
- $shareUserData['ReservationEventShareUser'] = $shareUser;
-
- //次世代データの新規登録
- $originShareUserId = $shareUserData['ReservationEventShareUser']['id'];
- $shareUserData['ReservationEventShareUser']['id'] = null;
- $shareUserData['ReservationEventShareUser']['reservation_event_id'] = $reservationEventId;
-
- //作成日と作成者は、元予定のreservation_event_share_usersのものを継承する、、が!例外がある。
- //例外追加1)
- //変更後の公開ルームidが、「元予定生成者の*ルーム」から「編集者・承認者(=ログイン者)の
- //プライベート」に変化していた場合、created_userを、元予定生成者「から」編集者・承認者(=ログイン者)
- //「へ」に変更すること。
- //=>これを考慮したcreatedUserWhenUpdを使えばよい。
- if ($createdUserWhenUpd !== null) {
- $shareUserData['ReservationEventShareUser']['created_user'] = $createdUserWhenUpd;
- }
-
- $shareUserData['ReservationEventShareUser']['modified_user'] = null;
- $shareUserData['ReservationEventShareUser']['modified'] = null;
-
- if (!isset($model->ReservationEventShareUser)) {
- $model->loadModels(['ReservationEventShareUser' => 'Reservations.ReservationEventShareUser']);
- }
-
- //ReservationEventShareUserのチェック
- $model->ReservationEventShareUser->set($shareUserData);
- if (!$model->ReservationEventShareUser->validates()) {
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEventShareUser->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- $shareUserData = $model->ReservationEventShareUser->save($shareUserData, false);
- if (!$shareUserData) { //保存のみ
- CakeLog::error(
- '変更時に指定された元共有ユーザ' .
- '(reservation_event_share_user_id=[' . $originShareUserId . '])' .
- 'のCOPYに失敗');
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- $shareUser = $shareUserData['ReservationEventShareUser'];
- return $shareUser;
- }
-
-/**
- * __makeCommonGenPlan
- *
- * 共通の世代生成処理
- *
- * @param Model $model 実際のモデル名
- * @param string $action action('update' or 'delete')
- * @param array $data data
- * @param int $rruleId rruleId
- * @return array 生成した予定($plan)
- * @throws InternalErrorException
- */
- private function __makeCommonGenPlan(Model $model, $action, $data, $rruleId) {
- if (!isset($model->ReservationRrule)) {
- $model->loadModels(['ReservationRrule' => 'Reservations.ReservationRrule']);
- }
- $options = array(
- 'conditions' => array(
- $model->ReservationRrule->alias . '.id' => $rruleId,
- ),
- 'recursive' => 1,
- //'callbacks' => false, //callbackは呼ばない
- );
- $plan = $model->ReservationRrule->find('first', $options);
- if (empty($plan)) {
- if ($action === 'update') {
- CakeLog::error("変更時に指定された元予定(reservation_rrule_id=[" .
- $data['origin_rrule_id'] . "])が存在しない。");
- } else { //delete
- CakeLog::error("削除時に指定された元予定(reservation_rrule_id=[" .
- $data['origin_rrule_id'] . "])が存在しない。");
- }
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //ReservationEventsの関係データをとってきて必要なもののみ加える。
- //
- if (!isset($model->ReservationEvent)) {
- $model->loadModels(['ReservationEvent' => 'Reservations.ReservationEvent']);
- }
- foreach ($plan['ReservationEvent'] as &$event) {
- $options2 = array(
- 'conditions' => array(
- //copyはdeadcopyイメージなので、言語ID,除去フラグに関係なくとってくる。
- $model->ReservationEvent->alias . '.id' => $event['id'],
- ),
- 'recursive' => 1,
- 'order' => array($model->ReservationEvent->alias . '.dtstart' => 'ASC'),
- );
- $eventData = $model->ReservationEvent->find('first', $options2);
- //event配下の配下関連テーブルだけ追加しておく
- //
- $event['ReservationEventShareUser'] = $eventData['ReservationEventShareUser'];
- //$event['ReservationEventContent'] = $eventData['ReservationEventContent'];
- }
- return $plan;
- }
-
-}
diff --git a/Model/Behavior/ReservationPlanOptionBehavior.php b/Model/Behavior/ReservationPlanOptionBehavior.php
deleted file mode 100644
index ec13780..0000000
--- a/Model/Behavior/ReservationPlanOptionBehavior.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-//プラグインセパレータ(.)とパスセバレータ(/)混在に注意
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-
-/**
- * ReservationPlanOptionBehavior
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationPlanOptionBehavior extends ReservationAppBehavior {
-
-/**
- * getNoticeEmailOption
- *
- * メール通知する時の選択selectのoptions配列
- *
- * @param Model $model 実際のモデル名
- * @return mixed 生成したoptions配列を返す
- */
- public function getNoticeEmailOption(Model $model) {
- $options = array(
- '0' => __d('reservations', 'Before 0 minutes'),
- '5' => __d('reservations', 'Before 5 minutes'),
- '10' => __d('reservations', 'Before 10 minutes'),
- '15' => __d('reservations', 'Before 15 minutes'),
- '20' => __d('reservations', 'Before 20 minutes'),
- '25' => __d('reservations', 'Before 25 minutes'),
- '30' => __d('reservations', 'Before 30 minutes'),
- '45' => __d('reservations', 'Before 45 minutes'),
- '60' => __d('reservations', '1 hour before'),
- '120' => __d('reservations', '2 hours before'),
- '180' => __d('reservations', '3 hours before'),
- '720' => __d('reservations', '12 hours before'),
- '1440' => __d('reservations', '24 hours before'),
- '2880' => __d('reservations', '2 days before'),
- '8540' => __d('reservations', '1 week before'),
- '-1' => __d('reservations', 'Right now'),
- );
- return $options;
- }
-}
diff --git a/Model/Behavior/ReservationPlanRruleValidateBehavior.php b/Model/Behavior/ReservationPlanRruleValidateBehavior.php
deleted file mode 100644
index bf55d65..0000000
--- a/Model/Behavior/ReservationPlanRruleValidateBehavior.php
+++ /dev/null
@@ -1,206 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationValidateAppBehavior', 'Reservations.Model/Behavior');
-
-/**
- * ReservationPlanRruleValidate Behavior
- *
- * @package Reservations\Reservations\Model\Befavior
- * @author Allcreator
- */
-class ReservationPlanRruleValidateBehavior extends ReservationValidateAppBehavior {
-
-/**
- * __checkRruleTerm
- *
- * Rrule規則の繰返しの終了指定チェック(日、週、月、年単位共通)
- *
- * @param Model $model モデル変数
- * @param array $check 入力配列
- * @return bool 成功時true, 失敗時false
- */
- private function __checkRruleTerm(Model $model, $check) {
- if (!isset($model->ReservationActionPlan)) {
- $model->loadModels(['ReservationActionPlan' => 'Reservations.ReservationActionPlan']);
- }
-
- switch ($model->data[$model->alias]['rrule_term']) {
- case 'COUNT': //回数指定
- //繰返し回数 'rrule_until'
- $rruleCount = intval($model->data[$model->alias]['rrule_count']);
-
- if (empty($model->data[$model->alias]['rrule_count'])) {
- $model->ReservationActionPlan->reservationProofreadValidationErrors['rrule_count'] = array();
- $model->ReservationActionPlan->reservationProofreadValidationErrors['rrule_count'][] =
- __d('reservations', 'Input required. (Times repeated)');
- return false;
- }
-
- if (preg_match('/^\d+$/', $model->data[$model->alias]['rrule_count']) !== 1) {
- $model->ReservationActionPlan->reservationProofreadValidationErrors['rrule_count'] = array();
- $model->ReservationActionPlan->reservationProofreadValidationErrors['rrule_count'][] =
- __d('reservations', 'Only numbers can be entered.');
- //CakeLog::debug("DBG: error case. reservationProofreadValidationErros[" . print_r($model->ReservationActionPlan->reservationProofreadValidationErrors, true) . "]");
-
- return false;
- }
-
- if ($rruleCount < ReservationsComponent::CALENDAR_RRULE_COUNT_MIN ||
- $rruleCount > ReservationsComponent::CALENDAR_RRULE_COUNT_MAX) {
- $model->ReservationActionPlan->reservationProofreadValidationErrors['rrule_count'] = array();
- $model->ReservationActionPlan->reservationProofreadValidationErrors['rrule_count'][] =
- sprintf(__d('reservations',
- 'The number of repetition is %d or more and %d or less.'),
- ReservationsComponent::CALENDAR_RRULE_COUNT_MIN,
- ReservationsComponent::CALENDAR_RRULE_COUNT_MAX);
- return false;
- }
- break;
- case 'UNTIL': //終了日指定
- //繰返し終了日 'rrule_until'
- $rruleUntil = $model->data[$model->alias]['rrule_until'];
- $msg = $this->_checkUntilDate($model, $rruleUntil);
- if ($msg !== '') {
- $model->ReservationActionPlan->reservationProofreadValidationErrors['rrule_until'] = array();
- $model->ReservationActionPlan->reservationProofreadValidationErrors['rrule_until'][] = $msg;
- return false;
- }
- break;
- default:
- //CakeLog::error(sprintf(__d('reservations', 'サポートしていない終了期限タイプ[%s]です'), $model->data[$model->alias]['rrule_term']));
- return false;
- }
- return true;
- }
-
-/**
- * checkRrule
- *
- * Rrule規則のチェック
- *
- * @param Model $model モデル変数
- * @param array $check 入力配列
- * @return bool 成功時true, 失敗時false
- */
- public function checkRrule(Model $model, $check) {
- $isRepeat = (isset($model->data[$model->alias]['is_repeat']) &&
- $model->data[$model->alias]['is_repeat']) ? true : false;
- if (!$isRepeat) {
- return true; //繰返し「無し」なら、true
- }
-
- //繰返しの終了指定(日、週、月、年単位共通)
- if (!$this->__checkRruleTerm($model, $check)) {
- //CakeLog::debug("DBG: model 1 [" . print_r($model->proofreadValidationErrors, true) . "]");
- return false;
- }
-
- //繰返し周期 'repeat_freq'
- if (!$this->_checkRepateFreq($model, $check)) {
- //CakeLog::debug("DBG: model 2 [" . print_r($model->proofreadValidationErrors, true) . "]");
- return false;
- }
-
- return true;
- }
-
-/**
- * nopCheck
- *
- * NOPチェック関数
- *
- * @param Model $model モデル変数
- * @param array $check 入力配列
- * @return bool trueのみ返す
- */
- public function nopCheck(Model $model, $check) {
- return true;
- }
-
-/**
- * _checkUntilDate
- *
- * Until日付Pチェック関数
- *
- * @param Model $model model
- * @param string $rruleUntil UNTILの日付
- * @return string チェックOkなら空文字、チェックNGならエラーメッセージ文字列
- */
- protected function _checkUntilDate($model, $rruleUntil) {
- if (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $rruleUntil, $matches) !== 1) {
- return __d('reservations', 'It is not in the YYYY-MM-DD format.');
- }
-
- if (!checkdate(intval($matches[2]), intval($matches[3]), intval($matches[1]))) {
- return __d('reservations', 'Invalid input. Day that does not exist has been specified.');
- }
-
- //繰返し期限日が、開始日より前になっていないかどうかのチェック
- //
- $startDate = $model->data[$model->alias]['detail_start_datetime'];
- if (strpos($startDate, ':') === false) {
- //ユーザー系 YYYY-MM-DD
- $startDate .= ' 00:00:00';
- } else {
- //ユーザー系 YYYY-MM-DD hh:mm
- $startDate .= ':00';
- }
- //開始日(時刻)をサーバー系に直す
- $nctm = new NetCommonsTime();
- $serverStartDate = $nctm->toServerDatetime(
- $startDate, $model->data[$model->alias]['timezone']);
- //until日の翌日を求める
- //Y-m-d H:i:s形式にする。
- $untilDateStr = $model->data[$model->alias]['rrule_until'] . ' 00:00:00';
- $untilDateAry = ReservationTime::transFromYmdHisToArray($untilDateStr);
- list($yearOfNextDay, $monthOfNextDay, $nextDay) =
- ReservationTime::getNextDay(
- $untilDateAry['year'], $untilDateAry['month'], $untilDateAry['day']);
- $nextDayOfUntilDate = sprintf("%04d-%02d-%02d 00:00:00",
- (int)$yearOfNextDay, (int)$monthOfNextDay, (int)$nextDay);
- //untilDateの翌日00:00:00を作り出し、サーバー系に直す
- $svrNxtDayOfUntilDt = $nctm->toServerDatetime(
- $nextDayOfUntilDate, $model->data[$model->alias]['timezone']);
- if ($svrNxtDayOfUntilDt <= $serverStartDate) {
- return __d('reservations', 'Invalid input. Term end date is earlier than the start date.');
- }
- //範囲チェック
- if ($serverStartDate < ReservationsComponent::CALENDAR_RRULE_TERM_UNTIL_MIN ||
- ReservationsComponent::CALENDAR_RRULE_TERM_UNTIL_MAX < $svrNxtDayOfUntilDt) {
- return sprintf(
- __d('reservations', 'date that can be specified is %s or more and %s or less.'),
- ReservationsComponent::CALENDAR_RRULE_TERM_UNTIL_MIN,
- ReservationsComponent::CALENDAR_RRULE_TERM_UNTIL_MAX);
- }
- return '';
- }
-
-/**
- * _makeArrayOfWdayInNthWeek
- *
- * 1SU, ... , -1SA の配列生成関数
- *
- * @return array 生成した配列
- */
- protected function _makeArrayOfWdayInNthWeek() {
- //1SU, ... , -1SA の配列生成
- $bydayMonthly = array();
- $weeks = array (1, 2, 3, 4, -1);
- $wdays = explode('|', ReservationsComponent::CALENDAR_REPEAT_WDAY);
- foreach ($weeks as $week) {
- foreach ($wdays as $wday) {
- $bydayMonthly[] = $week . $wday;
- }
- }
- return $bydayMonthly;
- }
-}
diff --git a/Model/Behavior/ReservationPlanTimeValidateBehavior.php b/Model/Behavior/ReservationPlanTimeValidateBehavior.php
deleted file mode 100644
index 4aa0aa4..0000000
--- a/Model/Behavior/ReservationPlanTimeValidateBehavior.php
+++ /dev/null
@@ -1,241 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ModelBehavior', 'Model');
-App::uses('ReservationTime', 'Reservations.Utility');
-
-/**
- * ReservationPlanTimeValidate Behavior
- *
- * @package Reservations\Reservations\Model\Befavior
- * @author Allcreator
- */
-class ReservationPlanTimeValidateBehavior extends ModelBehavior {
-
-/**
- * checkReverseStartEndDateTime
- *
- * 開始日(時)と終了日(時)並びチェック
- *
- * @param Model $model モデル変数
- * @param array $check 入力値
- * @param string $editType 編集タイプ
- * @return bool 成功時true, 失敗時false
- */
- public function checkReverseStartEndDateTime(Model $model, $check, $editType) {
- $startDate = false;
- $startTime = false;
- if (!$this->_isYmdHi($model, $model->data[$model->alias]['detail_start_datetime'],
- $editType, $startDate, $startTime)) {
- return false;
- }
- $endDate = false;
- $endTime = false;
- if (!$this->_isYmdHi($model, $model->data[$model->alias]['detail_end_datetime'],
- $editType, $endDate, $endTime)) {
- return false;
- }
- if (!$startDate && !$endDate) {
- //無条件trueなのでそのまま返す
- return true;
- }
- if ($startTime && $endTime) {
- //YYYY-MM-DD hh:ss ケース
- $start = sprintf("%s%s%s%s%s",
- substr($startDate, 0, 4), substr($startDate, 5, 2), substr($startDate, 8, 2),
- substr($startTime, 0, 2), substr($startTime, 3, 2));
- $end = sprintf("%s%s%s%s%s",
- substr($endDate, 0, 4), substr($endDate, 5, 2), substr($endDate, 8, 2),
- substr($endTime, 0, 2), substr($endTime, 3, 2));
- } else {
- //YYYY-MM-DD ケース
- $start = sprintf("%s%s%s",
- substr($startDate, 0, 4), substr($startDate, 5, 2), substr($startDate, 8, 2));
- $end = sprintf("%s%s%s",
- substr($endDate, 0, 4), substr($endDate, 5, 2), substr($endDate, 8, 2));
- }
- return ($start <= $end);
- }
-
-/**
- * customDatetime
- *
- * 詳細施設予約用日付時刻チェック
- *
- * @param Model $model モデル変数
- * @param string $check 入力値(日付 or 日付時刻)
- * @param string $editType 編集タイプ
- * @return bool 成功時true, 失敗時false
- */
- public function customDatetime(Model $model, $check, $editType) {
- $value = array_values($check);
- $value = $value[0];
-
- $date = false;
- $time = false;
- if (! $this->_isYmdHi($model, $value, $editType, $date, $time)) {
- //失敗なのでそのまま返す
- return false;
- }
- //数字であること、位置桁が一致していることから、OKとする。。
- /*
- if ($date) {
- if (! self::date($date, 'ymd')) { //YYYY-MM-DD
- return false;
- }
- }
- if ($time) {
- if (! self::time($time)) { //hh:mm
- return false;
- }
- }
- */
- return true;
- }
-
-/**
- * _isYmdHi
- *
- * 入力値よりYmd+HiまたはYmdの判定をしつつ、日付と時刻を取り出す
- *
- * @param Model $model モデル変数
- * @param string $datetimeStr 入力配列(日付 or 日付時刻)
- * @param string $editType 編集タイプ
- * @param mixed &$date 日付(YYYY:MM:DD)
- * @param mixed &$time 時刻(hh:mm)
- * @return bool 成功時true, 失敗時false
- */
- protected function _isYmdHi(Model $model, $datetimeStr, $editType, &$date, &$time) {
- $date = false;
- $time = false;
- $isDetailEdit = (isset($model->data[$model->alias]['is_detail']) &&
- $model->data[$model->alias]['is_detail']) ? true : false;
- if ($editType === 'detail' && (! $isDetailEdit)) {
- //detailの時だけチェックしろの指示で、非detail=easy画面だったので、スルーする。
- return true;
- }
- if (isset($model->data[$model->alias]['enable_time']) &&
- ($model->data[$model->alias]['enable_time'])) {
- //時間の指定がある. YYYY-MM-DD hh:mm形式
- $regex = "/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2})$/";
- } else {
- //時間の指定がない. YYYY-MM-DD形式
- $regex = "/^(\d{4}-\d{2}-\d{2})$/";
- }
- if (preg_match($regex, $datetimeStr, $matches) !== 1) {
- return false;
- }
- $date = $matches[1]; //YYYY-MM-DD
- if (isset($matches[2])) {
- // 存在すれば hh:mm
- $time = $matches[2];
- }
- return true;
- }
-
-/**
- * allowedTimezoneOffset
- *
- * 許可されたタイムゾーンオフセットかどうか
- *
- * @param Model $model モデル変数
- * @param array $check 入力配列(timezone)
- * @return bool 成功時true, 失敗時false
- */
- public function allowedTimezoneOffset(Model $model, $check) {
- $value = array_values($check);
- $value = $value[0];
-
- $SiteSetting = new SiteSetting();
- $SiteSetting->prepare();
-
- if (isset($SiteSetting->defaultTimezones[$value])) {
- return true;
- }
- return false;
- //
- //$tzTbl = ReservationsComponent::getTzTbl();
- //foreach ($tzTbl as $tzData) {
- // if ($tzData[2] === $value) {
- // return true;
- // }
- //}
- //return false;
- }
-
-/**
- * checkReverseStartEndTime
- *
- * 開始時間と終了時間の並びと範囲チェック
- *
- * @param Model $model モデル変数
- * @param array $check 入力配列
- * @param string $editType 編集タイプ
- * @return bool 成功時true, 失敗時false
- */
- public function checkReverseStartEndTime(Model $model, $check, $editType) {
- $value = array_values($check);
- $value = $value[0];
-
- $isDetailEdit = (isset($model->data[$model->alias]['is_detail'])
- && $model->data[$model->alias]['is_detail']) ? true : false;
- if ($editType === 'easy' && $isDetailEdit) {
- //easyの時だけチェックしろの指示で、detail画面だったので、スルーする。
- return true;
- }
-
- if (isset($model->data[$model->alias]['enable_time']) &&
- (! $model->data[$model->alias]['enable_time'])) {
- return true; //開始時間と終了時間の指定がないので、ノーチェック
- }
-
- //並びと範囲を調べ結果を返す
- return $this->_doEasyCheckReverseRange($model);
- }
-
-/**
- * _doEasyCheckReverseRange
- *
- * 簡易画面の開始時間と終了時間の並びおよび範囲チェック
- *
- * @param Model $model モデル変数
- * @return bool 成功時true, 失敗時false
- */
- protected function _doEasyCheckReverseRange(Model $model) {
- $fromTo = array('from', 'to');
- foreach ($fromTo as $keyword) {
- if (preg_match("/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):\d{2}$/",
- $model->data[$model->alias]['easy_hour_minute_' . $keyword]) !== 1) {
- return false;
- }
- }
- //並び順チェック
- //フォーマットが保証されているので、直接文字列同士で大小比較してOK.
- if ($model->data[$model->alias]['easy_hour_minute_from'] >
- $model->data[$model->alias]['easy_hour_minute_to']) {
- return false;
- }
-
- //form, toが予定日の許容範囲かのチェック (予定日の00:00:00-予定翌日の00:00:00内ならOK。それからはずれたらNG)
- //
- list($serverStartDateZero, $serverNextDateZero) =
- (new ReservationTime())->convUserDate2SvrFromToDateTime(
- $model->data[$model->alias]['easy_start_date'],
- $model->data[$model->alias]['timezone']);
-
- if ($model->data[$model->alias]['easy_hour_minute_from'] < $serverStartDateZero ||
- $serverNextDateZero < $model->data[$model->alias]['easy_hour_minute_to']) {
- return false;
- }
-
- return true;
- }
-}
diff --git a/Model/Behavior/ReservationPlanValidateBehavior.php b/Model/Behavior/ReservationPlanValidateBehavior.php
deleted file mode 100644
index 6c46d0c..0000000
--- a/Model/Behavior/ReservationPlanValidateBehavior.php
+++ /dev/null
@@ -1,55 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ModelBehavior', 'Model');
-App::uses('ReservationPermissiveRooms', 'Reservations.Utility');
-
-/**
- * ReservationPlanValidate Behavior
- *
- * @package Reservations\Reservations\Model\Befavior
- * @author Allcreator
- */
-class ReservationPlanValidateBehavior extends ModelBehavior {
-
-/**
- * allowedRoomId
- *
- * 許可されたルームIDかどうか
- *
- * @param Model $model モデル変数
- * @param array $check 入力配列(room_id)
- * @return bool 成功時true, 失敗時false
- */
- //public function allowedRoomId(Model $model, $check) {
- // $value = array_values($check);
- // $value = $value[0];
- // //return (in_array($value, ReservationPermissiveRooms::getCreatableRoomIdList()));
- //}
-
-/**
- * allowedEmailSendTiming
- *
- * 許可されたメール通知タイミングかどうか
- *
- * @param Model $model モデル変数
- * @param array $check 入力配列(email_send_timing)
- * @return bool 成功時true, 失敗時false
- */
- public function allowedEmailSendTiming(Model $model, $check) {
- $value = array_values($check);
- $value = $value[0];
-
- //メール通知タイミング一覧のoptions配列を取得
- $emailTimingOptions = $model->getNoticeEmailOption();
- return in_array($value, array_keys($emailTimingOptions));
- }
-}
diff --git a/Model/Behavior/ReservationRoleAndPermBehavior.php b/Model/Behavior/ReservationRoleAndPermBehavior.php
deleted file mode 100644
index b81c4fa..0000000
--- a/Model/Behavior/ReservationRoleAndPermBehavior.php
+++ /dev/null
@@ -1,242 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-//プラグインセパレータ(.)とパスセバレータ(/)混在に注意
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('Space', 'Rooms.Model');
-App::uses('WorkflowComponent', 'Workflow.Controller/Component');
-/**
- * ReservationRoleAndPermBehavior
- *
- * @property array $reservationWdayArray reservation weekday array 施設予約曜日配列
- * @property array $editRrules editRules 編集ルール配列
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationRoleAndPermBehavior extends ReservationAppBehavior {
-
-/**
- * _calRoleAndPerm
- *
- * 空間と権限の管理マップ
- * @var null
- */
- protected $_calRoleAndPerm = null;
-
-/**
- * __workflowCompo
- *
- * ワークフローコンポーネント(こんなところでコンポーネントを見て本当にすみません)
- * @var null
- */
- private $__workflowCompo = null;
-
-/**
- * initSetting
- *
- * 権限情報を適切にマッピング処理してくれるコンポーネントを取得保持
- *
- * @param Model $model モデル
- * @param Component $workflow ワークフローコンポーネント
- * @return void
- */
- public function initSetting(Model $model, $workflow) {
- $this->__workflowCompo = $workflow;
- }
-
-/**
- * prepareCalRoleAndPerm
- *
- * (現ユーザにおける)施設予約用役割と権限の取得準備
- *
- * @param Model $model 実際のモデル名
- * @return array $readableRoomIds(参照可能room一覧),
- * $roleOfRooms(ルームごとでの役割一覧)、
- * $roomInfos(ルームでのルーム管理+施設予約権限管理での承認権限有無一覧),
- * $rooms(ルームでの役割別権限一覧)を格納した配列を返す。
- * @throws InternalErrorException
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function prepareCalRoleAndPerm(Model $model) {
- $frameId = Current::read('Frame.id');
- if (isset($this->_calRoleAndPerm[$frameId])) {
- return $this->_calRoleAndPerm[$frameId];
- }
-
- // 必要なモデルのロード
- $model->loadModels([
- 'ReservationFrameSetting' => 'Reservations.ReservationFrameSetting',
- 'ReservationActionPlan' => 'Reservations.ReservationActionPlan',
- 'ReservationPermission' => 'Reservations.ReservationPermission',
- 'RolesRoomsUser' => 'Rooms.RolesRoomsUser',
- 'RolesRoom' => 'Rooms.RolesRoom',
- 'Room' => 'Rooms.Room'
- ]);
-
- //表示対象(readable)なルームIDの一覧を取得
- //
- $frameSetting = $model->ReservationFrameSetting->getFrameSetting();
-
- list($exposeRoomOptions, ) =
- $model->ReservationActionPlan->getExposeRoomOptions($frameSetting);
- $readableRoomIds = array_keys($exposeRoomOptions);
-
- $accessibleRoomIds = $model->getReadableRoomIds();
-
- ////////////////////////////////////////////////////////////////////
- //施設予約の予定では、複数の空間・ルームの予定を一度に扱うため
- //getWorkflowContents関数の結果をそのまま使えない。
- //通常の getWorkflowContentConditions関数の中でつかっている
- //Current::permission('content_creatable')だけではなく、さらに
- //施設予約管理>権限管理でルーム毎に指定した予定作成可否
- //も、オーバーライドした判断を行う準備をする。
-
- //
- //1. 施設予約の権限管理のコントローラーで取得・利用している、
- //全会員を含む、施設予約+ブロック+ルーム配列を取得する。
-
- //2. ログインユーザが所属する各ルームでの役割(role_key)を取得する。
- $rolesRoomsUsers = $model->RolesRoomsUser->getRolesRoomsUsers(array(
- 'RolesRoomsUser.user_id' => Current::read('User.id'),
- 'RolesRoomsUser.room_id' => $accessibleRoomIds
- ));
-
- //CakeLog::debug("DBG: rolesRoomsUsers[" . print_r($rolesRoomsUsers, true) . "]");
- $roleOfRooms = Hash::combine($rolesRoomsUsers,
- '{n}.RolesRoomsUser.room_id', '{n}.RolesRoom.role_key');
-
- //注)
- //$rolesRoomsUsersには、バプリックルーム(space_id ==2 && room_id == 1)の情報はあるが、
- //$rolesRoomsUsersには、全会員ルーム(space_id ==4 && room_id == 3)の情報がない。
- // 別途取り出す
- //予備情報)
- //バブリックルームを表すroom_idはSpace::getRoomIdRoot(Space::PUBLIC_SPACE_ID)です。
- //全会員を表すroom_idはSpace::getRoomIdRoot(Space::COMMUNITY_SPACE_ID)です。
- $userId = Current::read('User.id');
- if (!empty($userId)) {
- //ログインしている時だけ、全会員roomIdを強制的に追加する。
- $communityRoomId = Space::getRoomIdRoot(Space::COMMUNITY_SPACE_ID);
- $roleOfRooms[$communityRoomId] = $this->__getAllMemberRoleKey($model, $userId);
- }
- //3. ルーム管理+施設予約権限管理での承認権限ありなしを取得
- $roomInfos = $this->__getRolePerms($model, $roleOfRooms);
-
- $this->_calRoleAndPerm[$frameId] = array(
- 'readableRoomIds' => $readableRoomIds,
- 'accessibleRoomIds' => $accessibleRoomIds,
- 'roleOfRooms' => $roleOfRooms,
- 'roomInfos' => $roomInfos,
- );
- return $this->_calRoleAndPerm[$frameId];
- }
-
-/**
- * __getRolePerms
- *
- * 権限情報の取得
- *
- * @param Model $model 実際のモデル名
- * @param array $roleOfRooms ルームに置けるロール情報配列
- * @return array
- */
- private function __getRolePerms(Model $model, $roleOfRooms) {
- // Roleが何もない=未ログイン
- if (empty($roleOfRooms)) {
- return array();
- }
- $permRooms = $model->ReservationPermission->getReservationRoomBlocks($this->__workflowCompo);
-
- // 全会員ルームの情報
- $allMemberRoom =
- $model->ReservationPermission->getReservationAllMemberRoomBlocks($this->__workflowCompo);
- // 全会員ルーム情報もマージしてしまう
- $permRooms = Hash::mergeDiff($permRooms, $allMemberRoom);
-
- $retArr = array();
- foreach ($roleOfRooms as $roomId => $roleName) {
- $retArr[$roomId] = $this->__getPermSet($roomId, $roleName, $permRooms);
- }
- return $retArr;
- }
-
-/**
- * __getPermSet
- *
- * 権限情報要素判定取得
- *
- * @param int $roomId ルームID
- * @param string $roleName そのルームにおけるロール名
- * @param array $permRooms ルームに置ける権限マッピング状況
- * @return array
- */
- private function __getPermSet($roomId, $roleName, $permRooms) {
- $room = Hash::extract($permRooms, '{n}.' . $roomId);
- // ルーム管理者でルーム内権限情報がないときは、それはプライベートです
- if (! $room && $roleName == 'room_administrator') {
- return array(
- 'role_key' => $roleName,
- 'use_workflow' => false,
- 'content_publishable_value' => true,
- 'content_editable_value' => true,
- 'content_creatable_value' => true,
- 'mail_editable_value' => true,
- );
- }
- $room = $room[0];
- $useWorkFlow = Hash::get(
- $room, 'Reservation.use_workflow');
- $publishable = Hash::get(
- $room, 'BlockRolePermission.content_publishable.' . $roleName . '.value');
- $editable = Hash::get(
- $room, 'BlockRolePermission.content_editable.' . $roleName . '.value');
- $creatable = Hash::get(
- $room, 'BlockRolePermission.content_creatable.' . $roleName . '.value');
- $mail = Hash::get(
- $room, 'BlockRolePermission.mail_editable.' . $roleName . '.value');
- return array(
- 'role_key' => $roleName,
- 'use_workflow' => $useWorkFlow,
- 'content_publishable_value' => $publishable,
- 'content_editable_value' => $editable,
- 'content_creatable_value' => $creatable,
- 'mail_editable_value' => $mail
- );
- }
-
-/**
- * __getAllMemberRoleKey
- *
- * 全会員(ルーム)での自分の役割を取得する
- *
- * @param Model $model 実際のモデル
- * @param int $userId ユーザーID
- * @return string 役割
- */
- private function __getAllMemberRoleKey(Model $model, $userId) {
- //全会員
- $rolesRoomsUser = $model->RolesRoomsUser->find('first', array(
- 'conditions' => array(
- 'user_id' => $userId
- ),
- 'recursive' => -1,
- ));
- if (! $rolesRoomsUser) {
- return Role::ROOM_ROLE_KEY_VISITOR;
- }
- $rolesRoomsUserId = $rolesRoomsUser['RolesRoomsUser']['roles_room_id'];
- $rolesRooms = $model->RolesRoom->findById($rolesRoomsUserId);
- if (! $rolesRooms) {
- return Role::ROOM_ROLE_KEY_VISITOR;
- }
- $roleKey = $rolesRooms['RolesRoom']['role_key'];
- return $roleKey;
- }
-}
diff --git a/Model/Behavior/ReservationRruleEntryBehavior.php b/Model/Behavior/ReservationRruleEntryBehavior.php
deleted file mode 100644
index 081524c..0000000
--- a/Model/Behavior/ReservationRruleEntryBehavior.php
+++ /dev/null
@@ -1,181 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('ReservationRruleUtil', 'Reservations.Utility');
-
-/**
- * ReservationRruleEntryBehavior
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationRruleEntryBehavior extends ReservationAppBehavior {
-
-/**
- * use behaviors
- *
- * @var array
- */
- //public $actsAs = array(
- // 'Reservations.ReservationRruleHandle',
- // 'Reservations.ReservationYearlyEntry',
- //);
-
-/**
- * Default settings
- *
- * @author Noriko Arai
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2015, NetCommons Project
- */
- protected $_defaults = array(
- );
-
-/**
- * Rruleテーブルへの登録
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams 予定パラメータ
- * @param array $rruleData rruleデータ
- * @param array $eventData eventデータ
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return void
- * @throws InternalErrorException
- */
- public function insertRrule(Model $model, $planParams, $rruleData, $eventData,
- $createdUserWhenUpd = null) {
- if (isset($model->rrule)) { //behaviorメソッドでrruleを渡すための工夫
- unset($model->rrule);
- }
-
- //引数ではなく、$modelのインスタンス変数としてセットする。
- $model->rrule = $planParams['rrule'];
-
- if (!is_array($model->rrule)) { //$rrulea文字列を解析し配列化する。
- $model->rrule = (new ReservationRruleUtil())->parseRrule($model->rrule);
- }
-
- //CakeLog::debug("DBG: In insertRrule() rrule array[" . print_r($model->rrule, true) . "]");
-
- if (!(isset($model->ReservationEvent) && is_callable($model->ReservationEvent->create))) {
- $model->loadModels(['ReservationEvent' => 'Reservations.ReservationEvent']);
- }
- $params = array(
- 'conditions' => array('ReservationEvent.id' => $eventData['ReservationEvent']['id']),
- 'recursive' => 0, //(-1),
- //'fields' => array('ReservationEvent.*'),
- 'callbacks' => false
- );
- $eventData = $model->ReservationEvent->find('first', $params);
- if (!is_array($eventData) || !isset($eventData['ReservationEvent'])) {
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //////////////////////////////
- //ここのロジック(同じrrule_idをもつ兄弟eventの自分以外の全削除)について
- //新規の時は、そもそも消す対象がない
- //更新の時は、自分以外を消す(物理削除or除外フラグon)のは、NC3カレンダでは
- //insertRrule()に来る前に済ませているので、やはり意味がない。
- //よって、ここのロジックはOffする。
- //$conditions = array(
- // $model->ReservationEvent->alias .
- // '.reservation_rrule_id' => $eventData['ReservationEvent']['reservation_rrule_id'],
- // $model->ReservationEvent->alias . '.id <>' => $eventData['ReservationEvent']['id'],
- //);
- //
- //if (!$model->ReservationEvent->deleteAll($conditions, false)) {
- // $model->validationErrors = Hash::merge(
- // $model->validationErrors, $model->ReservationEvent->validationErrors);
- // throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- //}
-
- /////////////////////////////
- //周期性による、eventの順次登録
- //rruleのin/outは、$modelのインスタンス変数をつかっておこなう。
- $this->insertPriodEntry($model, $planParams, $rruleData, $eventData, $createdUserWhenUpd);
- }
-
-/**
- * 周期性登録
- * ここで繰り返しデータのDB登録してる CommentByRyujiAMANO
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams planParams
- * @param array $rruleData rruleData
- * @param array $startEventData eventデータ
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return void
- */
- public function insertPriodEntry(Model $model, $planParams, $rruleData, $startEventData,
- $createdUserWhenUpd) {
- //CakeLog::debug("DBG: In insertPriodEntry(). i set model->rrule[INDEX] to 1.");
-
- $model->rrule['INDEX'] = 1;
-
- switch ($model->rrule['FREQ']) {
- case 'YEARLY':
- if (!$model->Behaviors->hasMethod('insertYearly')) {
- $model->Behaviors->load('Reservations.ReservationYearlyEntry');
- }
- $model->insertYearly($planParams, $rruleData, $startEventData, 1, 0, $createdUserWhenUpd);
- break;
- case 'MONTHLY':
- $this->_insertMonthlyPriodEntry($model, $planParams, $rruleData, $startEventData,
- $createdUserWhenUpd);
- break;
- case 'WEEKLY':
- if (!$model->Behaviors->hasMethod('insertWeekly')) {
- $model->Behaviors->load('Reservations.ReservationWeeklyEntry');
- }
- $model->insertWeekly($planParams, $rruleData, $startEventData, 1, $createdUserWhenUpd);
- break;
- case 'DAILY':
- if (!$model->Behaviors->hasMethod('insertDaily')) {
- $model->Behaviors->load('Reservations.ReservationDailyEntry');
- }
-
- //CakeLog::debug("DBGDBG: In insertPriodEntry() DAILY case. before insertDaily[" . print_r($planParams, true) . "] rruleData[" . print_r($rruleData, true) . "] startEventData[" . print_r($startEventData) . "]");
-
- $model->insertDaily($planParams, $rruleData, $startEventData, $createdUserWhenUpd);
- break;
- }
- }
-
-/**
- * _insertMonthlyPriodEntry
- *
- * 月用周期性登録
- *
- * @param Model $model 実際のモデル名
- * @param array &$planParams planParams
- * @param array &$rruleData rruleData
- * @param array &$startEventData eventデータ
- * @param int &$createdUserWhenUpd createdUserWhenUpd
- * @return void
- */
- protected function _insertMonthlyPriodEntry(Model $model,
- &$planParams, &$rruleData, &$startEventData, &$createdUserWhenUpd) {
- if (!$model->Behaviors->hasMethod('insertMonthlyByMonthday')) {
- $model->Behaviors->load('Reservations.ReservationMonthlyEntry');
- }
- if (isset($model->rrule['BYMONTHDAY'])) { //指定月のx日、y日
- $model->insertMonthlyByMonthday($planParams, $rruleData, $startEventData, 1, 1,
- $createdUserWhenUpd);
- } else { //第x週y曜日
- $model->insertMonthlyByDay($planParams, $rruleData, $startEventData, 1, $createdUserWhenUpd);
- }
- }
-}
diff --git a/Model/Behavior/ReservationSearchPlanBehavior.php b/Model/Behavior/ReservationSearchPlanBehavior.php
deleted file mode 100644
index 999d09b..0000000
--- a/Model/Behavior/ReservationSearchPlanBehavior.php
+++ /dev/null
@@ -1,295 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-//プラグインセパレータ(.)とパスセバレータ(/)混在に注意
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('Space', 'Rooms.Model');
-App::uses('WorkflowComponent', 'Workflow.Controller/Component');
-App::uses('ReservationPermissiveRooms', 'Reservations.Utility');
-/**
- * ReservationSearchPlanBehavior
- *
- * @property array $reservationWdayArray reservation weekday array 施設予約曜日配列
- * @property array $editRrules editRules 編集ルール配列
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationSearchPlanBehavior extends ReservationAppBehavior {
-
-/**
- * getPlans
- *
- * 予定一覧の取得
- * (共有予定とのマージ処理を簡易化するため$order は key => valの1要素のみ、ASC, DESC指定はないものとする)
- *
- * @param Model $model 実際のモデル名
- * @param array $vars 施設予約設定情報
- * @param array $planParams 予定パラメータ
- * @param array $order ソートパラメータ
- * @return array 検索成功時 予定配列を返す。検索結果が0件の時は、空配列を返す。検索失敗した時はInternalError例外をthrowする。
- * @throws InternalErrorException
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function getPlans(Model $model, $vars, $planParams, $order = array()) {
- // 探すのはis_activeかis_latestのものだけでよい
- // 予約データ取得時は ルーム無視
- $baseOptions = array(
- 'conditions' => array(
- $model->getWorkflowConditions()
- //array(
- // 'OR' => array(
- // 'ReservationEvent.is_active' => true,
- // 'ReservationEvent.is_latest' => true,
- // )
- //)
- ),
- 'recursive' => 1, //belongTo, hasOne, hasMany関係をもつ1階層上下を対象にする。
- //'order' => array($model->alias . '.start_date'),
- 'order' => $order,
- );
- foreach ($planParams as $field => $val) {
- $key = $model->alias . '.' . $field;
- $field = trim($field);
- switch ($field) {
- case 'dtstart':
- $key = $key . ' >=';
- break;
- case 'dtend':
- $key = $key . ' <';
- break;
- case 'language_id':
- $key = 1;
- $vals = array(
- 'OR' => array(
- $model->alias . '.' . $field => $val,
- $model->alias . '.is_translation' => false
- )
- );
- $val = $vals;
- break;
- default:
- }
- $baseOptions['conditions'][$key] = $val;
- }
-
- /////////////////////////////////////////
- // 時間以外の絞り込み条件をここに書く。
-
- //表示対象となるルームIDの一覧を取得し、IN条件を追加する.
- //
- //$eventDotRoomId = $model->alias . '.room_id';
-
- //施設予約用の役割・権限情報一式取得
- //if (!$model->Behaviors->hasMethod('prepareCalRoleAndPerm')) {
- // $model->Behaviors->load('Reservations.ReservationRoleAndPerm');
- //}
- //$calRoleAndPerm = $model->prepareCalRoleAndPerm();
-
- //専用の各参照配列に代入
- //$readableRoomIds = &$calRoleAndPerm['readableRoomIds'];
- //$rooms = &$calRoleAndPerm['rooms'];
- //$roleOfRooms = &$calRoleAndPerm['roleOfRooms'];
- //$roomInfos = &$calRoleAndPerm['roomInfos'];
-
- $options = $baseOptions;
- //$options['conditions'][$eventDotRoomId] = $readableRoomIds;
-
- ////$plans = $model->getWorkflowContents('all', $options);
- $plans = $model->find('all', $options);
- return $plans;
- /*
- CakeLog::debug("DBG: options[" . print_r($options, true) . "]\n");
- foreach ($plans as $plan) {
- CakeLog::debug("DBG: event id[" . $plan['ReservationEvent']['id'] .
- "] key[" . $plan['ReservationEvent']['key'] .
- "] dtstart[" . $plan['ReservationEvent']['dtstart'] .
- "] room_id[" . $plan['ReservationEvent']['room_id'] .
- "] title[" . $plan['ReservationEvent']['title'] .
- "] status[" . $plan['ReservationEvent']['status'] .
- "] is_active[" . $plan['ReservationEvent']['is_active'] .
- "] is_latest[" . $plan['ReservationEvent']['is_latest'] .
- "] created_user[" . $plan['ReservationEvent']['created_user'] .
- "] modified_user[" . $plan['ReservationEvent']['modified_user'] .
- "]\n\n");
- }
- */
- ////plansを$calRoleAndPerm中の各配列を使いスクリーニングする
- ////=>screenPlansUsingGetable方式に変えたので以下はやめた HASHI
- ////$plans = $this->__screenPlans($model, $plans, $calRoleAndPerm);
- //スクリーニング方法をReservationEventのGetableEvnet()を使う方法に変えた HASHI
- //FUJI$roomPermRoles = $model->prepareCalRoleAndPerm();
- //FUJIReservationPermissiveRooms::$roomPermRoles = $roomPermRoles;
- // FIND時に取得するデータを制限するので、スクリーニング不要
- //$plans = $model->screenPlansUsingGetable($plans); //
-
- //$sharePlans = $this->_getSharePlans($model, $vars, $baseOptions);
- /////////////////////////////////////////
- //通常予定と仲間の予定をマージする。
- //$sharePlans = [];
- //$mergedPlans = $this->__mergePlans($plans, $sharePlans, $order);
-
- //return $mergedPlans;
- }
-
-/**
- * _getSharePlans
- *
- * 共有予定を取得する
- *
- * @param Model $model モデル
- * @param array $vars 施設予約情報
- * @param array $baseOptions 基本検索条件
- * @return array
- */
- protected function _getSharePlans($model, $vars, $baseOptions) {
- ///////////////////////////////////////////////////////////////////////
- //自ユーザーを共有指定している他人のプライベート予定をとってくる。
- //ここは、上記のルームIDの範疇外になるので、別にfindして、plansに
- //マージすることとする。自分のルームID以外で、かつ、ShareUserが自分である
- //情報を取得する。
-
- if (empty($vars['myself'])) {
- return array();
- }
- $myself = $vars['myself'];
-
- //optionsの再設定
- $options = Hash::merge(array(
- //'recursive' => 1, //baseOptionsで指定済
- 'fields' => array(
- $model->alias . '.*',
- $model->ReservationEventShareUser->alias . '.*',
- ////'count(' . $model->ReservationEventShareUser->alias . '.id) AS friend_share_plan',
-
- $model->ReservationRrule->alias . '.*',
- $model->Language->alias . '.*',
- $model->TrackableCreator->alias . '.id',
- $model->TrackableCreator->alias . '.handlename',
- $model->TrackableUpdater->alias . '.id',
- $model->TrackableUpdater->alias . '.handlename',
- //$model->ReservationEventContent->alias . '.*',
- ),
- 'conditions' => array(
- $model->ReservationEventShareUser->alias . '.id NOT' => null,
- //$model->alias . '.room_id' => $privateRoomIds,
- 'NOT' => array(
- $model->alias . '.room_id' => $myself
- ), // 自分以外のルーム
- $model->ReservationEventShareUser->alias . '.share_user' => Current::read('User.id'),
- ),
- 'joins' => array(
- array(
- 'table' => $model->ReservationEventShareUser->table,
- 'alias' => $model->ReservationEventShareUser->alias,
- 'type' => 'LEFT',
- 'conditions' => array(
- $model->ReservationEventShareUser->alias . '.reservation_event_id' .
- ' = ' .
- $model->alias . '.id',
- ),
- ),
- ),
- //'order' => $order, //baseOptionsで指定済
- ), $baseOptions);
-
- //Workflow条件について)
- //仲間の予定は、他人のプライベート予定なので、
- //getWorkflowContents()を使うと、一時保存中の他人のプライベート予定もとってきてしまう。
- //他人のプライベート予定の場合、
- //status=発行済かつis_active=trueのものだけが表示可能としてよい。
- //よって、conditionsにその条件を明示追加する。
- //
- $options['conditions'][$model->alias . '.status'] = WorkflowComponent::STATUS_PUBLISHED;
- $options['conditions'][$model->alias . '.is_active'] = true;
- $options['conditions'][$model->alias . '.exception_event_id'] = 0; //除外でないもの
-
- $sharePlans = $model->getWorkflowContents('all', $options);
- foreach ($sharePlans as &$sharePlan) {
- //「仲間の予定」であることを擬似項目をつかって、マーキングしておく。
- $sharePlan['ReservationEvent']['pseudo_friend_share_plan'] = 1;
- }
- return $sharePlans;
- }
-/**
- * __mergePlans
- *
- * 通常の表示予定と共有された他人のプライベート予定のマージ関数
- * (共有予定とのマージ処理を簡易化するため$order は key => valの1要素のみ、ASC, DESC指定はないものとする)
- *
- * @param array $plansA plansA
- * @param array $plansB plansB
- * @param array $order ソートパラメータ
- * @return array マージした配列を返す。
- * @SuppressWarnings(PHPMD)
- */
- private function __mergePlans($plansA, $plansB, $order) {
- list($orderModel, $orderField) = explode('.', array_shift($order));
- $planA = array_shift($plansA);
- $planB = array_shift($plansB);
- $mergedPlans = array();
- while ($planA !== null || $planB !== null) {
- if ($planA === null) {
- //plansAは終わった
- if (! $this->__overwriteSameKeyEvent($mergedPlans, $planB)) {
- $mergedPlans[] = $planB;
- }
- $planB = array_shift($plansB);
- continue;
- }
-
- if ($planB === null) {
- //plansBは終わった
- if (! $this->__overwriteSameKeyEvent($mergedPlans, $planA)) {
- $mergedPlans[] = $planA;
- }
- $planA = array_shift($plansA);
- continue;
- }
-
- if ($planA[$orderModel][$orderField] < $planB[$orderModel][$orderField]) {
- if (! $this->__overwriteSameKeyEvent($mergedPlans, $planA)) {
- $mergedPlans[] = $planA;
- }
- $planA = array_shift($plansA);
- } else {
- if (! $this->__overwriteSameKeyEvent($mergedPlans, $planB)) {
- $mergedPlans[] = $planB;
- }
- $planB = array_shift($plansB);
- }
- }
-
- return $mergedPlans;
- }
-
-/**
- * __overwriteSameKeyEvent
- *
- * $mergedPlansの中に、$planと同一キーでid値がより大きいeventがあればplanを上書きする
- *
- * @param array &$mergedPlans mergedPlans
- * @param array $plan plan
- * @return bool 上書き実行されればtrue。上書き実行されなければfalse。
- */
- private function __overwriteSameKeyEvent(&$mergedPlans, $plan) {
- foreach ($mergedPlans as &$mergedPlan) {
- if ($mergedPlan['ReservationEvent']['key'] == $plan['ReservationEvent']['key']) {
- if ($mergedPlan['ReservationEvent']['id'] < $plan['ReservationEvent']['id']) {
- //key一致で後出のeventのidの方が大きければ上書きして抜ける。
- $mergedPlan = $plan;
- return true;
- }
- }
- }
- return false;
- }
-
-}
diff --git a/Model/Behavior/ReservationShareUserEntryBehavior.php b/Model/Behavior/ReservationShareUserEntryBehavior.php
deleted file mode 100644
index 8dc8cb7..0000000
--- a/Model/Behavior/ReservationShareUserEntryBehavior.php
+++ /dev/null
@@ -1,150 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-
-/**
- * ReservationShareUserEntryBehavior
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationShareUserEntryBehavior extends ReservationAppBehavior {
-
-/**
- * Default settings
- *
- * @author Noriko Arai
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2015, NetCommons Project
- */
- protected $_defaults = array(
- );
-
-/**
- * 共有ユーザ情報の登録
- *
- * @param Model $model 実際のモデル名
- * @param array $shareUsers shareUsers
- * @param int $eventId eventId
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return void
- */
- public function insertShareUsers(Model $model, $shareUsers, $eventId,
- $createdUserWhenUpd = null) {
- if (!(isset($model->ReservationEventShareUser))) {
- $model->ReservationEventShareUser = ClassRegistry::init(
- 'Reservations.ReservationEventShareUser', true
- );
- //$model->loadModels(['ReservationEventShareUser' => 'Reservation.ReservationEventShareUser']);
- }
- if (empty($shareUsers)) {
- //CakeLog::debug("DBG: shareUsersは空です");
- return;
- }
-
- //無名関数(クロージャ)は変数を親のスコープから引き継ぐことができ、引き継ぐ変数は、use で渡す必要があり。
- $func = function ($value) use($eventId, $createdUserWhenUpd) {
- $elm = array(
- 'reservation_event_id' => $eventId,
- 'share_user' => intval($value),
- );
-
- //施設予約独自の例外追加1)
- //変更後の公開ルームidが、「元予定生成者の*ルーム」から「編集者・承認者(=ログイン者)の
- //プライベート」に変化していた場合、created_userを、元予定生成者「から」編集者・承認者(=ログイン者)
- //「へ」に変更すること。=>これを考慮したcreatedUserWhenUpdを使えばよい。
- if ($createdUserWhenUpd !== null) {
- $elm['created_user'] = $createdUserWhenUpd;
- }
- //CakeLog::debug("DBG: elm[" . print_r($elm, true) . "]");
- return $elm;
- };
-
- $shareUserData = array();
- $shareUserData[$model->ReservationEventShareUser->alias] = array_map($func, $shareUsers);
- $model->ReservationEventShareUser->saveAll(
- $shareUserData[$model->ReservationEventShareUser->alias]
- );
- }
-
-/**
- * 共有ユーザ情報の登録
- *
- * @param Model $model 実際のモデル名
- * @param array $shareUsers shareUsers
- * @param int $eventId eventId
- * @param array $oldShareUserDataAry oldShareUserDataAry
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return void
- */
- public function updateShareUsers(Model $model, $shareUsers, $eventId, $oldShareUserDataAry,
- $createdUserWhenUpd = null) {
- //CakeLog::debug("DBG: IN updateShareUsers(). shareUsers[" .
- // print_r($shareUsers, true) . "] eventId[" . $eventId .
- // "] oldShareUserDataAry[" . print_r($oldShareUserDataAry, true) . "]");
-
- if (!is_array($shareUsers)) {
- $shareUsers = array();
- }
- if (!is_array($oldShareUserDataAry)) {
- $oldShareUserDataAry = array();
- }
-
- //CakeLog::debug("DBG: oldShareUserDataAry1[" . print_r($oldShareUserDataAry, true) . "]");
- $oldShareUsers = Hash::extract($oldShareUserDataAry, '{n}.share_user');
- //CakeLog::debug("DBG: oldShareUserUsers[" . print_r($oldShareUsers, true) . "]");
-
- sort($shareUsers, SORT_NUMERIC); //新しい共有ユーザ群
- sort($oldShareUsers, SORT_NUMERIC); //古い共有ユーザ群
-
- //新しい共有ユーザ群より、追加すべきユーザ群を抽出
- $insShareUsers = array_diff($shareUsers, $oldShareUsers);
- //CakeLog::debug("DBG: insShareUsers[" . print_r($insShareUsers, true) .
- // "] oldShareUsers[" . print_r($oldShareUsers, true) .
- // "] shareUsers[" . print_r($shareUsers, true) . "]");
- $this->insertShareUsers($model, $insShareUsers, $eventId, $createdUserWhenUpd);
-
- //古い共有ユーザ群より、削除すべきユーザ群を抽出
- $delShareUsers = array_diff($oldShareUsers, $shareUsers);
- //CakeLog::debug("DBG: delShareUsers[" . print_r($delShareUsers, true) .
- // "] oldlShareUsers[" . print_r($oldShareUsers, true) .
- // "] shareUsers[" . print_r($shareUsers, true) . "]");
- $this->deleteShareUsers($model, $delShareUsers, $eventId);
-
- //新しい共有ユーザ群と、古い共有ユーザ群両方に存在するユーザは、そのままとしておく。
- }
-
-/**
- * 共有ユーザ情報の削除
- *
- * @param Model $model 実際のモデル名
- * @param array $shareUsers shareUsers
- * @param int $eventId eventId
- * @return void
- * @throws InternalErrorException
- */
- public function deleteShareUsers(Model $model, $shareUsers, $eventId) {
- if (!(isset($model->ReservationEventShareUser))) {
- $model->loadModels(['ReservationEventShareUser' => 'Reservation.ReservationEventShareUser']);
- }
- $conditions = array(
- 'ReservationEventShareUser.reservation_event_id' => $eventId,
- 'ReservationEventShareUser.share_user' => $shareUsers, //shareUsersは配列なのでIN指定
- );
- if (!$model->ReservationEventShareUser->deleteAll($conditions, false)) {
- //deleteAll失敗
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
-}
diff --git a/Model/Behavior/ReservationTopicsBehavior.php b/Model/Behavior/ReservationTopicsBehavior.php
deleted file mode 100644
index da2f0a1..0000000
--- a/Model/Behavior/ReservationTopicsBehavior.php
+++ /dev/null
@@ -1,136 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('WorkflowComponent', 'Workflow.Controller/Component');
-App::uses('ReservationPermissiveRooms', 'Reservations.Utility');
-App::uses('ReservationPlan', 'Reservations.Helper');
-App::uses('ReservationPlanRrule', 'Reservations.Helper');
-
-/**
- * ReservationTopicsBehavior
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationTopicsBehavior extends ReservationAppBehavior {
-
-/**
- * saveTopics
- *
- * 新着設定
- *
- * @param Model $model モデル
- * @param int $eventId イベントID(繰り返しの場合は先頭のイベント)
- * @return void
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- */
- public function saveReservationTopics(Model $model, $eventId) {
- $model->loadModels([
- 'Block' => 'Blocks.Block',
- 'ReservationEvent' => 'Reservations.ReservationEvent'
- ]);
- // 指定されたイベント情報を取得
- $data = $model->ReservationEvent->getEventById($eventId);
- if (! $data) {
- return;
- }
-
- $model->ReservationEvent->set($data);
-
- // プライベート予定のとき、共有者がいたら共有者情報を取得しておく
- $shareUsers = $this->_getShareUsers($data);
-
- // すり替え前にオリジナルルームID, オリジナルブロックIDを確保
- $originalRoomId = Current::read('Room.id');
- $originalBlockId = Current::read('Block.id');
- $originalFrameBlockId = Current::read('Frame.block_id');
-
- // 予定のルームID
- $eventRoomId = $data['ReservationEvent']['room_id'];
-
- // 予定のブロック情報
- $eventBlockId = $originalBlockId;
- $block = $model->Block->find('first', array(
- 'conditions' => array(
- 'plugin_key' => 'reservations',
- 'room_id' => $eventRoomId
- )
- ));
- if ($block) {
- $eventBlockId = $block['Block']['id'];
- }
-
- // カレントのルームIDをすり替え
- Current::$current['Room']['id'] = $eventRoomId;
- Current::$current['Block']['id'] = $eventBlockId;
- Current::$current['Frame']['block_id'] = $eventBlockId;
-
- $model->ReservationEvent->Behaviors->load('Topics.Topics', array(
- 'fields' => array(
- 'path' => '/:plugin_key/reservation_plans/view/:content_key',
- ),
- 'search_contents' => array(
- 'title', 'location', 'contact', 'description'
- ),
- 'users' => $shareUsers,
- 'data' => array('is_in_room' => !(int)$shareUsers)
- ));
- $model->ReservationEvent->saveTopics();
- $model->ReservationEvent->Behaviors->unload('Topics.Topics');
-
- // すり替えものをリカバー
- Current::$current['Room']['id'] = $originalRoomId;
- Current::$current['Block']['id'] = $originalBlockId;
- Current::$current['Frame']['block_id'] = $originalFrameBlockId;
- }
-
-/**
- * deleteReservationTopics
- *
- * 新着削除
- *
- * @param Model $model モデル
- * @param string $eventKey イベントKey
- * @param bool $isOriginRepeat 繰り返しか
- * @param string $originEventKey 繰り返しの場合のオリジナルのキー
- * @param int $editRrule 削除方法
- * @return void
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- */
- public function deleteReservationTopics(Model $model, $eventKey, $isOriginRepeat,
- $originEventKey, $editRrule) {
- // 繰り返し系で
- // 全て削除、以外で
- // 今のキーと、もともとの繰り返しデータのキーが同じ場合は新着は消さない
- if ($isOriginRepeat && $editRrule != ReservationAppBehavior::CALENDAR_PLAN_EDIT_ALL) {
- if ($eventKey == $originEventKey) {
- return;
- }
- }
-
- $model->contentKey = $eventKey;
- $model->beforeDeleteTopics();
- $model->afterDeleteTopics();
- }
-
-/**
- * _getShareUsers
- *
- * @param array $data 予定データ
- * @return array ShareUser配列
- */
- protected function _getShareUsers($data) {
- $ret = array();
- $ret = Hash::combine($data['ReservationEventShareUser'], '{n}.share_user', '{n}.share_user');
- return $ret;
- }
-}
diff --git a/Model/Behavior/ReservationUpdatePlanBehavior.php b/Model/Behavior/ReservationUpdatePlanBehavior.php
deleted file mode 100644
index d9e9b53..0000000
--- a/Model/Behavior/ReservationUpdatePlanBehavior.php
+++ /dev/null
@@ -1,816 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('ReservationRruleUtil', 'Reservations.Utility');
-
-/**
- * ReservationUpdatePlanBehavior
- *
- * @property array $reservationWdayArray reservation weekday array 施設予約曜日配列
- * @property array $editRrules editRules 編集ルール配列
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- * @SuppressWarnings(PHPMD)
- */
-class ReservationUpdatePlanBehavior extends ReservationAppBehavior {
-
-/**
- * Default settings
- *
- * VeventTime(+VeventRRule)の値自動変更
- * registered_into to reservation_information
- *
- * @author Noriko Arai
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2015, NetCommons Project
- */
- protected $_defaults = array(
- 'reservationRruleModel' => 'Reservations.ReservationRrule',
- 'fields' => array(
- 'registered_into' => 'reservation_information',
- ),
- );
- //上記のfields定義は、以下の意味です。
- // The (event|todoplugin|journal) was registerd into the reservation information.
- // =イベント(またはToDoまたは日報)が予定表の情報に登録されました。
-
-/**
- * 予定の変更
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams 予定パラメータ
- * @param array $newPlan 新世代予定(この新世代予定に対して変更をかけていく)
- * @param string $status status(Workflowステータス)
- * @param array $isInfoArray (isOriginRepeat、isTimeMod、isRepeatMod、isMyPrivateRoom)を格納した配列
- * @param string $editRrule 編集ルール (この予定のみ、この予定以降、全ての予定)
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return 変更成功時 int reservationEventId
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function updatePlan(Model $model, $planParams, $newPlan, $status,
- $isInfoArray, $editRrule = self::CALENDAR_PLAN_EDIT_THIS, $createdUserWhenUpd = null) {
- $eventId = $newPlan['new_event_id'];
-
- //bool $isOriginRepeat 元予定が繰返しありかなしか
- //bool $isTimeMod 元予定に対して時間の変更があったかどうか
- //bool $isRepeatMod 元予定に対して繰返しの変更があったかどうか
- //bool $isMyPrivateRoom 新しい予定の公開対象のルームがログイン者のプライベートルームかどうか
- list($isOriginRepeat, $isTimeMod, $isRepeatMod, $isMyPrivateRoom) = $isInfoArray;
-
- if (!$model->Behaviors->hasMethod('doArrangeData')) {
- $model->Behaviors->load('Reservations.ReservationCrudPlanCommon');
- }
- $planParams = $model->doArrangeData($planParams);
-
- //ReservationEventの対象データ取得
- $this->loadEventAndRruleModels($model);
-
- //対象となるデータを$eventData、$rruleDataそれぞれにセット
- $eventData = $rruleData = array();
-
- list($eventData, $rruleData) = $this->setEventDataAndRruleData($model, $newPlan);
-
- //timezoneがなければ、reservation_eventテーブルからセットする。
- if (!isset($planParams['timezone'])) {
- $planParams['timezone'] = $eventData['ReservationEvent']['timezone'];
- }
-
- //「全更新」、「指定以降更新」、「この予定のみ更新or元予定に繰返しなし」
- if ($editRrule === self::CALENDAR_PLAN_EDIT_ALL) {
- //「この予定ふくめ全て更新」
- $isArray = array($isOriginRepeat, $isTimeMod, $isRepeatMod, $isMyPrivateRoom);
- $eventId = $this->updatePlanAll($model, $planParams, $rruleData, $eventData,
- $newPlan, $isArray, $status, $editRrule, $createdUserWhenUpd);
- return $eventId; //復帰
-
- } elseif ($editRrule === self::CALENDAR_PLAN_EDIT_AFTER) {
- //「この予定以降を更新」
- $isArray = array($isOriginRepeat, $isTimeMod, $isRepeatMod, $isMyPrivateRoom);
- $eventId = $this->updatePlanByAfter(
- $model, $planParams, $rruleData, $eventData, $newPlan, $isArray,
- $status, $editRrule, $createdUserWhenUpd);
-
- return $eventId; //復帰
-
- } else {
- //「この予定のみ更新or元予定に繰返しなし」
- if ($isOriginRepeat) {
- //元予定に繰返しあり、の「この予定のみ更新」ケース
- if ($isRepeatMod) {
- //繰返し条件が変更になった場合、(b)
-
- CakeLog::notice(
- "「この予定のみ更新」の場合、" .
- "繰返し予定の変更は許可していない。" .
- "Google施設予約仕様に準拠し、" .
- "繰返し予定の変更は無視し、" .
- "現繰返しルールをそのままつかう。");
- }
- //すでにnewPlanを作成する時rruleDataは生成されているので、
- //rruleDataの上書き(updateRruleData()発行)は無駄なのでしない。
- //
- //補足)newPlanを生成するとき、createdUserWhenUpdを考慮してrruleをcopyしています。
- } else {
- //「元予定に繰返しなし」=元予定は単一予定
- //
- //すでにnewPlanを作成する時rruleDataは生成されている。
- //
- //変更後、繰返し指定になっている可能性もあるので、
- //rruleデータを入力データに従い更新しておく。
- //
- $rruleData = $this->updateRruleData($model, $planParams, $rruleData, $createdUserWhenUpd);
- }
-
- //選択したeventデータを更新 (a). keyは踏襲されている。
- //
-
- $this->setEventData($planParams, $rruleData, $eventData); //eventDataに値セット
-
- $isArrays = array($isOriginRepeat, $isTimeMod, $isRepeatMod, $isMyPrivateRoom);
- $eventData = $this->updateDtstartData($model, $planParams, $rruleData, $eventData,
- $isArrays, 1, $editRrule, $createdUserWhenUpd);
- $eventId = $eventData['ReservationEvent']['id'];
-
- //「この予定のみ更新or元予定に繰返しなし」
- if ($isOriginRepeat) {
- //元予定に繰返しありのケース
-
- //兄弟eventの情報を書き換える必要はないので、ここではなにもしない。
-
- } else {
- //「元予定に繰返しなし」=元予定は単一予定
-
- //元予定に兄弟eventは存在しないので、
- //前出の「選択したeventデータを更新 (a)」を最初のeventとして扱えばよい。
- //(もし繰返し指定があれば、2件目以降のevent生成を行う)
- //
- if ($rruleData['ReservationRrule']['rrule'] !== '') { //Rruleの登録
- if (!$model->Behaviors->hasMethod('insertRrule')) {
- $model->Behaviors->load('Reservations.ReservationRruleEntry');
- }
- $model->insertRrule($planParams, $rruleData, $eventData, $createdUserWhenUpd);
- }
- }
- return $eventId; //復帰
- }
- }
-
-/**
- * ReservationEventの対象データ取得
- *
- * @param Model $model 実際のモデル名
- * @param int $eventId ReservationEvent.id
- * @param string $editRrule editRrule デフォルト値 self::CALENDAR_PLAN_EDIT_THIS
- * @return 成功時 array 条件にマッチするReservationEventDataとそのbelongsTo,hasOne関係のデータ(実際には、ReservationRruleData), 失敗時 空配列
- */
- public function getReservationEventAndRrule(Model $model, $eventId, $editRrule) {
- $params = array(
- 'conditions' => array('ReservationEvent.id' => $eventId),
- 'recursive' => 0, //belongTo, hasOneの1跨ぎの関係までとってくる。
- 'fields' => array('ReservationEvent.*', 'ReservationRrule.*'),
- 'callbacks' => false
- );
- return $model->ReservationEvent->find('first', $params);
- }
-
-/**
- * RruleDataへのデータをdateへセット
- *
- * @param array $rruleData rruleData
- * @param array &$data data
- * @return void
- */
- public function setRruleData2Data($rruleData, &$data) {
- //$data['ReservationRrule']['location'] = $rruleData['ReservationRrule']['location'];
- //$data['ReservationRrule']['contact'] = $rruleData['ReservationRrule']['contact'];
- //$data['ReservationRrule']['description'] = $rruleData['ReservationRrule']['description'];
- $data['ReservationRrule']['rrule'] = $rruleData['ReservationRrule']['rrule'];
- $data['ReservationRrule']['room_id'] = $rruleData['ReservationRrule']['room_id'];
- //$data['ReservationRrule']['status'] = $rruleData['ReservationRrule']['status'];
- //$data['ReservationRrule']['language_id'] = $rruleData['ReservationRrule']['language_id'];
- }
-
-/**
- * 予定データの全更新
- *
- * @param Model $model モデル
- * @param array $planParams 予定パラメータ
- * @param array $rruleData rruleData
- * @param array $eventData eventData(編集画面のevent)
- * @param array $newPlan 新世代予定データ
- * @param array $isArray ($isOriginRepeat, $isTimeMod, $isRepeatMod, $isMyPrivateRoom)をまとめた配列
- * @param string $status status(Workflowステータス)
- * @param int $editRrule editRrule
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return int eventIdを返す
- * @throws InternalErrorException
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function updatePlanAll(Model $model, $planParams, $rruleData, $eventData,
- $newPlan, $isArray, $status, $editRrule, $createdUserWhenUpd) {
- $isOriginRepeat = $isArray[0];
- $isTimeMod = $isArray[1];
- $isRepeatMod = $isArray[2];
- $isMyPrivateRoom = $isArray[3];
-
- if (!(isset($model->ReservationRrule))) {
- $model->loadModels([
- 'ReservationRrule' => 'Reservations.ReservationRrule',
- ]);
- }
- //繰返し情報が更新されている時は、rruleDataをplanParasを使って書き換える
- if ($isRepeatMod) {
- //setRruleDataはsave()を呼んでいないフィールドセットだけのmethodなので、
- //setRruleData()+save()のupdateRruleData()の変更する。
- ////$this->setRruleData($model, $planParams, $rruleData, self::CALENDAR_UPDATE_MODE);
- $this->updateRruleData($model, $planParams, $rruleData, $createdUserWhenUpd);
- }
-
- $eventId = null;
- if ($isTimeMod || $isRepeatMod) {
- //時間・繰返し系が変更されたので、
-
- ////////////////////////
- //(0)編集画面のplanParamsをもとに、eventDataを生成する。
- $this->setEventData($planParams, $rruleData, $eventData);
-
- ////////////////////////
- //(1)現在のrrule配下の全eventDataを消す
-
- //まずnewPlanより、消す対象のeventのidをすべて抽出する。
- //$eventIds = Hash::extract($newPlan,
- // 'ReservationEvent.{n}[language_id=' . Current::read('Langugage.id') . '].id');
-
- //eventのidではなく、keyで消すこと。
- //そうしないと、直近のidだけ消しても、過去世代の同一keyの別idの
- //eventデータが拾われてしますから。
- ////$eventIds = Hash::extract($newPlan, 'ReservationEvent.{n}.id');
- $eventKeys = Hash::extract($newPlan, 'ReservationEvent.{n}.key');
- $this->__deleteOrUpdateAllEvents($model, $status, $eventData, $eventKeys);
-
- /////////////////
- //(2)新たな時間・繰返し系情報をもとに、eventDataを生成し直す。(keyはすべて新規)
- //*vreservationでは日付時刻がキーになっているので、繰返し系に変更がなくとも、
- // 時間系が変われば、vreservation的にはキーがかわるので、eventデータのkeyも取り直すこととする。
- //
- //(以下で行うのは、insertPlan()のサブセット処理)
-
- if (!$model->Behaviors->hasMethod('insertEventData')) {
- $model->Behaviors->load('Reservations.ReservationInsertPlan');
- }
-
- //先頭のeventDataの1件登録
- $eventData = $model->insertEventData($planParams, $rruleData, $createdUserWhenUpd);
- if (!isset($eventData['ReservationEvent']['id'])) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- $eventId = $eventData['ReservationEvent']['id'];
-
- if ($rruleData['ReservationRrule']['rrule'] !== '') { //Rruleの登録
- if (!$model->Behaviors->hasMethod('insertRrule')) {
- $model->Behaviors->load('Reservations.ReservationRruleEntry');
- }
- $model->insertRrule($planParams, $rruleData, $eventData, $createdUserWhenUpd);
- ////uddateRruleData()は、$isRepeatModがtrueの時だけ発行する関数なので、
- ////ここではなく、前出の if($isRepeatMod){...}へ移動した。
- ////$this->updateRruleData($model, $planParams, $rruleData);//FUJI
- }
-
- } else {
- //時間・繰返し系が変更されていない(vreservation的なキーが変わらない)ので、eventのkeyはそのままに
- //現在の全eventDataの時間以外の値を書き換える。
-
- //選択されたデータを編集画面のデータ(planParams)をもとに書き換える
- //書き換え後のデータは、以下の全書き換えの雛形eventとする。
- //
- $this->setEventData($planParams, $rruleData, $eventData);
- $index = 0;
- foreach ($newPlan['ReservationEvent'] as $fields) {
- ++$index;
- $event = array();
- $event['ReservationEvent'] = $fields; //$eventは元のeventを指す。
- $eventDataForAllUpd = $this->__getEventDataForUpdateAllOrAfter($event,
- $eventData, $status);
- if ($eventId === null) {
- //繰返しの最初のeventIdを記録しておく。
- $eventId = $eventDataForAllUpd['ReservationEvent']['id'];
- }
-
- $isArrays = array($isOriginRepeat, $isTimeMod, $isRepeatMod, $isMyPrivateRoom);
- $eventDataForAllUpd = $this->updateDtstartData(
- $model, $planParams, $rruleData, $eventDataForAllUpd,
- $isArrays, $index, $editRrule, $createdUserWhenUpd);
- }
- }
-
- return $eventId;
- }
-
-/**
- * EventDataのデータ更新
- *
- * @param Model $model モデル
- * @param array $planParams 予定パラメータ
- * @param array $rruleData rruleデータ
- * @param array $eventData eventデータ
- * @param array $isArrays isArrays (isOriginRepeat,isTimeMod,isRepeatMod,isMyPrivateRoom)を格納した配列
- * @param int $index index 何回目のupdateのindex(1はじまり)
- * @param string $editRrule editRrule
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return array $eventData 変更後の$eventDataを返す
- * @throws InternalErrorException
- */
- public function updateDtstartData(Model $model, $planParams, $rruleData, $eventData,
- $isArrays, $index, $editRrule, $createdUserWhenUpd = null) {
- //bool $isOriginRepeat isOriginRepeat
- //bool $isTimeMod isTimeMod
- //bool $isRepeatMod isRepeatMod
- list($isOriginRepeat, $isTimeMod, $isRepeatMod, $isMyPrivateRoom) = $isArrays;
-
- if (!(isset($model->ReservationEvent) && is_callable($model->ReservationEvent->create))) {
- $model->loadModels([
- 'ReservationEvent' => 'Reservations.ReservationEvent',
- ]);
- }
-
- if ($editRrule === self::CALENDAR_PLAN_EDIT_ALL) {
- //「この予定ふくめ全て更新」
-
- //繰返し・時間系の変更がない場合のEDIT_ALLの場合、
- //単一の更新と同じ処理にながせばよい。
-
- //なお、「この予定のみ更新」ではないので、
- //recurrenceにはなにもしない
-
- } elseif ($editRrule === self::CALENDAR_PLAN_EDIT_AFTER) {
- //「この予定以降を更新」
-
- //繰返し・時間系の変更がない場合のEDIT_AFTERの場合、
- //単一の更新と同じ処理にながせばよい。
-
- //なお、「この予定のみ更新」ではないので、
- //recurrenceにはなにもしない
-
- } else {
- //「この予定のみ更新」
- if ($isOriginRepeat) {
- //元予定が繰返しあり
- //置換イベントidとして1を立てておく。
- $eventData['ReservationEvent']['recurrence_event_id'] = 1; //暫定1
- }
- }
-
- $eventId = $eventData['ReservationEvent']['id']; //update対象のststartendIdを退避
-
- //施設予約独自の例外追加1)
- //変更後の公開ルームidが、「元予定生成者の*ルーム」から「編集者・承認者(=ログイン者)の
- //プライベート」に変化していた場合、created_userを、元予定生成者「から」編集者・承認者(=ログイン者)
- //「へ」に変更すること。=>これを考慮したcreatedUserWhenUpdを使えばよい。
- //尚、ここのsaveはUPDATなので、save前に、create_user項目へセットして問題なし。
- if ($createdUserWhenUpd !== null) {
- $eventData['ReservationEvent']['created_user'] = $createdUserWhenUpd;
- }
-
- $model->ReservationEvent->set($eventData);
-
- if (!$model->ReservationEvent->validates()) { //eventDataをチェック
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //copyEventData()のINSERTsaveでは、WFのbeforeSaveのis_active調整処理を抑止し、
- //代わりに、prepareLatestCreatedForInsを発行し、is_latest,created調整処理および
- //is_activeのoff暫定セットをした。
- //(WFのbeforeSaveはUPDATEsaveでは発動されないことが分かっているので)
- //よって、「ここ」UPDATEsaveで、prepareActiveForUpdを事前実行し、INSERTsaveでdelayさせた
- //is_active調整処理を行う。(eventDataの値が一部変更されます)
- $model->ReservationEvent->prepareActiveForUpd($eventData);
-
- // $eventDataがprepareActiveForUpd()で変更されるので、再度setする
- $model->ReservationEvent->set($eventData);
- if (!$model->ReservationEvent->save(null,
- array(
- 'validate' => false,
- 'callbacks' => true,
- ))) { //保存のみ
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- if ($eventId !== $model->ReservationEvent->id) {
- //insertではなくupdateでなくてはならないのに、insertになってしまった。(つまりid値が新しくなってしまった)
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //採番されたidをeventDataにセットしておく
- $eventData['ReservationEvent']['id'] = $model->ReservationEvent->id;
-
- //施設予約共有ユーザ更新
- if (!$model->Behaviors->hasMethod('updateShareUsers')) {
- $model->Behaviors->load('Reservations.ReservationShareUserEntry');
- }
- $model->updateShareUsers(
- $planParams['share_users'],
- $eventId,
- Hash::get($eventData, 'ReservationEvent.ReservationEventShareUser'),
- $createdUserWhenUpd
- );
-
- ////関連コンテンツ(reservation_event_contents)の更新
- ////
- //if (!empty($eventData['ReservationEvent']['ReservationEventContent']['linked_model'])) {
- // if (!(isset($model->ReservationEventContent))) {
- // $model->loadModels(['ReservationEventContent' => 'Reservations.ReservationEventContent']);
- // }
- // //saveLinkedData()は、内部で
- // //modelとcontent_key一致データなし=> insert
- // //modelとcontent_key一致データあり=> update
- // //と登録・変更を適宜区別して実行する関数である。
- // $model->ReservationEventContent->saveLinkedData($eventData, $createdUserWhenUpd);
- //}
-
- return $eventData;
- }
-
-/**
- * 指定eventデータ以降の予定の変更
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams 予定パラメータ
- * @param array $rruleData rruleData
- * @param array $eventData eventData
- * @param array $newPlan 新世代予定データ
- * @param array $isArray ($isOriginRepeat, $isTimeMod, $isRepeatMod, $isMyPrivateRoom)をまとめた配列
- * @param string $status status(Workflowステータス)
- * @param int $editRrule editRrule
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return int $eventIdを返す
- * @throws InternalErrorException
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function updatePlanByAfter(Model $model, $planParams, $rruleData, $eventData,
- $newPlan, $isArray, $status, $editRrule, $createdUserWhenUpd) {
- $eventId = $newPlan['new_event_id'];
- ////$rruleKey = $rruleData['ReservationRrule']['key'];
-
- $isOriginRepeat = $isArray[0];
- $isTimeMod = $isArray[1];
- $isRepeatMod = $isArray[2];
- $isMyPrivateRoom = $isArray[3];
-
- if (!(isset($model->ReservationRrule))) {
- $model->loadModels([
- 'ReservationRrule' => 'Reservations.ReservationRrule',
- ]);
- }
-
- $eventId = null;
- if ($isTimeMod || $isRepeatMod) {
- //時間・繰返し系が変更されたので、
-
- ////////////////////////
- //(1)指定eventのdtstart以降の全eventDataを消す
-
- //まずnewPlanより、基準日時以後の消す対象eventのidをすべて抽出する。
- //注)ここに来る前に、setEventDataAndRruleData()で、
- //rruleData, eventDataには、newPlanより指定したものが抽出・セットされているので、
- //それを使う。
- //
-
- //CakeLog::debug("DBG: before setEventData()。eventData[" . print_r($eventData, true) . "]");
-
- //ここでは、指定された元予定の時刻をつかわないといけない。
- //誤って、$planParamsからsetEventData()実行でeventDataを上書きすると、
- //時間系が変更になっているための別の日時になってしまい、
- //つかえないdtstartになります。要注意。
- //
-
- //CakeLog::debug("DBG: after setEventData()。eventData[" . print_r($eventData, true) . "]");
-
- //画面より入力された開始の日付時刻を、$baseDtstartにする。
- $baseDtstart = $eventData['ReservationEvent']['dtstart']; //基準日時
-
- //eventのidではなく、keyで消さないといけない。(なぜなら同一キーをもつ過去世代が複数あり
- //1つのidをけしても、同一keyの他のidのデータが拾われて表示されてしまうため。
- ////$eventIds = Hash::extract($newPlan['ReservationEvent'], '{n}[dtstart>=' . $baseDtstart . '].id');
- $eventKeys = Hash::extract(
- $newPlan['ReservationEvent'], '{n}[dtstart>=' . $baseDtstart . '].key'
- );
- $this->__deleteOrUpdateAllEvents($model, $status, $eventData, $eventKeys);
-
- //////////////////////////////
- //(2) eventsを消した後、rruleIdを親にもつeventDataの件数を調べる。
- //(2)-1. eventData件数==0、つまり、今の親rruleDataは、子を一切持たなくなった。
- // 自分の新しい親rruleDataをこの後つくるので)現在の親rruleDataは浮きリソースになるので消す。
- //(2)-2. eventData件数!=0、つまり、今の親rruleDataは自分(eventData)以外の子(時間軸では自分より前の時間)
- // を持っている。
- // なので、今の親rruleDataのrruleのUNTIL値を「自分の直前まで」に書き換える。
- // 自分を今の親rruleDataの管理下から切り離す。(自分の新しい親rruleDataはこのあと作る)
- //
- // =>これらの(2)の一連処理を実行する関数 auditEventOrRewriteUntil() をcallする。
- //
- if (!$model->Behaviors->hasMethod('auditEventOrRewriteUntil')) {
- $model->Behaviors->load('Reservations.ReservationCrudPlanCommon');
- }
- $model->auditEventOrRewriteUntil($eventData, $rruleData, $baseDtstart);
-
- /////////////////
- //(3) 新たな時間・繰返し系情報をもとに、rruleDataと、eventData群を生成し直す。(keyはすべて新規)
- //*rruleDataは新しく発行する。ireservation_uidに分割された元rruleDataのkeyの一部を保持する。
- //*vreservationでは日付時刻がキーになっているので、繰返し系に変更がなくとも、
- // 時間系が変われば、vreservation的にはキーがかわるので、eventデータのkeyも取り直すこととする。
- //
- //(以下で行うのは、insertPlan()のサブセット処理)
-
- //あとで、2つのrruleDataが分割されたものであることが分かるよう、
- //新rruleDataのireservation_uidを、元のireservation_uid + 元keyにしておく。
- //
- $newIcalUid = ReservationRruleUtil::addKeyToIcalUid(
- $rruleData['ReservationRrule']['ireservation_uid'], $rruleData['ReservationRrule']['key']);
-
- //(以下は、insertPlan()のサブセット処理
-
- if (!$model->Behaviors->hasMethod('insertRruleData')) {
- $model->Behaviors->load('Reservations.ReservationInsertPlan');
- }
-
- //rruleDataの新規1件登録
- $rruleData = $model->insertRruleData($planParams, $newIcalUid, $createdUserWhenUpd);
-
- //先頭のeventDataの1件登録
- $eventData = $model->insertEventData($planParams, $rruleData, $createdUserWhenUpd);
- if (!isset($eventData['ReservationEvent']['id'])) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- $eventId = $eventData['ReservationEvent']['id'];
-
- if ($rruleData['ReservationRrule']['rrule'] !== '') { //Rruleの登録
- if (!$model->Behaviors->hasMethod('insertRrule')) {
- $model->Behaviors->load('Reservations.ReservationRruleEntry');
- }
- $model->insertRrule($planParams, $rruleData, $eventData, $createdUserWhenUpd);
- }
-
- } else {
- //時間・繰返し系が変更されていない(vreservation的なキーが変わらない)ので、eventのkeyはそのままに
- //指定されたeventIdより日付時刻が後になるeventDataすべての時間以外の値を書き換える。
-
- //選択されたデータを編集画面のデータ(planParams)をもとに書き換える
- //書き換え後のデータは、以下の全書き換えの雛形eventとする。
- //
-
- //$planParamsの値(画面の入力値)より、$eventDataを作り出す。
- //*時間系が変更されていないことが保証されているので、
- //setEventData()を発行して、$eventDataを更新しても、
- //dtstartは元のままです。
- $this->setEventData($planParams, $rruleData, $eventData);
-
- //画面より入力された開始の日付時刻を、$baseDtstartにする。
- $baseDtstart = $eventData['ReservationEvent']['dtstart'];
-
- $eventsAfterBase = Hash::extract(
- $newPlan['ReservationEvent'], '{n}[dtstart>=' . $baseDtstart . ']');
-
- $index = 0;
- foreach ($eventsAfterBase as $fields) {
- ++$index;
- $event = array();
- $event['ReservationEvent'] = $fields; //$eventは元のeventを指す。
- $eventDataForAfterUpd = $this->__getEventDataForUpdateAllOrAfter($event,
- $eventData, $status);
- if ($eventId === null) {
- //繰返しの最初のeventIdを記録しておく。
- $eventId = $eventDataForAfterUpd['ReservationEvent']['id'];
- }
-
- $isArrays = array($isOriginRepeat, $isTimeMod, $isRepeatMod, $isMyPrivateRoom);
- $eventDataForAfterUpd = $this->updateDtstartData(
- $model, $planParams, $rruleData, $eventDataForAfterUpd,
- $isArrays, $index, $editRrule, $createdUserWhenUpd);
- }
- }
-
- return $eventId;
- }
-
-/**
- * resutlsよりeventDataとrruleDataに値セット
- *
- * @param Model $model モデル
- * @param array $newPlan 新世代予定
- * @return array array($eventData, $rruleData)を返す
- * @throws InternalErrorException
- */
- public function setEventDataAndRruleData(Model $model, $newPlan) {
- //この時点で、$newPlan['ReservationRrule']、$newPlan['ReservationEvent']のcreated_userは、
- //createdUserWhenUpd考慮済になっている。
- $rruleData['ReservationRrule'] = $newPlan['ReservationRrule'];
- $events = Hash::extract($newPlan, 'ReservationEvent.{n}[id=' . $newPlan['new_event_id'] . ']');
- $eventData['ReservationEvent'] = $events[0];
- return array($eventData, $rruleData);
- }
-
-/**
- * getEditRruleForUpdate
- *
- * request->data情報より、editRruleモードを決定し返す。
- *
- * @param Model $model モデル
- * @param array $data data
- * @return string 成功時editRruleモード(0/1/2)を返す。失敗時 例外をthrowする
- * @throws InternalErrorException
- */
- public function getEditRruleForUpdate(Model $model, $data) {
- if (empty($data['ReservationActionPlan']['edit_rrule'])) {
- //edit_rruleが存在しないか'0'ならば、「この予定のみ変更」
- return self::CALENDAR_PLAN_EDIT_THIS;
- }
- if ($data['ReservationActionPlan']['edit_rrule'] == self::CALENDAR_PLAN_EDIT_AFTER) {
- return self::CALENDAR_PLAN_EDIT_AFTER;
- }
- if ($data['ReservationActionPlan']['edit_rrule'] == self::CALENDAR_PLAN_EDIT_ALL) {
- return self::CALENDAR_PLAN_EDIT_ALL;
- }
- //ここに流れてくる時は、モードの値がおかしいので、例外throw
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
-/**
- * RruleDataのデータ更新
- *
- * @param Model $model モデル
- * @param array $planParams 予定パラメータ
- * @param array $rruleData 更新対象となるrruleData
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return array $rruleDataを返す
- * @throws InternalErrorException
- */
- public function updateRruleData(Model $model, $planParams, $rruleData,
- $createdUserWhenUpd = null) {
- if (!(isset($model->ReservationRrule) && is_callable($model->ReservationRrule->create))) {
- $model->loadModels([
- 'ReservationRrule' => 'Reservations.ReservationRrule',
- ]);
- }
-
- //現rruleDataにplanParamデータを詰め、それをモデルにセット
- $this->setRruleData($model, $planParams, $rruleData, self::CALENDAR_UPDATE_MODE,
- $rruleData['ReservationRrule']['key'], $rruleData['ReservationRrule']['id']);
-
- if (!$model->Behaviors->hasMethod('saveRruleData')) {
- $model->Behaviors->load('Reservations.ReservationCrudPlanCommon');
- }
- $rruleData = $model->saveRruleData($rruleData, $createdUserWhenUpd);
-
- return $rruleData;
- }
-
-/**
- * __getEventDataForUpdateAllOrAfter
- *
- * 時間系・繰返し系に変更がない時の全変更・以後変更兼用イベントデータ生成
- *
- * @param array $event newPlanの各繰返しeventデータ。keyにReservationEventを持つように整形してある。
- * @param array $eventData 編集画面のデータに基づいて作成されたeventData
- * @param string $status status
- * @return array 全変更用に適宜編集された繰返しeventデータ
- */
- private function __getEventDataForUpdateAllOrAfter($event, $eventData, $status) {
- //id,key,rrule_idはnewPlanのまま
- //$event['ReservationEvent']['id'] = 108
- //$event['ReservationEvent']['reservation_rrule_id'] = 83
- //$event['ReservationEvent']['key'] = d5612115c24c86ea8987eddd021aff5b
-
- //room_idは編集画面の値を使う
- $event['ReservationEvent']['room_id'] = $eventData['ReservationEvent']['room_id'];
-
- //langauge_id,target_userは編集画面にないのでnewPlanのまま
- //$event['ReservationEvent']['language_id'] = 2
- //$event['ReservationEvent']['target_user'] = 1
-
- //タイトル、場所、連絡先、詳細は編集画面の値を使う
- $event['ReservationEvent']['title'] = $eventData['ReservationEvent']['title'];
- $event['ReservationEvent']['title_icon'] = $eventData['ReservationEvent']['title_icon'];
- $event['ReservationEvent']['location'] = $eventData['ReservationEvent']['location'];
- $event['ReservationEvent']['contact'] = $eventData['ReservationEvent']['contact'];
- $event['ReservationEvent']['description'] = $eventData['ReservationEvent']['description'];
-
- //終日指定、開始終了日時、TZは「全て変更」の場合、newPlanの値を使う
- //$event['ReservationEvent']['is_allday'] =
- //$event['ReservationEvent']['start_date'] = 20160616
- //$event['ReservationEvent']['start_time'] = 080000
- //$event['ReservationEvent']['dtstart'] = 20160616080000
- //$event['ReservationEvent']['end_date'] = 20160616
- //$event['ReservationEvent']['end_time'] = 090000
- //$event['ReservationEvent']['dtend'] = 20160616090000
- //$event['ReservationEvent']['timezone'] = 9.0
-
- //statusは、編集画面のsave_Nを元に施設予約拡張新statusになっているので、
- //それを代入する。
- $event['ReservationEvent']['status'] = $status;
-
- //is_active, is_latestは、statusの値変化の有無で、処理が変わるのでここではスルーする。
- //$event['ReservationEvent']['is_active'] = $eventData['ReservationEvent']['is_active'];
- //$event['ReservationEvent']['is_latest'] = $eventData['ReservationEvent']['is_latest'];
-
- //「この予定のみ」変更した記録(置換)は残しておく(newPlanの値のまま)
- //$event['ReservationEvent']['recurrence_event_id'] = 0
-
- //「除外」記録は残しておく(newPlanの値のまま)
- //$event['ReservationEvent']['exception_event_id'] = 0
-
- //メール通知関連は編集画面の値を使う
- $event['ReservationEvent']['is_enable_mail'] = $eventData['ReservationEvent']['is_enable_mail'];
- $event['ReservationEvent']['email_send_timing'] =
- $eventData['ReservationEvent']['email_send_timing'];
-
- //作成日、作成者情報はnewPlanの値のまま
- //$event['ReservationEvent']['created_user'] = 1
- //$event['ReservationEvent']['created'] = 2016-06-17 07:38:27
-
- //更新日、更新者情報は変更する
- $event['ReservationEvent']['modified_user'] = $eventData['ReservationEvent']['modified_user'];
- $event['ReservationEvent']['modified'] = $eventData['ReservationEvent']['modified'];
-
- //ReservationEventShareUserは、あとで、planParamsのShareUserを
- //つかって書き換えるので、元のままとしておく。
- //$event['ReservationEvent']['ReservationEventShareUser'] = Array
- // (
- // )
-
- //ReservationEventContentは、あとで、書き換えるので、
- //元のままとしておく。
- //$event['ReservationEvent']['ReservationEventContent'] = Array
- // (
- // )
-
- return $event;
- }
-
-/**
- * __deleteOrUpdateAllEvents
- *
- * 指定した全イベントデータの削除または更新処理
- *
- * @param Model $model 実際のモデル名
- * @param string $status status
- * @param array $eventData 元となるeventData
- * @param array $eventKeys 対象とするeventデータ群のkey集合
- * @return void
- * @throws InternalErrorException
- */
- private function __deleteOrUpdateAllEvents(Model $model, $status, $eventData, $eventKeys) {
- if ($status == WorkflowComponent::STATUS_PUBLISHED) {
- // (1)-1 statusが発行済の場合、実際に削除する。
- $conditions = array(
- array(
- $model->ReservationEvent->alias . '.key' => $eventKeys,
- )
- );
- //第2引数cascade==trueで、関連する子 ReservationEventShareUsers, ReservationEventContentを
- //ここで消す。
- //第3引数callbacks==trueで、メール関連のafterDeleteを動かす? FIXME: 要確認
- //
- if (!$model->ReservationEvent->deleteAll($conditions, true, true)) {
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- } else {
- // (1)-2 statusが一時保存、承認待ち、差し戻しの場合、現在のrrule配下の全eventDataの
- // excepted(除去)を立てて、無効化しておく。
- // なお、表示に引っかからないよう、is_xxxxもoffしておくこと。
-
- $fields = array(
- $model->ReservationEvent->alias . '.exception_event_id' => 1,
- $model->ReservationEvent->alias . '.modified_user' =>
- $eventData['ReservationEvent']['modified_user'],
- $model->ReservationEvent->alias . '.modified' =>
- "'" . $eventData['ReservationEvent']['modified'] . "'", //クオートに注意
- //update,updateAllの時はWFのbeforeSaveによるis_xxxx変更処理は動かない.
- //よってCAL自体でis_xxxxを変更(off)しておく。
- $model->ReservationEvent->alias . '.is_active' => false, //aaaaaaaaa
- $model->ReservationEvent->alias . '.is_latest' => false, //aaaaaaaaa
- );
- $conditions = array($model->ReservationEvent->alias . '.key' => $eventKeys);
- if (!$model->ReservationEvent->updateAll($fields, $conditions)) {
- $model->validationErrors = Hash::merge(
- $model->validationErrors, $model->ReservationEvent->validationErrors);
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
- }
-
-}
diff --git a/Model/Behavior/ReservationValidateAppBehavior.php b/Model/Behavior/ReservationValidateAppBehavior.php
deleted file mode 100644
index 2644072..0000000
--- a/Model/Behavior/ReservationValidateAppBehavior.php
+++ /dev/null
@@ -1,257 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ModelBehavior', 'Model');
-
-/**
- * ReservationValidateApp Behavior
- *
- * @package Reservations\Reservations\Model\Befavior
- * @author Allcreator
- */
-class ReservationValidateAppBehavior extends ModelBehavior {
-
-/**
- * _checkRepateFreq
- *
- * Rrule規則の繰返し周期チェック
- *
- * @param Model $model モデル変数
- * @param array $check 入力配列
- * @return bool 成功時true, 失敗時false
- */
- protected function _checkRepateFreq(Model $model, $check) {
- if (!isset($model->ReservationActionPlan)) {
- $model->loadModels(['ReservationActionPlan' => 'Reservations.ReservationActionPlan']);
- }
-
- $ret = true;
- switch ($model->data[$model->alias]['repeat_freq']) {
- case ReservationsComponent::CALENDAR_REPEAT_FREQ_DAILY: //日単位
- // rrule_interval[DAILY] inList => array(1, 2, 3, 4, 5, 6) //n日ごと
- $ret = $this->__checkDailyRepateFreq($model, $check);
- break;
- case ReservationsComponent::CALENDAR_REPEAT_FREQ_WEEKLY: //週単位
- // rrule_interval[WEEKLY] inList => array(1, 2, 3, 4, 5) //n週ごと
- $ret = $this->__checkWeeklyRepateFreq($model, $check);
- break;
- case ReservationsComponent::CALENDAR_REPEAT_FREQ_MONTHLY: //月単位
- // rrule_interval[MONTHLY] inList => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) //nヶ月ごと
- $ret = $this->__checkMonthlyRepateFreq($model, $check);
- break;
- case ReservationsComponent::CALENDAR_REPEAT_FREQ_YEARLY: //年単位
- // rrule_interval[YEARLY] inList => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) //n年ごと
- $ret = $this->__checkYearlyRepateFreq($model, $check);
- break;
- default:
- //不正種別の場合、右代表で、rrule_interval[DAILY]にエラーMSGを代入する。
- $validationErrors['rrule_interval'] = array();
- $validationErrors['rrule_interval']['DAILY'] = array();
- //$validationErrors['rrule_byday']['DAILY'][] =
- $validationErrors['rrule_interval']['DAILY'][] = __d(
- 'reservations', 'Invalid input. (repeat interval. Please specify day/week/month/year)'
- );
- $model->ReservationActionPlan->reservationProofreadValidationErrors = $validationErrors;
- return false;
- }
- return $ret;
- }
-
-/**
- * __checkDailyRepateFreq
- *
- * 日用Rrule規則の繰返し周期チェック
- *
- * @param Model $model モデル変数
- * @param array &$check 入力配列
- * @return bool 成功時true, 失敗時false
- */
- private function __checkDailyRepateFreq(Model $model, &$check) {
- $min = ReservationsComponent::CALENDAR_RRULE_INTERVAL_DAILY_MIN;
- $max = ReservationsComponent::CALENDAR_RRULE_INTERVAL_DAILY_MAX;
- if (! in_array($model->data[$model->alias]['rrule_interval']['DAILY'], range($min, $max))) {
- $validationError['rrule_interval'] = array();
- $validationError['rrule_interval']['DAILY'] = array();
- $validationError['rrule_interval']['DAILY'][] = __d(
- 'reservations', 'Invalid input. (repeat interval: every day)'
- );
- $model->ReservationActionPlan->reservationProofreadValidationErrors = $validationError;
- return false;
- }
- return true;
- }
-
-/**
- * __checkWeeklyRepateFreq
- *
- * 週用Rrule規則の繰返し周期チェック
- *
- * @param Model $model モデル変数
- * @param array &$check 入力配列
- * @return bool 成功時true, 失敗時false
- */
- private function __checkWeeklyRepateFreq(Model $model, &$check) {
- $min = ReservationsComponent::CALENDAR_RRULE_INTERVAL_WEEKLY_MIN;
- $max = ReservationsComponent::CALENDAR_RRULE_INTERVAL_WEEKLY_MAX;
- if (!in_array($model->data[$model->alias]['rrule_interval']['WEEKLY'], range($min, $max))) {
- $validationError['rrule_interval'] = array();
- $validationError['rrule_interval']['WEEKLY'] = array();
- $validationError['rrule_interval']['WEEKLY'][] = __d(
- 'reservations', 'Invalid input. (repeat interval: every week)'
- );
- $model->ReservationActionPlan->reservationProofreadValidationErrors = $validationError;
- return false;
- }
-
- // rrule_byday[WEEKLY][N] inList => array('SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA') (複数選択)
- $wdays = explode('|', ReservationsComponent::CALENDAR_REPEAT_WDAY);
- $cnt = 0;
- foreach ($model->data[$model->alias]['rrule_byday']['WEEKLY'] as $wday) {
- if (in_array($wday, $wdays)) {
- ++$cnt;
- }
- }
- if (!($cnt > 0 && $cnt === count($model->data[$model->alias]['rrule_byday']['WEEKLY']))) {
- $validationError['rrule_byday'] = array();
- $validationError['rrule_byday']['WEEKLY'] = array();
- $validationError['rrule_byday']['WEEKLY'][] = __d(
- 'reservations', 'Invalid input. (repeat interval:week)'
- );
- $model->ReservationActionPlan->reservationProofreadValidationErrors = $validationError;
- return false;
- }
- return true;
- }
-
-/**
- * __checkMonthlyRepateFreq
- *
- * 月用Rrule規則の繰返し周期チェック
- *
- * @param Model $model モデル変数
- * @param array &$check 入力配列
- * @return bool 成功時true, 失敗時false
- */
- private function __checkMonthlyRepateFreq(Model $model, &$check) {
- $min = ReservationsComponent::CALENDAR_RRULE_INTERVAL_MONTHLY_MIN;
- $max = ReservationsComponent::CALENDAR_RRULE_INTERVAL_MONTHLY_MAX;
- if (!in_array($model->data[$model->alias]['rrule_interval']['MONTHLY'], range($min, $max))) {
- $validationError['rrule_interval'] = array();
- $validationError['rrule_interval']['MONTHLY'] = array();
- $validationError['rrule_interval']['MONTHLY'][] = __d(
- 'reservations', 'Invalid input. (repeat interbal:every month)'
- );
- $model->ReservationActionPlan->reservationProofreadValidationErrors = $validationError;
- return false;
- }
-
- // rrule_byday[MONTHLY] inList => array('', '1SU', '1MO', '1TU', ... , '4FR, '4SA', '-1SU', '-2SU', ..., '-1SA')
- // または
- // rrule_bymonthday[MONTHLY] inList => array('', 1, 2, ..., 31 );
- $bydayMonthly = $this->_makeArrayOfWdayInNthWeek(); //1SU, ... , -1SA の配列生成
-
- $chkFlag = true;
- if ($model->data[$model->alias]['rrule_byday']['MONTHLY'] === '') {
- //rrule_bymonthdayのMONTHLYが 1, ... ,31 のどれかであること
- if (!in_array($model->data[$model->alias]['rrule_bymonthday']['MONTHLY'], range(1, 31))) {
- $chkFlag = false;
- }
- } elseif ($model->data[$model->alias]['rrule_bymonthday']['MONTHLY'] === '') {
- //rrule_bydayのMONTHLYが 1SU, ... , -1SA のいずれかであること
- if (!in_array($model->data[$model->alias]['rrule_byday']['MONTHLY'], $bydayMonthly)) {
- $chkFlag = false;
- }
- } else {
- //どちらでもないからエラー
- $chkFlag = false;
- }
-
- if (!$chkFlag) {
- //曜日or日付のエラーをrrule_bydayのエラーとして扱う
- $validationError['rrule_byday'] = array();
- $validationError['rrule_byday']['MONTHLY'] = array();
- $validationError['rrule_byday']['MONTHLY'][] = __d(
- 'reservations', 'Invalid input. (rrule error. day of the month or date)'
- );
- $model->ReservationActionPlan->reservationProofreadValidationErrors = $validationError;
- return false;
- }
- return true;
- }
-
-/**
- * __checkYearlyRepateFreq
- *
- * 年用Rrule規則の繰返し周期チェック
- *
- * @param Model $model モデル変数
- * @param array &$check 入力配列
- * @return bool 成功時true, 失敗時false
- */
- private function __checkYearlyRepateFreq(Model $model, &$check) {
- $min = ReservationsComponent::CALENDAR_RRULE_INTERVAL_YEARLY_MIN;
- $max = ReservationsComponent::CALENDAR_RRULE_INTERVAL_YEARLY_MAX;
- if (!in_array($model->data[$model->alias]['rrule_interval']['YEARLY'], range($min, $max))) {
- $validationError['rrule_interval'] = array();
- $validationError['rrule_interval']['YEARLY'] = array();
- $validationError['rrule_interval']['YEARLY'][] = __d(
- 'reservations', 'Invalid input. (rrule error. interval YEARLY)'
- );
- $model->ReservationActionPlan->reservationProofreadValidationErrors = $validationError;
- return false;
- }
-
- if (empty($model->data[$model->alias]['rrule_bymonth']['YEARLY'])) {
- $validationError['rrule_bymonth'] = array();
- $validationError['rrule_bymonth']['YEARLY'] = array();
- $validationError['rrule_bymonth']['YEARLY'][] = __d(
- 'reservations',
- 'Invalid input. (rrule error. Interval of year. there is no specification of the month.)'
- );
- $model->ReservationActionPlan->reservationProofreadValidationErrors = $validationError;
- return false;
- }
-
- // rrule_bymonth[YEARLY][N] inList => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) //n月 (複数選択)
- $months = range(1, 12);
- $cnt = 0;
- foreach ($model->data[$model->alias]['rrule_bymonth']['YEARLY'] as $month) {
- if (in_array($month, $months)) {
- ++$cnt;
- }
- }
- if (!($cnt > 0 && $cnt === count($model->data[$model->alias]['rrule_bymonth']['YEARLY']))) {
- $validationError['rrule_bymonth'] = array();
- $validationError['rrule_bymonth']['YEARLY'] = array();
- $validationError['rrule_bymonth']['YEARLY'][] = __d(
- 'reservations', 'Invalid input. (rrule error. Interval of year, specified month.)'
- );
- $model->ReservationActionPlan->reservationProofreadValidationErrors = $validationError;
- return false;
- }
-
- // rrule_byday[YEARLY] inList => array('', '1SU', '1MO', '1TU', ... , '4FR, '4SA', '-1SU', '-2SU', ..., '-1SA')
- $bydayYearly = $this->_makeArrayOfWdayInNthWeek(); //1SU, ... , -1SA の配列生成
- //年単位の「開始日と同日」(value='')も選択肢の1つなので追加
- $bydayYearly[] = '';
- if (!in_array($model->data[$model->alias]['rrule_byday']['YEARLY'], $bydayYearly)) {
- $validationError['rrule_byday'] = array();
- $validationError['rrule_byday']['YEARLY'] = array();
- $validationError['rrule_byday']['YEARLY'][] = __d(
- 'reservations',
- 'Invalid input. (rrule error. Interval of year. Week of the year unit,week value is invalid.)'
- );
- $model->ReservationActionPlan->reservationProofreadValidationErrors = $validationError;
- return false;
- }
- return true;
- }
-}
diff --git a/Model/Behavior/ReservationValidateBehavior.php b/Model/Behavior/ReservationValidateBehavior.php
deleted file mode 100644
index a664f0e..0000000
--- a/Model/Behavior/ReservationValidateBehavior.php
+++ /dev/null
@@ -1,199 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ModelBehavior', 'Model');
-
-/**
- * ReservationValidate Behavior
- *
- * @package Reservations\Reservations\Model\Befavior
- * @author Allcreator
- */
-class ReservationValidateBehavior extends ModelBehavior {
-
-/**
- * Checks YYYYMMDD format
- *
- * @param Model $model use model
- * @param array $check check date string
- * @return bool
- */
- public function checkYyyymmdd(Model $model, $check) {
- $value = array_values($check);
- $value = $value[0];
-
- $pattern = "/^([0-9]{4})([0-9]{2})([0-9]{2})$/";
- if (!preg_match($pattern, $value)) {
- return false;
- }
- return true;
- }
-
-/**
- * Checks format Ymd
- *
- * @param object $model use model
- * @param array $check check date string
- * @return bool
- */
- public function checkYmd($model, $check) {
- $value = array_values($check);
- $value = $value[0];
-
- $pattern = "/^([0-9]{4})([0-9]{2})([0-9]{2})$/";
- if (!preg_match($pattern, $value)) {
- return false;
- }
- return true;
- }
-
-/**
- * Checks format His
- *
- * @param object $model use model
- * @param array $check check date string
- * @return bool
- */
- public function checkHis($model, $check) {
- $value = array_values($check);
- $value = $value[0];
-
- $pattern = "/^([0-9]{2})([0-9]{2})([0-9]{2})$/";
- if (!preg_match($pattern, $value)) {
- return false;
- }
- return true;
- }
-
-/**
- * Checks date MaxMin
- *
- * @param object $model use model
- * @param array $check 入力配列. Ymd date stringを値にもつ。
- * @param string $edge 'start' or 'end'
- * @return bool
- */
- public function checkMaxMinDate($model, $check, $edge) {
- $value = array_values($check);
- $Ymd = $value[0];
-
- if ((strlen($Ymd)) !== 8) {
- return false;
- }
- //最大・最小に収まるかどうか。
- App::uses('HolidaysAppController', 'Holidays.Controller');
- if ($edge === 'start') {
- if ($Ymd < substr(ReservationTime::stripDashColonAndSp(
- HolidaysAppController::HOLIDAYS_DATE_MIN), 0, 8)) {
- return false;
- }
- } else {
- if ($Ymd > substr(ReservationTime::stripDashColonAndSp(
- HolidaysAppController::HOLIDAYS_DATE_MAX), 0, 8)) {
- return false;
- }
- }
- return true;
- }
-
-/**
- * Checks reverse date
- *
- * @param object $model use model
- * @return bool
- */
- public function checkReverseDate($model) {
- if (strlen($model->data[$model->alias]['start_date']) !== 8 ||
- strlen($model->data[$model->alias]['end_date']) !== 8) {
- return false;
- }
-
- if ($model->data[$model->alias]['start_date'] > $model->data[$model->alias]['end_date']) {
- return false;
- }
- return true;
- }
-
-/**
- * Checks timezone
- *
- * @param object $model use model
- * @param array $check 入力配列. timezone ID
- * @return bool
- */
- public function checkTimezone($model, $check) {
- $value = array_values($check);
- $value = $value[0];
-
- $SiteSetting = new SiteSetting();
- $SiteSetting->prepare();
-
- if (isset($SiteSetting->defaultTimezones[$value])) {
- return true;
- }
- return false;
- //
- //if (!is_numeric($value)) {
- // return false;
- //}
- //$fval = floatval($value);
- //if ($fval < -12.0 || 12.0 < $fval) {
- // return false;
- //}
- //return true;
- }
-
-/**
- * 時刻バリデーション
- *
- * @param Model $model use model
- * @param array $check チェックする値の配列
- * @return bool
- */
- public function validateTime($model, $check) {
- $values = array_values($check);
- $time = $values[0];
-
- if (!preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2} ([0-9]{2}):([0-9]{2}):[0-9]{2}$/',
- $time,
- $matches
- )) {
- return false;
- }
- //list($hour, $min) = explode(':', $time);
- $hour = $matches[1];
- $min = $matches[2];
- if (intval($hour) < 0 || intval($hour) > 24) {
- return false;
- }
- if (intval($min) < 0 || intval($min) > 59) {
- return false;
- }
- return true;
- }
-
-/**
- * 時刻範囲バリデーション
- *
- * @param Model $model use model
- * @param array $check 開始の配列
- * @param string $endKey 終了値の入るキー名
- * @return bool
- */
- public function validateTimeRange($model, $check, $endKey) {
- $values = array_values($check);
- $startTime = $values[0];
-
- $endTime = $model->data[$model->alias][$endKey];
- return ($startTime < $endTime);
- }
-
-}
diff --git a/Model/Behavior/ReservationWeeklyEntryBehavior.php b/Model/Behavior/ReservationWeeklyEntryBehavior.php
deleted file mode 100644
index ca6ee5d..0000000
--- a/Model/Behavior/ReservationWeeklyEntryBehavior.php
+++ /dev/null
@@ -1,289 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('ReservationSupport', 'Reservations.Utility');
-App::uses('ReservationTime', 'Reservations.Utility');
-
-/**
- * ReservationWeeklyEntryBehavior
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationWeeklyEntryBehavior extends ReservationAppBehavior {
-
-/**
- * Default settings
- *
- * @author Noriko Arai
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2015, NetCommons Project
- */
- protected $_defaults = array(
- );
-
-/**
- * 週周期の登録
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams planParams
- * @param ssary $rruleData rruleData
- * @param array $eventData eventデータ(ReservationEventのモデルデータ)
- * @param int $first 最初のデータかどうか 1:最初である 0:最初ではない
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return array $result 結果
- */
- public function insertWeekly(Model $model, $planParams, $rruleData, $eventData,
- $first = 0, $createdUserWhenUpd = null) {
- //CakeLog::debug("DBGXXX: insertWeekly (model, planParams, rruleData, eventData, first[" .
- // $first . "]) start. startDateTime [" . $eventData['ReservationEvent']['start_date'] .
- // $eventData['ReservationEvent']['start_time'] . "] endDateTime[" .
- // $eventData['ReservationEvent']['end_date'] . $eventData['ReservationEvent']['end_time'] . "]");
-
- //ユーザタイムゾーンを取得しておく。
- $userTz = (new NetCommonsTime())->getUserTimezone();
-
- // 開始日と終了日の週の日曜日の日付時刻および現在週のセット
- $currentWeek = '';
- $this->setStartEndSundayDateAndTime($model, $eventData, $currentWeek, $first, $userTz);
-
- //CakeLog::debug("DBGXXX: after setStartEndSundayDateAndTime(). startDateTime [" .
- // $eventData['ReservationEvent']['start_date'] . $eventData['ReservationEvent']['start_time'] .
- // "] endDateTime[" . $eventData['ReservationEvent']['end_date'] .
- // $eventData['ReservationEvent']['end_time'] . "]");
-
- //setStartEndSundayDateAndTime()の中で、インターバル値を加算した サーバー系時刻
- //start_date,start_time, end_date, end_timeを$eventData['ReservationEvent']の該当項目に
- //代入しているので、そのまま、isRepeatable()の引数としてつかってOK.
- $result = ReservationSupport::isRepeatable(
- $model->rrule,
- ($eventData['ReservationEvent']['start_date'] . $eventData['ReservationEvent']['start_time']),
- $eventData['ReservationEvent']['timezone'],
- $model->isOverMaxRruleIndex
- );
- if (! $result) {
- return true;
- }
-
- foreach ($model->rrule['BYDAY'] as $val) {
- $index = array_search($val, self::$reservationWdayArray);
- //CakeLog::debug("DBGX: array_search(" . $val . ") returned index[" . $index . "]");
- if ($first && $currentWeek >= $index) {
- //CakeLog::debug("DBGX: continue case. first[" . $first .
- //"] is TRUE and currentWeek[" . $currentWeek . "] >= index[" . $index . "]");
- continue;
- }
- //insertWeeklyInterval()のinsert結果は、$eventDataにセットされる。
- $result = $this->insertWeeklyInterval($model, $planParams, $rruleData, $eventData,
- $index, $userTz, $createdUserWhenUpd);
- if ($result === false) {
- //CakeLog::debug("DBGX: insertWeeklyInterval() returned FALSE. so i will return.");
- return $result;
- }
- }
-
- //NC3では内部はサーバー系時刻なのでtimezoneDate変換は不要
- //
- //$startTime = $eventData['ReservationEvent']['start_date'] . $eventData['ReservationEvent']['start_time'];
- //$endTime = $eventData['ReservationEvent']['end_date'] . $eventData['ReservationEvent']['end_time'];
- //
- //$eventData['ReservationEvent']['start_date'] = ReservationTime::timezoneDate($startTime, 1, 'Ymd');
- //$eventData['ReservationEvent']['start_time'] = ReservationTime::timezoneDate($startTime, 1, 'His');
- //$eventData['ReservationEvent']['end_date'] = ReservationTime::timezoneDate($endTime, 1, 'Ymd');
- //$eventData['ReservationEvent']['end_time'] = ReservationTime::timezoneDate($endTime, 1, 'His');
-
- return $this->insertWeekly($model, $planParams, $rruleData, $eventData,
- 0, $createdUserWhenUpd);
- }
-
-/**
- * インターバル用週周期の登録
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams planParams
- * @param ssary $rruleData rruleData
- * @param array $eventData eventデータ(ReservationEventのモデルデータ).
- * @param int $interval インターバル
- * @param string $userTz ユーザー系TZID(Asia/Tokyo)
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return array $result 結果
- */
- public function insertWeeklyInterval(Model $model, $planParams, $rruleData, $eventData,
- $interval, $userTz, $createdUserWhenUpd = null) {
- //CakeLog::debug("DBGX: insertWeeklyInterval(model, planParams, rruleData, eventData, interval[" . $interval . "] userTz[". $userTz . "] eventData[ReservationEvent]=startDateTime [" . $eventData['ReservationEvent']['start_date'] . $eventData['ReservationEvent']['start_time'] . "] endDateTime[" . $eventData['ReservationEvent']['end_date'] . $eventData['ReservationEvent']['end_time'] . "]) start");
-
- $model->rrule['INDEX']++;
-
- //インターバル日数を加算した開始日の計算
- //sTimeはサーバー系時刻
- $sTime = $eventData['ReservationEvent']['start_date'] .
- $eventData['ReservationEvent']['start_time'];
-
- //以下で使う時間系は、画面上(=ユーザー系)でのカレンダ日付時刻をさしているので、
- //ユーザー系に直す。
- //
- $userStartTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($sTime));
- $userStartTime = ReservationTime::dt2calDt($userStartTime);
-
- //ユーザー系開始の同年同月の$interval考慮日のタイムスタンプを取得
- $date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザー系DateTimeObj生成
- $date->setDate(substr($userStartTime, 0, 4),
- substr($userStartTime, 4, 2), substr($userStartTime, 6, 2) + $interval);
- $date->setTime(substr($userStartTime, 8, 2),
- substr($userStartTime, 10, 2), substr($userStartTime, 12, 2));
- $timestamp = $date->getTimestamp();
- $date->setTimeZone(new DateTimeZone('UTC')); //サーバー系TZに直す
- $svrStartDate = $date->format('Ymd');
- $svrStartTime = $date->format('His');
-
- //CakeLog::debug("DBGX: BEFORE eventData[start_date]+[start_time][" .
- // $eventData['ReservationEvent']['start_date'] . $eventData['ReservationEvent']['start_time'] .
- // "] >> sTime[" . $sTime . "] >> AFTER timestamp[" . $timestamp . "] svrStartDate[" .
- // $svrStartDate . "] svrStartTime[" . $svrStartTime . "]");
-
- //インターバル日数を加算した終了日の計算
- //eTimeはサーバー系時刻
- $eTime = $eventData['ReservationEvent']['end_date'] . $eventData['ReservationEvent']['end_time'];
-
- //以下で使う時間系は、画面上(=ユーザー系)でのカレンダ日付時刻をさしているので、
- //ユーザー系に直す。
- //
- $userEndTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($eTime));
- $userEndTime = ReservationTime::dt2calDt($userEndTime);
-
- //ユーザー系終了の同年同月の$interval考慮日のタイムスタンプを取得
- $date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザー系DateTimeObj生成
- $date->setDate(substr($userEndTime, 0, 4),
- substr($userEndTime, 4, 2), substr($userEndTime, 6, 2) + $interval);
- $date->setTime(substr($userEndTime, 8, 2),
- substr($userEndTime, 10, 2), substr($userEndTime, 12, 2));
- $timestamp = $date->getTimestamp();
- $date->setTimeZone(new DateTimeZone('UTC')); //サーバー系TZに直す
- $svrEndDate = $date->format('Ymd');
- $svrEndTime = $date->format('His');
-
- if (!ReservationSupport::isRepeatable($model->rrule, ($svrStartDate . $svrStartTime),
- $eventData['ReservationEvent']['timezone'], $model->isOverMaxRruleIndex)) {
- return true;
- }
-
- //CakeLog::debug("DBGXXX: insert(svrStartDateTime[" . $svrStartDate . $svrStartTime .
- // "] svrEndDateTime[" . $svrEndDate . $svrEndTime . "])");
-
- $rEventData = $this->insert($model, $planParams, $rruleData, $eventData,
- ($svrStartDate . $svrStartTime), ($svrEndDate . $svrEndTime), $createdUserWhenUpd);
- if ($rEventData['ReservationEvent']['id'] === null) {
- //CakeLog::debug("DBGX: insert() returned id[NULL]. so i return FALSE");
- return false;
- } else {
- //CakeLog::debug("DBGX: insert() returned id[" . $rEventData['ReservationEvent']['id'] .
- // "]. so i return TRUE");
- //insertした結果の$rEventDataは(eventDataとして)call元へもどす
- //(代入する)必要は、ありません。逆に、eventDataに代入してしま
- //うと、call元のLOOP foreach ($model->rrule['BYDAY'] as $val)
- //の中で日のずれが発生しまうので注意すること。
- return true;
- }
- }
-
-/**
- * 開始日と終了日の週の日曜日の日付時刻のセット
- * 結果は、$eventData['ReservationEvent']のstart_date,time,end_date,timeにサーバ系時刻を
- * セットして返す。
- *
- * @param Model $model モデル
- * @param array &$eventData eventデータ
- * @param string &$currentWeek currnetWeek文字列
- * @param int $first 最初のデータかどうか 1:最初である 0:最初ではない
- * @param string $userTz ユーザー系TZ文字列(Asia/Tokyo)
- * @return void
- */
- public function setStartEndSundayDateAndTime($model, &$eventData, &$currentWeek,
- $first, $userTz) {
- //開始日の週の日曜日の日付時刻
- //NC3ではサーバー系時刻なので、timezoneDateはつかわない
- $sTime = $eventData['ReservationEvent']['start_date'] .
- $eventData['ReservationEvent']['start_time']; //cat してYmdHisにする
-
- //以下で使う時間系は施設予約画面上(=ユーザー系)でのカレンダ
- //日付時刻をさしているので、ユーザー系に直す。
- //
- $userStartTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($sTime));
- $userStartTime = ReservationTime::dt2calDt($userStartTime);
-
- //ユーザー系開始日の同年同月の日+インターバール(0 or rrule[INTERVAL]の7の倍数)
- //日数のタイムスタンプを取得
- $date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザー系DateTimeObj生成
- $date->setDate(substr($userStartTime, 0, 4), substr($userStartTime, 4, 2),
- substr($userStartTime, 6, 2) + ($first ? 0 : (7 * $model->rrule['INTERVAL'])));
- $date->setTime(substr($userStartTime, 8, 2),
- substr($userStartTime, 10, 2), substr($userStartTime, 12, 2));
- $timestamp = $date->getTimestamp();
- //施設予約上(=ユーザ系)の日の曜日idx(0-6)取得
- $currentWeek = $date->format('w');
-
- //ユーザー系の開始日(または開始日+インターバイル日数)の週の日曜日を求める。
- $sundayTimestamp = $timestamp - $currentWeek * 86400;
-
- //ユーザー系開始の日曜日を、サーバー系TZに変えてから、YmdとHisを取得し、
- //eventData[ReservationEvent]のstart_date, start_timeに代入する。
- $date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザー系DateTimeObj生成
- $date->setTimestamp($sundayTimestamp); //ユーザー系日曜日のtimestamp
- $date->setTimeZone(new DateTimeZone('UTC')); //サーバー系TZに直す
- $svrStartDate = $date->format('Ymd');
- $svrStartTime = $date->format('His');
- $eventData['ReservationEvent']['start_date'] = $svrStartDate;
- $eventData['ReservationEvent']['start_time'] = $svrStartTime;
-
- //CakeLog::debug("DBGX: BEFORE eventData[start_date]+[start_time][" .
- // $eventData['ReservationEvent']['start_date'] . $eventData['ReservationEvent']['start_time'] .
- // "] >> sTime[" . $sTime . "] >> AFTER timestamp[" . $timestamp . "] currentWeek[" .
- // $currentWeek . "] sundayTimestamp[" . $sundayTimestamp . "] SUNサーバ系start_date[" .
- // $svrStartDate . "] start_time[" . $svrStartTime . "]");
-
- //終了日の週の日曜日の日付時刻
- //NC3ではサーバー系時刻なので、timezoneDateはつかわない
- //catしてYmdHisにする
- $eTime = $eventData['ReservationEvent']['end_date'] . $eventData['ReservationEvent']['end_time'];
-
- //以下で使う時間系は施設予約画面上(=ユーザー系)でのカレンダ
- //日付時刻をさしているので、ユーザー系に直す。
- //
- $userEndTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($eTime));
- $userEndTime = ReservationTime::dt2calDt($userEndTime);
-
- //ユーザー系終了日の同年同月の日+インターバール(0 or rrule[INTERVAL]の7の
- //倍数)日数のタイムスタンプを取得
- $date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザー系DateTimeObj生成
- $date->setDate(substr($userEndTime, 0, 4),
- substr($userEndTime, 4, 2),
- substr($userEndTime, 6, 2) + ($first ? 0 : (7 * $model->rrule['INTERVAL'])));
- $date->setTime(substr($userEndTime, 8, 2),
- substr($userEndTime, 10, 2), substr($userEndTime, 12, 2));
- $endTimestamp = $date->getTimestamp();
-
- //終了日(または終了日+インターバル日数)の週の日曜日を求める。
- $endSundayTimestamp = $endTimestamp - $currentWeek * 86400;
-
- //ユーザー系終了の日曜日を、サーバー系TZに変えてから、YmdとHisを取得し、
- //eventData[ReservationEvent]のend_date, end_timeに代入する。
- $date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザー系DateTimeObj生成
- $date->setTimestamp($endSundayTimestamp); //ユーザー系日曜日のtimestamp
- $date->setTimeZone(new DateTimeZone('UTC')); //サーバー系TZに直す
- $svrEndDate = $date->format('Ymd');
- $svrEndTime = $date->format('His');
- $eventData['ReservationEvent']['end_date'] = $svrEndDate;
- $eventData['ReservationEvent']['end_time'] = $svrEndTime;
- }
-}
diff --git a/Model/Behavior/ReservationWorkflowBehavior.php b/Model/Behavior/ReservationWorkflowBehavior.php
deleted file mode 100644
index 9a15ea1..0000000
--- a/Model/Behavior/ReservationWorkflowBehavior.php
+++ /dev/null
@@ -1,140 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-App::uses('WorkflowBehavior', 'Workflow.Model/Behavior');
-
-/**
- * Class ReservationWorkflowBehavior
- */
-class ReservationWorkflowBehavior extends WorkflowBehavior {
-
-/**
- * beforeValidate is called before a model is validated, you can use this callback to
- * add behavior validation rules into a models validate array. Returning false
- * will allow you to make the validation fail.
- *
- * @param Model $model Model using this behavior
- * @param array $options Options passed from Model::save().
- * @return mixed False or null will abort the operation. Any other result will continue.
- * @see Model::save()
- */
- public function beforeValidate(Model $model, $options = array()) {
- // statusのバリデーションはスルー
- }
-
-/**
- * Get workflow conditions
- *
- * @param Model $model Model using this behavior
- * @param array $conditions Model::find conditions default value
- * @param bool $useCommentCreatable コメントの作成権限でもチェックするかどうか
- * @return array Conditions data
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- */
- public function getWorkflowConditions(
- Model $model,
- $conditions = array(),
- $useCommentCreatable = false
- ) {
- // is_active = 1は常に表示
- $activeConditions = [
- $model->alias . '.is_active' => true,
- ];
- // latestは自分の予約か公開待ち
- $latestConditons = [
- $model->alias . '.is_latest' => true,
- 'OR' => [
- $model->alias . '.status' => WorkflowComponent::STATUS_APPROVAL_WAITING,
- $model->alias . '.created_user' => Current::read('User.id')
- ]
- ];
-
- if ($model->hasField('language_id')) {
- if (Current::read('Plugin.is_m17n') === false && $model->hasField('is_origin')) {
- $langConditions = array(
- $model->alias . '.is_origin' => true,
- );
- } elseif ($model->hasField('is_translation')) {
- $langConditions = array(
- 'OR' => array(
- $model->alias . '.language_id' => Current::read('Language.id'),
- $model->alias . '.is_translation' => false,
- )
- );
- } else {
- $langConditions = array(
- $model->alias . '.language_id' => Current::read('Language.id'),
- );
- }
- } else {
- $langConditions = array();
- }
-
- $conditions = [
- $langConditions,
- 'OR' => [
- $activeConditions,
- $latestConditons
- ],
- $conditions
- ];
-
- return $conditions;
- }
-
-/**
- * Get workflow contents
- *
- * @param Model $model Model using this behavior
- * @param string $type Type of find operation (all / first / count / neighbors / list / threaded)
- * @param array $query Option fields (conditions / fields / joins / limit / offset / order / page / group / callbacks)
- * @param bool $useCommentCreatable コメントの作成権限でもチェックするかどうか
- * @return array Conditions data
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- */
- public function getWorkflowContents(
- Model $model,
- $type,
- $query = array(),
- $useCommentCreatable = false
- ) {
- //$this->log(var_export(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 5), true), 'debug');
-
- $query = Hash::merge(array(
- 'recursive' => -1,
- 'conditions' => $this->getWorkflowConditions($model, [], $useCommentCreatable)
- ), $query);
-
- return $model->find($type, $query);
- }
-
-/**
- * コンテンツの編集権限があるかどうかのチェック
- * - 編集権限あり(content_editable)
- * - 自分自身のコンテンツ
- *
- * @param Model $model Model using this behavior
- * @param array $data コンテンツデータ
- * @return bool true:編集可、false:編集不可
- */
- public function canEditWorkflowContent(Model $model, $data) {
- // ε( v ゚ω゚) < ReservationEventで使われてる
- if (Current::permission('content_editable')) {
- return true;
- }
- if (! isset($data[$model->alias])) {
- $data[$model->alias] = $data;
- }
- if (! isset($data[$model->alias]['created_user'])) {
- return false;
- }
- return ((int)$data[$model->alias]['created_user'] === (int)Current::read('User.id'));
- }
-}
\ No newline at end of file
diff --git a/Model/Behavior/ReservationYearlyEntryBehavior.php b/Model/Behavior/ReservationYearlyEntryBehavior.php
deleted file mode 100644
index 22e1a2b..0000000
--- a/Model/Behavior/ReservationYearlyEntryBehavior.php
+++ /dev/null
@@ -1,644 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationAppBehavior', 'Reservations.Model/Behavior');
-App::uses('ReservationSupport', 'Reservations.Utility');
-App::uses('ReservationTime', 'Reservations.Utility');
-
-/**
- * ReservationYearlyEntryBehavior
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Model\Behavior
- */
-class ReservationYearlyEntryBehavior extends ReservationAppBehavior {
-
-/**
- * Default settings
- *
- * @author Noriko Arai
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2015, NetCommons Project
- */
- protected $_defaults = array(
- );
-
-/**
- * 年周期の登録
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams planParams
- * @param ssary $rruleData rruleData
- * @param array $eventData eventデータ(ReservationEventのモデルデータ)
- * @param int $first 最初のデータかどうか 1:最初である 0:最初ではない
- * @param int $bymonthday bymonthday
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return array $result 結果
- */
- public function insertYearly(Model $model, $planParams, $rruleData, $eventData,
- $first = 0, $bymonthday = 0, $createdUserWhenUpd = null) {
- //CakeLog::debug("DBG: insertYearly(first[" . $first . "] bymonthday[" . $bymonthday . "] start.");
-
- //ユーザタイムゾーンを取得しておく。
- $userTz = (new NetCommonsTime())->getUserTimezone();
-
- //setStartEndDateAndTime()が返す日と時はサーバー系
- list($startDate, $startTime, $endDate, $endTime, $diffNum) =
- $this->setStartEndDateAndTime($model, $eventData, $first, $userTz);
- //CakeLog:debug("DBG: setStartEndDateAndTime()の結果. startDate[" . $startDate .
- // "] startTime[" . $startTime . "] endDate[" . $endDate . "] endTime[" . $endTime .
- // "] diffNum[" . $diffNum . "]");
-
- //CakeLog::debug("DBG: before isRepeatable(). startDateTime[" .
- // $startDate . $startTime . "]");
-
- if (!ReservationSupport::isRepeatable($model->rrule,
- ($startDate . $startTime), $eventData['ReservationEvent']['timezone'],
- $model->isOverMaxRruleIndex)) {
- //CakeLog::debug("DBG: isRepeatable() がFALSEを返した. よって復帰する.");
- //insertYearly()は再帰callされるが、ここ(isRepeatable()===falseになった時、復帰する。
- return true;
- }
-
- if ($first && empty($model->rrule['BYDAY'])) { //rrule['BYDAY']は配列です
- //サーバー系時刻の文字列から日の部分をそのまま切り出し$monthdayとして
- //使うことはできない。なぜなら、monthdayの日は、施設予約上(=ユー
- //ザ系)が代入されることを前提しているため。よって、ユーザー系になおして
- //から、monthdayを代入する。
- //
- $userStartDateTime = (new NetCommonsTime())->toUserDatetime(
- ReservationTime::calDt2dt($startDate . $startTime));
- $userStartDateTime = ReservationTime::dt2calDt($userStartDateTime);
-
- //最初で、かつ、日の間隔ルールがないなら、ユーザー系開始日付時刻の日
- //をbymonthdayとする。
- $bymonthday = intval(substr($userStartDateTime, 6, 2));
- //CakeLog::debug("DBG: rrule[BYDAY] is EMPTY! bymonthday[" . $bymonthday . "]");
- }
-
- $startDateTime = $endDateTime = '';
- $dtArray = array($startDate, $startTime, $endDate, $endTime);
-
- //CakeLog::debug("DBG: before setStartAndEndDateTimeEtc() first[" . $first .
- // "] bymonthday[" . $bymonthday . "] diffNum[" . $diffNum . "] userTz[" . $userTz . "]");
-
- $etcArray = array($userTz, $createdUserWhenUpd);
- $ret = $this->setStartAndEndDateTimeEtc($model, $planParams,
- $rruleData, $dtArray, $first, $bymonthday, $diffNum, $eventData, $etcArray);
-
- if ($ret === false) {
- //CakeLog::debug(
- // "DBG: setStartAndEndDateTimeEtc()がFALSEを返したので、return falseします。");
- return false;
- }
- //startDateTime,endDateTimeはサーバー系時刻YmdHisで返ってくる。
- list($eventData, $startDateTime, $endDateTime) = $ret;
-
- //CakeLog::debug("DBG: after setStartAndEndDateTimeEtc()結果. startDateTime[" .
- // $startDateTime . "] endDateTime[" . $endDateTime . "]");
-
- //
- //eventDataの開始・終了の日付と時刻を更新するしてから、insertYearly()を再帰callする。
- //
- //NC3では内部はサーバ系日付時刻なので、timezoneDateはつかわず、YmdHisを単純にYmdとHisに分割する。
- $eventData['ReservationEvent']['start_date'] = substr($startDateTime, 0, 8);
- $eventData['ReservationEvent']['start_time'] = substr($startDateTime, 8);
- $eventData['ReservationEvent']['end_date'] = substr($endDateTime, 0, 8);
- $eventData['ReservationEvent']['end_time'] = substr($endDateTime, 8);
-
- //CakeLog::debug("DBG: eventData[ReservationEvent]の各項目。start_date[" .
- // $eventData['ReservationEvent']['start_date'] . "] start_time[" .
- // $eventData['ReservationEvent']['start_time'] . "] end_date[" .
- // $eventData['ReservationEvent']['end_date'] . "] end_time[" .
- // $eventData['ReservationEvent']['end_time'] . "]");
-
- if (!empty($model->rrule['BYDAY']) && count($model->rrule['BYDAY']) > 0) {
-
- //CakeLog::debug("DBG: rrule[BYDAY]がemptyで無く、且つ、rrule[BYDAY]の要素数[" .
- // count($model->rrule['BYDAY']) . "]が0より大きい時の、insertYearly() 再帰call.");
-
- //insertYearly()の再帰call ケース1
- return $this->insertYearly($model, $planParams, $rruleData, $eventData,
- 0, 0, $createdUserWhenUpd);
- } else {
-
- //CakeLog::debug("DBG: もう一方の時の、insertYearly() 再帰call. 0 bymonthday[" .
- // $bymonthday . "]");
-
- //insertYearly()の再帰call ケース2
- return $this->insertYearly($model, $planParams, $rruleData, $eventData,
- 0, $bymonthday, $createdUserWhenUpd);
- }
- }
-
-/**
- * 開始と終了の日付、時刻の生成
- *
- * @param Model $model モデル
- * @param array $eventData event配列データ
- * @param int $first 最初のデータかどうか. 1:最初 0:最初ではない
- * @param string $userTz ユーザー系タイムゾーンID ('Asia/Tokyo')
- * @return array サーバー系の各日と時と差分日数の配列($startDate, $startTime, $endDate, $endTime, $diffNum)を返す
- */
- public function setStartEndDateAndTime(Model $model, $eventData, $first, $userTz) {
- //NC3では内部はサーバー系時刻になっているのでtimezoneDateはつかわない。
- $sTime = $eventData['ReservationEvent']['start_date'] .
- $eventData['ReservationEvent']['start_time']; //catしてYmdHisにする
- $eTime = $eventData['ReservationEvent']['end_date'] .
- $eventData['ReservationEvent']['end_time']; //catしてYmdHisにする
-
- //以下で使うmkdateの「1日00:00:00」とは、画面上(=ユーザー系)でのカレンダ
- //日付時刻をさしているので、ユーザー系に直す。
- //
- $userStartTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($sTime));
- $userStartTime = ReservationTime::dt2calDt($userStartTime);
- $userEndTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($eTime));
- $userEndTime = ReservationTime::dt2calDt($userEndTime);
-
- $date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザー系TZでDateTimeObj生成
- $date->setDate(substr($userStartTime, 0, 4),
- substr($userStartTime, 4, 2), substr($userStartTime, 6, 2));
- $date->setTime(0, 0, 0);
- $startTimestamp = $date->getTimestamp();
-
- $date->setDate(substr($userEndTime, 0, 4),
- substr($userEndTime, 4, 2), substr($userEndTime, 6, 2));
- $date->setTime(0, 0, 0);
- $endTimestamp = $date->getTimestamp();
-
- //ユーザー系開始日付(00:00:00)と終了日付(00:00:00)のタイムスタンプから、その「差分日数」を計算する。
- //
- $diffNum = ($endTimestamp - $startTimestamp) / 86400; // a
-
- if ($first) {
- //初回の時は、userStartTime, userEneTimeのタイムスタンプをそのまま使う。
- //
- $date->setDate(substr($userStartTime, 0, 4),
- substr($userStartTime, 4, 2), substr($userStartTime, 6, 2));
- $date->setTime(substr($userStartTime, 8, 2),
- substr($userStartTime, 10, 2), substr($userStartTime, 12, 2));
- $startTimestamp = $date->getTimestamp();
-
- $date->setDate(substr($userEndTime, 0, 4),
- substr($userEndTime, 4, 2), substr($userEndTime, 6, 2));
- $date->setTime(substr($userEndTime, 8, 2),
- substr($userEndTime, 10, 2), substr($userEndTime, 12, 2));
- $endTimestamp = $date->getTimestamp();
-
- } else {
- //2回目以降は、startTimestampはインターバル考慮した年の1月1日
- //endTimestampはインターバル考慮した年の1月(1+差分日数(a))日
- //
- $date->setDate(substr($userStartTime, 0, 4) + $model->rrule['INTERVAL'], 1, 1);
- $date->setTime(substr($userStartTime, 8, 2),
- substr($userStartTime, 10, 2), substr($userStartTime, 12, 2));
- $startTimestamp = $date->getTimestamp();
-
- $date->setDate(substr($userEndTime, 0, 4) + $model->rrule['INTERVAL'], 1, 1 + $diffNum);
- $date->setTime(substr($userEndTime, 8, 2),
- substr($userEndTime, 10, 2), substr($userEndTime, 12, 2));
- $endTimestamp = $date->getTimestamp();
- }
-
- //TZをユーザー系からサーバー系に切り替える
- $date->setTimeZone(new DateTimeZone('UTC'));
- $date->setTimestamp($startTimestamp);
- $startDate = $date->format('Ymd');
- $startTime = $date->format('His');
-
- $date->setTimestamp($endTimestamp);
- $endDate = $date->format('Ymd');
- $endTime = $date->format('His');
-
- return array($startDate, $startTime, $endDate, $endTime, $diffNum);
- }
-
-/**
- * 開始・終了の日付と時刻等をセットする。
- *
- * @param Model $model モデル
- * @param array $planParams planParams
- * @param array $rruleData rruleData
- * @param array $dtArray サーバ系時刻startDate,startTime,endDate,endTimeをカプセル化した配列
- * @param int $first first 最初かどうか。1:最初 0:最初でない
- * @param int $bymonthday bymonthday 毎月x日のx日のこと(ユーザー系の日であることに注意すること)
- * @param int $diffNum diffNum開始日と終了日の差分日数
- * @param array $eventData eventData配列データ
- * @param array $etcArray userTz(ユーザー系タイムゾーンID)とcreatedUserWhenUpdをカブセル化した配列
- * @return mixed 成功時、array($eventData, サーバ系時刻$startDateTime, サーバ系時刻$endDateTime)を返す。失敗時 falseを返す。
- */
- public function setStartAndEndDateTimeEtc(Model $model, $planParams, $rruleData,
- $dtArray, $first, $bymonthday, $diffNum, $eventData, $etcArray) {
- list($startDate, $startTime, $endDate, $endTime) = $dtArray;
- list($userTz, $createdUserWhenUpd) = $etcArray;
-
- $result = true;
- $userStartDateTime = (new NetCommonsTime())->toUserDatetime(
- ReservationTime::calDt2dt($startDate . $startTime));
- $userStartDateTime = ReservationTime::dt2calDt($userStartDateTime);
-
- //ユーザー系開始日付の月を、現在の月とする。
- $currentMonth = intval(substr($userStartDateTime, 4, 2));
- foreach ($model->rrule['BYMONTH'] as $month) {
- //currentMonthはユーザー系の月、一方rrule['BYMONTH']の配列値($month)も
- //ユーザー系の月。よって、比較してもOK.
- if ($first && $currentMonth > $month) {
- continue;
- }
-
- ////$this->setDtStartendData($first, $currentMonth, $month, $startDate, $startTime, $endDate, $endTime, $diffNum, $userTz, $eventData);
- $workParams = array($first, $currentMonth, $month, $startDate, $startTime,
- $endDate, $endTime, $diffNum, $userTz);
- $this->setDtStartendData($workParams, $eventData);
-
- if (!empty($model->rrule['BYDAY']) && count($model->rrule['BYDAY']) > 0) {
- $result = $this->insertYearlyByday($model, $planParams, $rruleData, $eventData,
- $first, $createdUserWhenUpd);
- } else {
- $result = $this->insertYearlyByMonthday($model, $planParams, $rruleData, $eventData,
- $bymonthday, $first, $createdUserWhenUpd);
- }
- if ($result === false) {
- return false;
- }
- }
- $startDateTime = $startDate . $startTime;
- $endDateTime = $endDate . $endTime;
- if (is_array($result)) {
- list($eventData, $startDateTime, $endDateTime) = $result;
- }
-
- return array($eventData, $startDateTime, $endDateTime);
- }
-
-/**
- * eventDataへのデータセット
- *
- * @param array $workParams 各種変数を格納しているwork配列
- * @param array &$eventData eventData
- * @return void
- */
- public function setDtStartendData($workParams, &$eventData) {
- //work配列より、以下の変数を復元
- //
- //int $first 初回かどうか (1:初回 0:2回目以降)
- //int $currentMonth currentMonth ユーザー系のカレント月
- //int $month month ユーザー系の月
- //string $startDate startDate サーバー系開始日のYmd
- //string $startTime startTime サーバ系開始日のHis
- //string $endDate endDate サーバー系終了日のYmd
- //string $endTime endTime サーバー系終了日のHis
- //int $diffNum diffNum
- //string $userTz ユーザー系タイムゾーンID ('Asia/Tokyo')
- list($first, $currentMonth, $month, $startDate, $startTime, $endDate, $endTime,
- $diffNum, $userTz) = $workParams;
-
- if ($first && $currentMonth == $month) {
- //startDate,startTime,endDate,endTimeはすべてサーバー系なので直接
- //$eventData['ReservationEvent']の該当項目に直接代入する。
- //
- $eventData['ReservationEvent']['start_date'] = $startDate;
- $eventData['ReservationEvent']['start_time'] = $startTime;
- $eventData['ReservationEvent']['end_date'] = $endDate;
- $eventData['ReservationEvent']['end_time'] = $endTime;
- } else {
- //startDate,startTime,endDate,endTimeはサーバー系時間であり、施設予約上
- //(=ユーザー系)の時間ベースで日付加工していたNC2ベースのロジックでは、
- //時差分の誤差がでる。依って、一旦ユーザー系に変換し、日付加工処理を行ない
- //その結果を、サーバー系時間に戻してからeventData['ReservationEvent']の該当
- //項目に代入する。
-
- //まずは、start,endをユーザー系に直しておく。
- $userStartDateTime = (new NetCommonsTime())->toUserDatetime(
- ReservationTime::calDt2dt($startDate . $startTime));
- $userStartDateTime = ReservationTime::dt2calDt($userStartDateTime);
- $userEndDateTime = (new NetCommonsTime())->toUserDatetime(
- ReservationTime::calDt2dt($endDate . $endTime));
- $userEndDateTime = ReservationTime::dt2calDt($userEndDateTime);
-
- //ユーザー系の開始日の年&指定月1日を生成し、サーバー系に変換後、$eventData['ReservationEvent']の
- //start_dateとstart_time項目に代入する。
- //
- $date = new DateTime('now', new DateTimeZone($userTz));
- $date->setDate(substr($userStartDateTime, 0, 4), $month, 1);
- $date->setTime(substr($userStartDateTime, 8, 2),
- substr($userStartDateTime, 10, 2), substr($userStartDateTime, 12, 2));
- $date->setTimeZone(new DateTimeZone('UTC')); //サーバー系TZに変換する
- $eventData['ReservationEvent']['start_date'] = $date->format('Ymd');
- $eventData['ReservationEvent']['start_time'] = $date->format('His');
-
- //ユーザー系の開始日の年&指定月の(1+差分日数)日+ユーザー系終了日の時刻を生成し、
- //サーバー系に変換後、$eventData['ReservationEvent']のend_dateとend_time項目に代入する。
- //
- $date = new DateTime('now', new DateTimeZone($userTz));
- $date->setDate(substr($userStartDateTime, 0, 4), $month, 1 + $diffNum);
- $date->setTime(substr($userEndDateTime, 8, 2),
- substr($userEndDateTime, 10, 2), substr($userEndDateTime, 12, 2));
- $date->setTimeZone(new DateTimeZone('UTC')); //サーバー系TZに変換する
- $eventData['ReservationEvent']['end_date'] = $date->format('Ymd');
- $eventData['ReservationEvent']['end_time'] = $date->format('His');
- }
- }
-
-/**
- * 年周期の登録(年単位-開始日と同日)
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams planParams
- * @param array $rruleData rruleData
- * @param array $eventData eventデータ(ReservationEventのモデルデータ)
- * @param int $bymonthday bymonthday
- * @param int $first 最初のデータかどうか 1:最初である 0:最初ではない
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return mixed boolean true:登録せず終了 false:失敗、array 登録成功: array(insertした結果のrEventData, 登録したサーバ系開始年月日時分秒, 登録したサーバ系終了年月日時分秒)
- */
- public function insertYearlyByMonthday(Model $model, $planParams, $rruleData, $eventData,
- $bymonthday, $first, $createdUserWhenUpd = null) {
- //CakeLog::debug("DBG: insertYearlyByMonthday() start. bymonthday[" . $bymonthday .
- // "] first[" . $first . "] rrule[INDEX]=[" . $model->rrule['INDEX'] . "]");
-
- $model->rrule['INDEX']++;
-
- //ユーザタイムゾーンを取得しておく。
- $userTz = (new NetCommonsTime())->getUserTimezone();
-
- //開始日付時刻の処理
- $userStartTime = $userEndTime = $firstNumOfDaysOfMth = '';
- $startTimestamp = $endTimestamp = $currentDay = $intervalDay = 0;
-
- $this->__setYearlyByMonthdayStartDtProc($eventData, $userStartTime, $startTimestamp,
- $currentDay, $firstNumOfDaysOfMth, $bymonthday, $first, $intervalDay, $userTz);
- //CakeLog::debug("DBG: bymonthday[" . $bymonthday . "] firstNumOfDaysOfMth[" .
- // $firstNumOfDaysOfMth . "] intervalDay[" . $intervalDay . "]");
-
- //CakeLog::debug("DBG: call復帰条件: first [" . $first . "] currentDay[" . $currentDay .
- // "] bymonthday[" . $bymonthday . "]");
-
- //call復帰条件のチェック
- if ($first && $currentDay >= $bymonthday) {
- //CakeLog::debug("DBG: 復帰条件 (first && currentDay >= bymonthday) が" .
- // "真になったので、call復帰します。");
-
- //現在日が毎月x日のx日を超したら、行き過ぎなので、INDEXをデクリメントして、callから復帰する。
- $model->rrule['INDEX']--;
- return true;
- }
-
- //終了日付時刻の処理
- $this->__setYearlyByMonthdayEndDtProc($eventData, $userTz, $userEndTime, $endTimestamp);
-
- //開始日と終了日の差分日数の計算
- $diffNum = ($endTimestamp - $startTimestamp) / 86400;
-
- //毎月x日のx日を考慮した開始日付時刻の実日付時刻を計算
- //
- //(毎月x日のx日が、開始日の日と同じかより後ならその差分の日数(=インターバル日数)を引くので、開始日の日をつかった実日数計算になる。)
- //(毎月x日のx日が、開始日の日より前ならその差分の日数(=インターバル日数)は0なので、毎月x日のx日をつかった実日数計算になる。)
- //
- ////$date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザー系TZのDateTimeObjを生成
- ////$date->setDate(substr($userStartTime, 0, 4),
- //// substr($userStartTime, 4, 2), $bymonthday - $intervalDay);
- ////$date->setTime(substr($userStartTime, 8, 2),
- //// substr($userStartTime, 10, 2), substr($userStartTime, 12, 2));
- $date = (new ReservationTime())->getDtObjWithTzDateTime($userTz,
- substr($userStartTime, 0, 4),
- substr($userStartTime, 4, 2), $bymonthday - $intervalDay,
- substr($userStartTime, 8, 2), substr($userStartTime, 10, 2), substr($userStartTime, 12, 2));
- //$startTimestamp = $date->getTimestamp();
- $date->setTimezone(new DateTimeZone('UTC')); //サーバー系TZに切り替える
- $svrStartDate = $date->format('Ymd');
- $svrStartTime = $date->format('His');
-
- //毎月x日のx日を考慮した終了日付時刻の実日付時刻を計算
- //
- //(毎月x日のx日が、開始日の日と同じかより後ならその差分の日数(=インターバル日数)を引くので、開始日の日をつかった実日数計算になる。)
- //(毎月x日のx日が、開始日の日より前ならその差分の日数(=インターバル日数)は0なので、毎月x日のx日をつかった実日数計算になる。)
- //(上記2ケースとも、日に開始日と終了日の差分日数を加算しているので、終了の日となる。)
- //
- ////$date = new DateTime('now', (new DateTimeZone($userTz))); //ユーザー系TZのDateTimeObjを生成
- ////$date->setDate(substr($userStartTime, 0, 4),
- //// substr($userStartTime, 4, 2), $bymonthday - $intervalDay + $diffNum);
- ////$date->setTime(substr($userEndTime, 8, 2),
- //// substr($userEndTime, 10, 2), substr($userEndTime, 12, 2));
- $date = (new ReservationTime())->getDtObjWithTzDateTime($userTz,
- substr($userStartTime, 0, 4), substr($userStartTime, 4, 2),
- $bymonthday - $intervalDay + $diffNum,
- substr($userEndTime, 8, 2), substr($userEndTime, 10, 2), substr($userEndTime, 12, 2));
- //$endTimestamp = $date->getTimestamp();
- $date->setTimezone(new DateTimeZone('UTC')); //サーバー系TZに切り替える
- $svrEndDate = $date->format('Ymd');
- $svrEndTime = $date->format('His');
-
- //CakeLog::debug("DBG: diffNum[" . $diffNum . "] svrStartDate[" . $svrStartDate .
- // "] svrStartTime[" . $svrStartTime . "] svrEndDate[" .
- // $svrEndDate . "] svrEndTime[" . $svrEndTime . "]");
-
- if (!ReservationSupport::isRepeatable($model->rrule, ($svrStartDate . $svrStartTime),
- $eventData['ReservationEvent']['timezone'], $model->isOverMaxRruleIndex)) {
- //繰返しがとまったので、callから復帰する。
- return true;
- }
-
- //CakeLog::debug("DBG: insert(svrStartDateTime[" . $svrStartDate . $svrStartTime .
- // "] svrEndDateTime[" . $svrEndDate . $svrEndTime . "])実行");
-
- $rEventData = $this->insert($model, $planParams, $rruleData, $eventData,
- ($svrStartDate . $svrStartTime), ($svrEndDate . $svrEndTime), $createdUserWhenUpd);
- if ($rEventData['ReservationEvent']['id'] === null) {
- return false;
- } else {
- return array($rEventData, ($svrStartDate . $svrStartTime), ($svrEndDate . $svrEndTime));
- }
- }
-
-/**
- * 年周期の登録(年単位-第M週N曜日)
- *
- * @param Model $model 実際のモデル名
- * @param array $planParams planParams
- * @param array $rruleData rruleData
- * @param array $eventData eventデータ(ReservationEventのモデルデータ)
- * @param int $first 最初のデータかどうか 1:最初である 0:最初ではない
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return mixed boolean true:登録せず終了 false:失敗、array 登録成功: array(insertした結果のrEventData, 登録したサーバ系開始年月日時分秒, 登録したサーバ系終了年月日時分秒)
- */
- public function insertYearlyByday(Model $model, $planParams, $rruleData, $eventData,
- $first = 0, $createdUserWhenUpd = null) {
- //CakeLog::debug("DBG: insertYearlyByday() start. first[" . $first .
- // "] rrule[INDEX]=[" . $model->rrule['INDEX'] . "]");
-
- $model->rrule['INDEX']++;
-
- //ユーザタイムゾーンを取得しておく。
- $userTz = (new NetCommonsTime())->getUserTimezone();
-
- //BYDAYは'2MO','3SA'といった形式である
- //よって、wdayNumにはSUなら0, SAなら6とった値になる。
- $wdayNum = array_search(substr($model->rrule['BYDAY'][0], -2), self::$reservationWdayArray);
- //よって、weekには、、最後2文字を取り除いた、第x月曜、第y土曜のx、yが取り出せる。
- $week = intval(substr($model->rrule['BYDAY'][0], 0, -2)); //-2で最後2文字をけずる。
-
- //NC3は内部はサーバー系時刻なのでtimezoneDateはつかわない
- $sTime = $eventData['ReservationEvent']['start_date'] .
- $eventData['ReservationEvent']['start_time'];
- $eTime = $eventData['ReservationEvent']['end_date'] . $eventData['ReservationEvent']['end_time'];
-
- //以下で使うmkdateの「1日00:00:00」とは、画面上(=ユーザー系)でのカレンダ
- //日付時刻をさしているので、ユーザー系に直す。
- //
- $userStartTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($sTime));
- $userStartTime = ReservationTime::dt2calDt($userStartTime);
-
- //ユーザー系開始日の同年同月1日の00:00:00のtimestampを求める。
- $date = new DateTime('now', (new DateTimeZone($userTz)));
- $date->setDate(substr($userStartTime, 0, 4), substr($userStartTime, 4, 2), 1);
- $date->setTime(0, 0, 0);
- $timestamp = $date->getTimestamp();
-
- //タイムスタンプとユーザタイムゾーンを引数にわたしてgetByday()をcallする。
- //getByday()はサーバ系のYmdHis形式の文字列を返す。
- $byday = ReservationSupport::getByday($timestamp, $week, $wdayNum, $userTz);
-
- //CakeLog::debug("DBG: call復帰条件: first [" . $first . "] sTime[" . $sTime .
- // "] byday[" . $byday . "]");
-
- //call復帰条件のチェック
- if ($first && $sTime >= $byday) {
- //CakeLog::debug("DBG: 復帰条件 (first && sTime >= byday) が" .
- // "真になったので、call復帰します。");
-
- //開始日(対象日?)が繰返しENDのb(第x週第y曜日の実日)を超したら、行き過ぎなので、INDEXをデクリメントして、callから復帰する。
- $model->rrule['INDEX']--;
- return true;
- }
-
- //setStartDateTiemAndEndDateTime()より返される時刻系はサーバー系です
- $svrStartDate = $svrStartTime = $svrEndDate = $svrEndTime = '';
- $this->setStartDateTiemAndEndDateTime($sTime, $eTime, $byday, $userTz,
- $svrStartDate, $svrStartTime, $svrEndDate, $svrEndTime);
-
- //CakeLog::debug("DBG: setStartDateTiemAndEndDateTime()結果. svrStartDate[" .
- // $svrStartDate . "] svrStartTime[" . $svrStartTime . "] svrEndDate[" .
- // $svrEndDate . "] svrEndTime[" . $svrEndTime . "]");
-
- if (!ReservationSupport::isRepeatable($model->rrule, ($svrStartDate . $svrStartTime),
- $eventData['ReservationEvent']['timezone'], $model->isOverMaxRruleIndex)) {
- //CakeLog::debug("DBG: 繰返しがとまったので、復帰する。");
-
- //繰返しがとまったので、復帰する。
- return true;
- }
-
- //CakeLog::debug("DBG: insert(svrStartDateTime[" . $svrStartDate . $svrStartTime .
- // "] svrEndDateTime[" . $svrEndDate . $svrEndTime . "])実行");
-
- $rEventData = $this->insert($model, $planParams, $rruleData, $eventData,
- ($svrStartDate . $svrStartTime), ($svrEndDate . $svrEndTime), $createdUserWhenUpd);
- if ($rEventData['ReservationEvent']['id'] === null) {
- return false;
- }
-
- return array($rEventData, ($svrStartDate . $svrStartTime), ($svrEndDate . $svrEndTime));
- }
-
-/**
- * __setYearlyByMonthdayStartDtProc
- *
- * 年周期のbymonthdayでの開始日処理
- *
- * @param array &$eventData eventData
- * @param string &$userStartTime userStartTime
- * @param int &$startTimestamp startTimestamp
- * @param string &$currentDay currentDay
- * @param mixed &$firstNumOfDaysOfMth firstNumOfDaysOfMth
- * @param int &$bymonthday bymonthday
- * @param int &$first first
- * @param int &$intervalDay intervalDay
- * @param string &$userTz userTz
- * @return void
- */
- private function __setYearlyByMonthdayStartDtProc(&$eventData, &$userStartTime, &$startTimestamp,
- &$currentDay, &$firstNumOfDaysOfMth, &$bymonthday, &$first, &$intervalDay, &$userTz) {
- $sTime = $eventData['ReservationEvent']['start_date'] .
- $eventData['ReservationEvent']['start_time'];
-
- //以下で使う時間系は「1日00:00:00」など、画面上(=ユーザー系)でのカレンダ
- //日付時刻をさしているので、ユーザー系に直す。
- //
- //$userStartTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($sTime));
- //$userStartTime = ReservationTime::dt2calDt($userStartTime);
- $userStartTime = (new ReservationTime())->svr2UserYmdHis($sTime);
-
- //ユーザー系開始日の00:00:00のタイムスタンプを取得
- $date = new DateTime('now', (new DateTimeZone($userTz)));
- $date->setDate(substr($userStartTime, 0, 4),
- substr($userStartTime, 4, 2), substr($userStartTime, 6, 2));
- $date->setTime(0, 0, 0);
- $startTimestamp = $date->getTimestamp();
-
- //ユーザー系開始日を使った、インターバル日数の計算
- $currentDay = intval(substr($userStartTime, 6, 2));
-
- //ユーザー系開始日の同年同月1日の00:00:00のタイムスタンプ算出
- ////$date = new DateTime('now', (new DateTimeZone($userTz)));
- ////$date->setDate(substr($userStartTime, 0, 4), substr($userStartTime, 4, 2), 1);
- ////$date->setTime(0, 0, 0);
- $date = (new ReservationTime())->getDtObjWithTzDateTime($userTz,
- substr($userStartTime, 0, 4), substr($userStartTime, 4, 2), 1, 0, 0, 0);
- //$firstTimestamp = $date->getTimestamp();
- $firstNumOfDaysOfMth = $date->format('t'); //指定月の日数y (28-31)
-
- if ($bymonthday > $firstNumOfDaysOfMth) {
- //毎月x日のx日が、開始日の日より後なら、その差分の日数を、インターバル日数とする。
- $intervalDay = $bymonthday - $firstNumOfDaysOfMth;
- } else {
- //毎月x日のx日が、開始日の日と同じか前なら、インターバル日数を0とする。
- $intervalDay = 0;
- }
- }
-
-/**
- * __setYearlyByMonthdayEndDtProc
- *
- * 年周期のbymonthdayでの終了日処理
- *
- * @param array &$eventData eventData
- * @param string &$userTz userTz
- * @param string &$userEndTime userEndTime
- * @param int &$endTimestamp endTimestamp
- * @return void
- */
- private function __setYearlyByMonthdayEndDtProc(&$eventData, &$userTz, &$userEndTime,
- &$endTimestamp) {
- //NC3は内部はサーバー系時刻なのでtimezoneDateはつかわない
- $eTime = $eventData['ReservationEvent']['end_date'] . $eventData['ReservationEvent']['end_time'];
-
- //以下で使う時間系は、00:00:00など画面上(=ユーザー系)でのカレンダ日付時刻を
- //さしているので、ユーザー系に直す。
- //
- //$userEndTime = (new NetCommonsTime())->toUserDatetime(ReservationTime::calDt2dt($eTime));
- //$userEndTime = ReservationTime::dt2calDt($userEndTime);
- $userEndTime = (new ReservationTime())->svr2UserYmdHis($eTime);
-
- //ユーザー系終了日の00:00:00のタイムスタンプを取得
- ////$date = new DateTime('now', (new DateTimeZone($userTz)));
- ////$date->setDate(substr($userEndTime, 0, 4),
- //// substr($userEndTime, 4, 2), substr($userEndTime, 6, 2));
- ////$date->setTime(0, 0, 0);
- $date = (new ReservationTime())->getDtObjWithTzDateTime($userTz,
- substr($userEndTime, 0, 4),
- substr($userEndTime, 4, 2),
- substr($userEndTime, 6, 2), 0, 0, 0);
- $endTimestamp = $date->getTimestamp();
- }
-}
diff --git a/Model/Behavior/empty b/Model/Behavior/empty
new file mode 100644
index 0000000..e69de29
diff --git a/Model/Datasource/empty b/Model/Datasource/empty
new file mode 100644
index 0000000..e69de29
diff --git a/Model/Reservation.php b/Model/Reservation.php
index ad3a2d8..d95e38a 100644
--- a/Model/Reservation.php
+++ b/Model/Reservation.php
@@ -2,390 +2,275 @@
/**
* Reservation Model
*
- * @property Block $Block
* @property Room $Room
+ * @property Language $Language
+ * @property Location $Location
+ * @property Calendar $Calendar
*
- * @author Noriko Arai
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
+* @author Noriko Arai
+* @author Your Name
+* @link http://www.netcommons.org NetCommons Project
+* @license http://www.netcommons.org/license.txt NetCommons License
+* @copyright Copyright 2014, NetCommons Project
*/
App::uses('ReservationsAppModel', 'Reservations.Model');
-App::uses('BlockSettingBehavior', 'Blocks.Model/Behavior');
/**
- * Reservation Model
- *
- * @author AllCreator Co., Ltd.
- * @package NetCommons\Reservations\Model
+ * Summary for Reservation Model
*/
class Reservation extends ReservationsAppModel {
/**
- * use behaviors
+ * Use database config
+ *
+ * @var string
+ */
+ public $useDbConfig = 'master';
+
+/**
+ * Validation rules
*
* @var array
*/
- public $actsAs = array(
- //'NetCommons.OriginalKey',
- //'Workflow.WorkflowComment',
- //'Workflow.Workflow',
- //'Blocks.BlockSetting' => array(
- // BlockSettingBehavior::FIELD_USE_WORKFLOW,
- //),
- 'Categories.Category'
+ public $validate = array(
+ 'key' => array(
+ 'notBlank' => array(
+ 'rule' => array('notBlank'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'room_id' => array(
+ 'numeric' => array(
+ 'rule' => array('numeric'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'language_id' => array(
+ 'numeric' => array(
+ 'rule' => array('numeric'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'is_origin' => array(
+ 'boolean' => array(
+ 'rule' => array('boolean'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'is_translation' => array(
+ 'boolean' => array(
+ 'rule' => array('boolean'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'is_original_copy' => array(
+ 'boolean' => array(
+ 'rule' => array('boolean'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'location_id' => array(
+ 'numeric' => array(
+ 'rule' => array('numeric'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'calendar_id' => array(
+ 'numeric' => array(
+ 'rule' => array('numeric'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'title' => array(
+ 'notBlank' => array(
+ 'rule' => array('notBlank'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'title_icon' => array(
+ 'notBlank' => array(
+ 'rule' => array('notBlank'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'start_date' => array(
+ 'notBlank' => array(
+ 'rule' => array('notBlank'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'start_time' => array(
+ 'notBlank' => array(
+ 'rule' => array('notBlank'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'dtstart' => array(
+ 'notBlank' => array(
+ 'rule' => array('notBlank'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'end_date' => array(
+ 'notBlank' => array(
+ 'rule' => array('notBlank'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'end_time' => array(
+ 'notBlank' => array(
+ 'rule' => array('notBlank'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'dtend' => array(
+ 'notBlank' => array(
+ 'rule' => array('notBlank'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'timezone_offset' => array(
+ 'numeric' => array(
+ 'rule' => array('numeric'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'status' => array(
+ 'numeric' => array(
+ 'rule' => array('numeric'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'is_active' => array(
+ 'boolean' => array(
+ 'rule' => array('boolean'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
+ 'is_latest' => array(
+ 'boolean' => array(
+ 'rule' => array('boolean'),
+ //'message' => 'Your custom message here',
+ //'allowEmpty' => false,
+ //'required' => false,
+ //'last' => false, // Stop validation after this rule
+ //'on' => 'create', // Limit validation to 'create' or 'update' operations
+ ),
+ ),
);
+ //The Associations below have been created with all possible keys, those that are not needed can be removed
+
/**
* belongsTo associations
*
* @var array
*/
public $belongsTo = array(
- 'Block' => array(
- 'className' => 'Blocks.Block',
- 'foreignKey' => 'block_key',
+ 'Room' => array(
+ 'className' => 'Room',
+ 'foreignKey' => 'room_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
+ 'Language' => array(
+ 'className' => 'Language',
+ 'foreignKey' => 'language_id',
+ 'conditions' => '',
+ 'fields' => '',
+ 'order' => ''
+ ),
+ 'Location' => array(
+ 'className' => 'Location',
+ 'foreignKey' => 'location_id',
+ 'conditions' => '',
+ 'fields' => '',
+ 'order' => ''
+ ),
+ 'Calendar' => array(
+ 'className' => 'Calendar',
+ 'foreignKey' => 'calendar_id',
+ 'conditions' => '',
+ 'fields' => '',
+ 'order' => ''
+ )
);
-
-/**
- * hasMany associations
- *
- * @var array
- */
- public $hasMany = array(
- //'ReservationRrule' => array(
- // 'className' => 'Reservations.ReservationRrule',
- // 'foreignKey' => 'reservation_id',
- // 'dependent' => true,
- // 'conditions' => '',
- // 'fields' => '',
- // 'order' => array('id' => 'ASC'),
- // 'limit' => '',
- // 'offset' => '',
- // 'exclusive' => '',
- // 'finderQuery' => '',
- // 'counterQuery' => ''
- //)
- );
-
-/**
- * Validation rules
- *
- * @var array
- */
- public $validate = array();
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'block_key' => array(
- 'rule1' => array(
- 'rule' => array('notBlank'),
- 'message' => __d('net_commons', 'Invalid request.'),
- 'required' => true,
- ),
- ),
- ));
-
- return parent::beforeValidate($options);
- }
-
-/**
- * After frame save hook
- *
- * このルーム・この言語で、アンケートブロックが存在しない場合、Blockモデルにsaveで新規登録する。
- *
- * @param array $data received post data
- * @return mixed On success Model::$data if its not empty or true, false on failure
- * @throws BadRequestException
- * @throws InternalErrorException
- */
- public function afterFrameSave($data) {
- // すでに結びついている場合は何もしないでよい
- if (!empty($data['Frame']['block_id'])) {
- return $data;
- }
-
- $this->begin();
-
- $this->loadModels([
- 'Frame' => 'Frames.Frame',
- ]);
-
- try {
- if (empty($data['Frame'])) {
- throw new BadRequestException(__d('net_commons', 'Bad Request'));
- }
- //$frame = $data['Frame']; //FrameモデルですでにFrameモデルデータは登録済み
-
- //Blockモデルに存在するか調べる
- $block = $this->getBlock();
- // まだない場合
- if (empty($block)) {
- // ブロックを作成する
- $block = $this->saveBlock();
- } elseif (! $this->_saveReservation($block)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //取得したBlockを$current[Block]に記録しておく。
- Current::$current['Block'] = $block['Block'];
-
- //Frameモデルに、このブロックのidを記録しておく。 施設予約の場合、Frame:Blockの関係は n:1
- $data['Frame']['block_id'] = $block['Block']['id'];
- if (! $this->Frame->save($data)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- //新規に生成したBlockのidをCurrent[Frame]に追記しておく。
- Current::$current['Frame']['block_id'] = $block['Block']['id'];
-
- ////このフレーム用の「表示方法変更」「権限設定」「メール設定」のレコードを
- ////1セット用意します。
- //
- ////このフレームの「表示方法変更」
- //if (! $this->_saveFrameChangeAppearance($data['Frame'])) {
- // throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- //}
-
- ////権限設定
- //if (! $this->_saveReservation($block)) {
- // throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- //}
- $this->commit();
-
- } catch (Exception $ex) {
- //トランザクションRollback
- $this->rollback($ex);
- }
-
- return $data;
- }
-
-/**
- * フレームも何もなくても予定登録のときはこいつをたたいて準備しないといけない
- *
- * @return mixed 見つかった、もしくは作成したブロック
- * @throws InternalErrorException
- */
- public function prepareBlock() {
- //Blockを取得
- $block = $this->getBlock();
-
- try {
- // まだない場合
- if (empty($block)) {
- $this->begin();
-
- // ブロックを作成する
- if (! $this->saveBlock()) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- $this->commit();
- }
-
- } catch (Exception $ex) {
- $this->rollback($ex);
- }
-
- Current::$current['Block'] = $block['Block'];
-
- return $block;
- }
-
- ///**
- // * saveMailSetting
- // *
- // * メール設定データを登録する
- // *
- // * @return mixed On success Model::$data if its not empty or true, false on failure
- // */
- // protected function _saveMailSetting() {
- // //$data = $this->_generateMailSettingData();
- // //$this->MailSetting->set($data);
- // //if (! $this->MailSetting->validates($data, false)) {
- // // CakeLog::error(serialize($this->MailSetting->validationErrors));
- // // return false;
- // //}
- // //$data = $this->MailSetting->save($data, false);
- // //if (! $data) {
- // // CakeLog::error(serialize($this->MailSetting->validationErrors));
- // // return false;
- // //}
- // //return $data;
- // return array(); //暫定
- // }
- //
- ///**
- // * generateMailSettingData
- // *
- // * メール設定データを生成する
- // *
- // * @return array 生成したメール設定データ
- // */
- // protected function _generateMailSettingData() {
- // $data = $this->MailSetting->create();
- // $data = Hash::merge($data,
- // array(
- // $this->MailSetting->alias => array(
- // 'block_key' => Current::read('Block.key'),
- // 'plugin_key' => Current::read('Block.plugin_key'),
- // 'type_key' => 'aaa', //定型文の種類',
- // 'mail_fixed_phrase_subject' => 'bbb', //定型文 件名
- // 'mail_fixed_phrase_body' => 'ccc', //定型文 本文
- // 'replay_to' => 'ddd', //返信先アドレス
- // )
- // )
- // );
- // return $data;
- // }
- //
- ///**
- // * _saveFrameChangeAppearance
- // *
- // * フレームの「表示方法変更」のデータの登録
- // *
- // * @param array $frame フレーム
- // * @return array 生成したデータ
- // */
- // protected function _saveFrameChangeAppearance($frame) {
- // $this->loadModels([
- // 'ReservationFrameSetting' => 'Reservations.ReservationFrameSetting',
- // ]);
- //
- // $frameKey = $frame['key'];
- // $frameSetting = $this->ReservationFrameSetting->find('first', array(
- // 'recursive' => -1,
- // 'conditions' => array(
- // 'frame_key' => $frameKey
- // ),
- // ));
- // if ($frameSetting) {
- // return $frameSetting;
- // }
- // $frameSetting = $this->ReservationFrameSetting->create();
- // $this->ReservationFrameSetting->setDefaultValue($frameSetting); //Modelの初期値設定
- // $frameSetting['ReservationFrameSetting']['frame_key'] = $frame['key'];
- //// $frameSetting['ReservationFrameSetting']['room_id'] = Current::read('Room.id');
- //
- // return $this->ReservationFrameSetting->saveFrameSetting($frameSetting);
- // }
-
-/**
- * 施設予約のBlockデータの登録
- *
- * @param array $block ブロック
- * @return array 生成したデータ
- * @throws InternalErrorException
- */
- protected function _saveReservation($block) {
- // 今現在ブロックに対応した施設予約があるか
- $count = $this->find('count', array(
- 'recursive' => -1,
- 'conditions' => array(
- 'block_key' => $block['Block']['key']
- )
- ));
- // ない場合は作成する
- if (! $count) {
- $this->set($this->create([
- 'block_key' => $block['Block']['key']
- ]));
- if (!$this->save()) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
- return true;
- }
-
- //
- ///**
- // * _makeBlock($frame);
- // *
- // * ブロックを作成する
- // *
- // * @param array $frame フレーム
- // * @return array 生成したブロック
- // * @throws InternalErrorException
- // */
- // protected function _makeBlock($frame) {
- // $block = $this->Block->save(array(
- // 'room_id' => $frame['room_id'],
- // 'plugin_key' => $frame['plugin_key'],
- // ));
- // if (! $block) {
- // throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- // }
- // //新規に生成したBlockを$current[Block]に記録しておく。
- // Current::$current['Block'] = $block['Block'];
- // return $block;
- // }
-
-/**
- * ブロックを作成する
- *
- * @return array 生成したブロック
- * @throws InternalErrorException
- */
- public function saveBlock() {
- $this->Block->create();
- $block = $this->Block->save(array(
- 'room_id' => Space::getRoomIdRoot(Space::PUBLIC_SPACE_ID),
- 'plugin_key' => Inflector::underscore($this->plugin),
- ));
- if (! $block) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- // ない場合は作成する
- if (! $this->_saveReservation($block)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- return $block;
- }
-
-/**
- * ブロックを取得
- *
- * @return array
- */
- public function getBlock() {
- return $this->Block->find('first', [
- 'recursive' => -1,
- 'conditions' => [
- 'room_id' => Space::getRoomIdRoot(Space::PUBLIC_SPACE_ID),
- 'plugin_key' => Inflector::underscore($this->plugin),
- ]
- ]);
- }
-
-/**
- * ブロックが作成されているかどうか
- *
- * @return bool
- */
- public function isCreatedBlock() {
- return (bool)$this->Block->find('count', [
- 'recursive' => -1,
- 'conditions' => [
- 'room_id' => Space::getRoomIdRoot(Space::PUBLIC_SPACE_ID),
- 'plugin_key' => Inflector::underscore($this->plugin),
- ]
- ]);
- }
}
diff --git a/Model/ReservationActionPlan.php b/Model/ReservationActionPlan.php
deleted file mode 100644
index 72e05cc..0000000
--- a/Model/ReservationActionPlan.php
+++ /dev/null
@@ -1,1487 +0,0 @@
-
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppModel', 'Reservations.Model');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component');
-App::uses('ReservationSupport', 'Reservations.Utility');
-App::uses('ReservationService', 'Reservations.Service');
-App::uses('ReservationRruleParameter', 'Reservations.Parameter');
-
-/**
- * Reservation Action Plan Model
- *
- * @author AllCreator Co., Ltd.
- * @package NetCommons\Reservations\Model
- * @SuppressWarnings(PHPMD)
- */
-class ReservationActionPlan extends ReservationsAppModel {
-
-/**
- * アクセスユーザが予約可能な施設
- *
- * @var array
- */
- protected $_locations = null;
-
-/**
- * use table
- *
- * このモデルはvalidateと
- * insert/update/deletePlan()呼び出しが主目的なのでテーブルを使用しない。
- * @var array
- */
- public $useTable = false;
-
-/**
- * use behaviors
- *
- * @var array
- */
- public $actsAs = array(
- 'NetCommons.OriginalKey',
- 'NetCommons.Trackable',
- //FUJI'Workflow.Workflow',
- 'Workflow.WorkflowComment',
- 'Reservations.ReservationValidate',
- 'Reservations.ReservationApp', //baseビヘイビア
- 'Reservations.ReservationInsertPlan', //Insert用
- 'Reservations.ReservationUpdatePlan', //Update用
- 'Reservations.ReservationDeletePlan', //Delete用
- 'Reservations.ReservationExposeRoom', //ルーム表示・選択用
- 'Reservations.ReservationPlanOption', //予定CRUD画面の各種選択用
- 'Reservations.ReservationPlanTimeValidate', //予定(時間関連)バリデーション専用
- 'Reservations.ReservationPlanRruleValidate', //予定(Rrule関連)バリデーション専用
- 'Reservations.ReservationPlanValidate', //予定バリデーション専用
- ////'Reservations.ReservationRruleHandle', //concatRrule()など
- 'Reservations.ReservationPlanGeneration', //元予定の新世代予定生成関連
- /*
- // 自動でメールキューの登録, 削除。ワークフロー利用時はWorkflow.Workflowより下に記述する
- 'Mails.MailQueue' => array(
- 'embedTags' => array(
- 'X-SUBJECT' => 'ReservationActionPlan.title',
- 'X-LOCATION' => 'ReservationActionPlan.location',
- 'X-CONTACT' => 'ReservationActionPlan.contact',
- 'X-BODY' => 'ReservationActionPlan.description',
- 'X-URL' => array(
- 'controller' => 'reservation_plans'
- )
- ),
- 'workflowType' => 'workflow',
- ),
- 'Mails.MailQueueDelete',
- */
- 'Reservations.ReservationMail',
- 'Reservations.ReservationTopics',
- // 'Reservations.RegistCalendar',
- );
- // @codingStandardsIgnoreStart
- // $_schemaはcakePHP2の予約語だが、宣言するとphpcsが警告を出すので抑止する。
- // ただし、$_schemaの直前にIgnoreStartを入れると、今度はphpdocが直前の
- // property説明がないと警告を出す。よって、この位置にIgnoreStartを挿入した。
-
-/**
- * use _schema
- *
- * @var array
- */
- public $_schema = array (
- // @codingStandardsIgnoreEnd
-
- // 入力カラムの定義、データ型とdefault値、必要ならlength値
- //繰返し編集の指定(0/1/2). このフィールドは渡ってこない時もあるので
- //ViewにてunlockField指定しておくこと。
- 'edit_rrule' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
-
- //施設予約元eventId
- 'origin_event_id' => array(
- 'type' => 'integer', 'null' => false, 'default' => 0, 'unsigned' => false),
- //施設予約元eventKey
- 'origin_event_key' => array(
- 'type' => 'string', 'default' => ''),
- //施設予約元eventRecurrence
- 'origin_event_recurrence' => array(
- 'type' => 'integer', 'null' => false, 'default' => 0, 'unsigned' => false),
- //施設予約元eventException
- 'origin_event_exception' => array(
- 'type' => 'integer', 'null' => false, 'default' => 0, 'unsigned' => false),
-
- //施設予約元rruleId
- 'origin_rrule_id' => array(
- 'type' => 'integer', 'null' => false, 'default' => 0, 'unsigned' => false),
- //施設予約元rruleKey
- 'origin_rrule_key' => array(
- 'type' => 'string', 'default' => ''),
- //施設予約元rruleを共有する兄弟eventの数
- 'origin_num_of_event_siblings' => array(
- 'type' => 'integer', 'null' => false, 'default' => 0, 'unsigned' => false),
-
- // 全変更選択時、繰返し先頭eventのeditボタンを擬似クリックする方式用の項目
- // editLink()を呼ぶときの必要パラメータ
- 'first_sib_year' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
- 'first_sib_month' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
- 'first_sib_day' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
- 'first_sib_event_id' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
-
- /*
- // -- 以下のcapForViewOf1stSibによるデータすり替え方式用の項目(first_sib_cap_xxx)は、--
- // -- 全変更選択時、繰返し先頭eventのeditボタンを擬似クリックする方式にかえたので、削除. --
-
- //先頭兄弟(繰返しの先頭)capForView(表示用ReservationActionPlan)の情報
- 'first_sib_cap_enable_time' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
- 'first_sib_cap_easy_start_date' => array('type' => 'string', 'default' => ''), //YYYY-MM-DD
- 'first_sib_cap_easy_hour_minute_from' => array('type' => 'string', 'default' => ''), //hh:mm
- 'first_sib_cap_easy_hour_minute_to' => array(
- 'type' => 'string', 'default' => ''), //hh:mm
- 'first_sib_cap_detail_start_datetime' => array(
- 'type' => 'string', 'default' => ''), //YYYY-MM-DD or YYYY-MM-DD hh:mm
- 'first_sib_cap_detail_end_datetime' => array(
- 'type' => 'string', 'default' => ''), //YYYY-MM-DD or YYYY-MM-DD hh:mm
- 'first_sib_cap_timezone' => array('type' => 'string', 'default' => ''),
- */
-
- //タイトル
- 'title' => array('type' => 'string', 'default' => ''),
-
- //タイトルアイコン
- //注)タイトルアイコンは、ReservationActionPlanモデルを指定することで、以下の形式で渡ってくる。
- //
- 'title_icon' => array('type' => 'string', 'default' => ''),
-
- //時間の指定(1/0)
- 'enable_time' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
-
- ////完全なる開始日付時刻と終了日付時刻(hidden)
- ////'full_start_datetime' => array('type' => 'string', 'default' => ''), //hidden
- ////'full_end_datetime' => array('type' => 'string', 'default' => ''), //hidden
-
- //簡易編集の日付時刻エリア
- 'easy_start_date' => array('type' => 'string', 'default' => ''), //YYYY-MM-DD
- 'easy_hour_minute_from' => array('type' => 'string', 'default' => ''), //hh:mm
- 'easy_hour_minute_to' => array('type' => 'string', 'default' => ''), //hh:mm
- //詳細編集の日付時刻エリア
- 'detail_start_datetime' => array(
- 'type' => 'string', 'default' => ''), //YYYY-MM-DD or YYYY-MM-DD hh:mm
- 'detail_end_datetime' => array(
- 'type' => 'string', 'default' => ''), //YYYY-MM-DD or YYYY-MM-DD hh:mm
-
- //公開対象
- 'plan_room_id' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
- //注)共有するユーザ群は、ReservationActionPlanモデルではなく、GroupsUserモデルの配列として以下形式で渡ってくる。
- //
- //
-
- //タイムゾーン
- 'timezone' => array('type' => 'string', 'default' => ''),
- 'timezone' => array('type' => 'string', 'default' => ''),
-
- //詳細フラグ(1/0) (hidden. 画面表示時点で、detail(or easy)かはわかるので値を指定しておく。
- 'is_detail' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
-
- //場所
- 'location' => array('type' => 'string', 'default' => ''),
- //連絡先
- 'contact' => array('type' => 'string', 'default' => ''),
- //内容(wysiwyg)
- 'description' => array('type' => 'string', 'default' => ''),
-
- //予定を繰り返す(1/0)
- 'is_repeat' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
-
- //繰返し周期 DAILY, WEEKLY, MONTHLY, YEARLY
- 'repeat_freq' => array('type' => 'string', 'default' => ''),
-
- //繰返し間隔 rrule_interval[DAILY], rrule_interval[WEEKLY], rrule_interval[MONTHLY], rrule_interval[YEARLY]
- // rrule_interval[DAILY] inList => array(1, 2, 3, 4, 5, 6) //n日ごと
- // rrule_interval[WEEKLY] inList => array(1, 2, 3, 4, 5) //n週ごと
- // rrule_interval[MONTHLY] inList => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) //nヶ月ごと
- // rrule_interval[YEARLY] inList => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) //n年ごと
- 'rrule_interval' => array('type' => 'string', 'default' => ''),
-
- //週単位or月単位 rrule_byday[WEEKLY], rrule_byday[MONTHLY], rrule_byday[YEARLY]
- // rrule_byday[WEEKLY] inList => array('SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA')
- // rrule_byday[MONTHLY] inList => array('', '1SU', '1MO', '1TU', ... , '4FR, '4SA', '-1SU', '-2SU', ..., '-1SA')
- // rrule_byday[YEARLY] inList => array('', '1SU', '1MO', '1TU', ... , '4FR, '4SA', '-1SU', '-2SU', ..., '-1SA')
- 'rrule_byday' => array('type' => 'string', 'default' => ''),
-
- //月単位 rrule_bymonthday[MONTHLY]
- // rrule_bymonthday[MONTHLY] inList => array('', 1, 2, ..., 31 );
- 'rrule_bymonthday' => array('type' => 'string', 'default' => ''),
-
- //年単位 rrule_bymonth[YEARLY]
- // rrule_bymonth[YEARLY] inList => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) //n月
- 'rrule_bymonth' => array('type' => 'string', 'default' => ''),
-
- //繰返しの終了指定
- // rrule_term inList('COUNT', 'UNTIL')
- 'rrule_term' => array('type' => 'string', 'default' => ''),
-
- //繰返し回数
- 'rrule_count' => array('type' => 'string', 'default' => ''),
-
- //繰返し終了日
- 'rrule_until' => array('type' => 'string', 'default' => ''),
-
- //メールで通知(1/0)
- 'enable_email' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
-
- //メール通知タイミング
- 'email_send_timing' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
-
- //承認ステータス
- //statusは 施設予約独自stauts取得関数getStatusで取ってくるので、ここからは外す。
- //'status' => array('type' => 'integer', 'null' => false, 'unsigned' => false),
-
- );
-
-/**
- * Validation rules
- *
- * @var array
- */
- public $validate = array(
- );
-
-/**
- * Constructor. Binds the model's database table to the object.
- *
- * @param bool|int|string|array $id Set this ID for this model on startup,
- * can also be an array of options, see above.
- * @param string $table Name of database table to use.
- * @param string $ds DataSource connection name.
- * @see Model::__construct()
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- */
- public function __construct($id = false, $table = null, $ds = null) {
- parent::__construct($id, $table, $ds);
- $this->loadModels([
- 'Frame' => 'Frames.Frame',
- 'Reservation' => 'Reservations.Reservation',
- ]);
- }
-
-/**
- * _doMergeDisplayParamValidate
- *
- * 画面パラメータ関連バリデーションのマージ
- *
- * @param bool $isDetailEdit 詳細画面かどうか true=詳細(detail)画面, false=簡易(easy)画面
- * @return void
- */
- // 未使用
- //protected function _doMergeDisplayParamValidate($isDetailEdit) {
- // $this->validate = ValidateMerge::merge($this->validate, array(
- // 'return_style' => array(
- // 'rule1' => array(
- // 'rule' => array('inList', array(
- // ReservationsComponent::CALENDAR_STYLE_SMALL_MONTHLY,
- // ReservationsComponent::CALENDAR_STYLE_LARGE_MONTHLY,
- // ReservationsComponent::CALENDAR_STYLE_WEEKLY,
- // ReservationsComponent::CALENDAR_STYLE_DAILY,
- // ReservationsComponent::CALENDAR_STYLE_SCHEDULE,
- // )),
- // 'required' => false,
- // 'allowEmpty' => true,
- // 'message' => __d('reservations', '戻り先のスタイル指定が不正です。'),
- // ),
- // ),
- // 'return_sort' => array(
- // 'rule1' => array(
- // 'rule' => array('inList', array(
- // ReservationsComponent::CALENDAR_SCHEDULE_SORT_TIME,
- // ReservationsComponent::CALENDAR_SCHEDULE_SORT_MEMBER,
- // )),
- // 'required' => false, //sort指定はスケジュールの時だけ
- // 'allowEmpty' => true,
- // 'message' => __d('reservations', '戻り先のソート指定が不正です。'),
- // ),
- // ),
- // 'return_tab' => array(
- // 'rule1' => array(
- // 'rule' => array('inList', array(
- // ReservationsComponent::CALENDAR_DAILY_TAB_LIST,
- // ReservationsComponent::CALENDAR_DAILY_TAB_TIMELINE,
- // )),
- // 'required' => false, //tab指定は単一日の時だけ
- // 'allowEmpty' => true,
- // 'message' => __d('reservations', '戻り先のタブ指定が不正です。'),
- // ),
- // ),
- // ));
- //}
-
-/**
- * _doMergeRruleValidate
- *
- * 繰返し関連バリデーションのマージ
- *
- * @param bool $isDetailEdit 詳細画面かどうか true=詳細(detail)画面, false=簡易(easy)画面
- * @return void
- */
- protected function _doMergeRruleValidate($isDetailEdit) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'edit_rrule' => array(
- 'rule1' => array(
- 'rule' => array('inList', array(0, 1, 2)),
- 'required' => false,
- 'message' => __d('reservations', 'Invalid input. (change of repetition)'),
- ),
- ),
- 'is_repeat' => array(
- 'rule1' => array(
- 'rule' => array('inList', array(0, 1)),
- 'required' => false,
- 'message' => __d('reservations', 'Invalid input. (repetition)'),
- ),
- ),
- 'repeat_freq' => array(
- 'rule1' => array(
- 'rule' => array('checkRrule'),
- 'required' => false,
- 'message' => ReservationsComponent::CALENDAR_RRULE_ERROR_HAPPEND,
- ),
- ),
- ));
- }
-
-/**
- * _doMergeDatetimeValidate
- *
- * 日付時刻関連バリデーションのマージ
- *
- * @param bool $isDetailEdit 詳細画面かどうか true=詳細(detail)画面, false=簡易(easy)画面
- * @return void
- */
- protected function _doMergeDatetimeValidate($isDetailEdit) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'enable_time' => array(
- 'rule1' => array(
- 'rule' => array('inList', array(0, 1)),
- 'required' => false,
- 'message' => __d('reservations', 'Invalid input. (time)'),
- ),
- ),
- 'easy_start_date' => array(
- 'rule1' => array(
- 'rule' => array('date', 'ymd'), //YYYY-MM-DD
- 'required' => !$isDetailEdit,
- 'allowEmpty' => $isDetailEdit,
- 'message' => __d('reservations', 'Invalid input. (year/month/day)'),
- ),
- ),
- 'easy_hour_minute_from' => array(
- 'rule1' => array(
- 'rule' => array('datetime'), //YYYY-MM-DD hh:mm
- 'required' => false,
- 'allowEmpty' => true,
- 'message' => __d('reservations', 'Invalid input. (start time)(easy edit mode)'),
- ),
- 'rule2' => array(
- 'rule' => array('checkReverseStartEndTime', 'easy'), //YYYY-MM-DD hh:mm
- 'message' => __d('reservations', 'Invalid input. (start time and end time)(easy edit mode)'),
- ),
- ),
- 'easy_hour_minute_to' => array(
- 'rule1' => array(
- 'rule' => array('datetime'), //YYYY-MM-DD hh:mm
- 'required' => false,
- 'allowEmpty' => true,
- 'message' => __d('reservations', 'Invalid input. (end time)'),
- ),
- ),
- 'detail_start_datetime' => array(
- 'rule1' => array(
- 'rule' => array('customDatetime', 'detail'), //YYYY-MM-DD or YYYY-MM-DD hh:mm
- 'message' => __d('reservations', 'Invalid input. (start time)'),
- ),
- 'rule2' => array(
- 'rule' => array('checkReverseStartEndDateTime', 'detail'),
- 'message' => __d('reservations', 'Invalid input. (start day (time) and end day (time))'),
- ),
- 'rule3' => array(
- 'rule' => array('validteNotExistReservation'),
- 'message' =>
- __d('reservations', 'It has been alreay reserved by someone else.Try different time and date.'),
- // NC2では予約の入ってる日付を表示してた(繰り返し用だが、単発予約でも表示)
- ),
- 'rule4' => array(
- 'rule' => array('validteUseLocationTimeRange'),
- 'message' =>
- __d('reservations',
- 'Invalid reservation time range.'),
- ),
- ),
- 'detail_end_datetime' => array(
- 'rule1' => array(
- 'rule' => array('customDatetime', 'detail'), //YYYY-MM-DD or YYYY-MM-DD hh:mm
- 'message' => __d('reservations', 'Invalid input. (end date)'),
- ),
- ),
-
- ));
- }
-
-/**
- * 施設利用時間内の予約になっているか
- *
- * @param array $check チェック対象
- * @return bool
- */
- public function validteUseLocationTimeRange($check) {
- $locationKey = $this->data[$this->alias]['location_key'];
- $startDateTime = $this->data[$this->alias]['detail_start_datetime'] . ':00';
- $endDateTime = $this->data[$this->alias]['detail_end_datetime'] . ':00';
-
- $rruleParameter = new ReservationRruleParameter();
- $rruleParameter->setData($this->data);
- $rrule = $rruleParameter->getRrule();
-
- // 施設情報を取得
- $this->loadModels(
- [
- 'ReservationLocation' => 'Reservations.ReservationLocation'
- ]
- );
- $location = $this->ReservationLocation->findByKeyAndLanguageId(
- $locationKey,
- Current::read('Language.id')
- );
- if (! $location) {
- return false;
- }
- $reservableTimeTable = explode('|', $location['ReservationLocation']['time_table']);
- $locationTimeZone = new DateTimeZone($location['ReservationLocation']['timezone']);
-
- $startDate = date('Y-m-d', strtotime($startDateTime));
- $startTime = date('H:i:s', strtotime($startDateTime));
- $timeLength = strtotime($endDateTime) - strtotime($startDateTime); // 予約の時間幅
- // 繰り返し予約なら繰り返し日付を生成
- if ($rrule) {
- //繰り返しの日付リストを生成
- $repeatService = new ReservationRepeatService();
-
- $repeatDateSet = $repeatService->getRepeatDateSet($rrule, $startDate);
-
- } else {
- // 繰り返しで無ければ1日だけ配列にいれる
- $repeatDateSet = [$startDate];
- }
- // 繰り返し日ごとに予約可能日時かチェック
- $ngDates = [];
- foreach ($repeatDateSet as $checkDate) {
- // 繰り返し生成日付+時刻でチェックする開始日時、終了日時を生成
- $checkStartDateTime = $checkDate . ' ' . $startTime;
- $checkEndDateTime = date('Y-m-d H:i:s', strtotime($checkStartDateTime) + $timeLength);
-
- if (!$this->_validateLocationTimeRange(
- $checkStartDateTime,
- $checkEndDateTime,
- $location,
- $locationTimeZone,
- $reservableTimeTable
- )
- ) {
- // 予約NG日があったらNG日リストに追加
- $ngDates[] = $checkDate;
- }
- }
- if ($ngDates) {
- // ERROR
- $ret = __d(
- 'reservations',
- 'Invalid reservation time range.'
- );
- $ret .= implode('
', $ngDates);
- return $ret;
- } else {
- return true;
- }
- }
-
-/**
- * 重複予約のチェック
- *
- * @param array $check チェック対象
- * @return bool
- */
- public function validteNotExistReservation($check) {
- $startDateTime = $this->data[$this->alias]['detail_start_datetime'];
- $endDateTime = $this->data[$this->alias]['detail_end_datetime'];
- // This timezone offset is id.
- $inputTimeZone = $this->data[$this->alias]['timezone'];
- $locationKey = $this->data[$this->alias]['location_key'];
-
- $rruleParameter = new ReservationRruleParameter();
- $rruleParameter->setData($this->data);
- $rrule = $rruleParameter->getRrule();
-
- // 繰り返しでないか、設定した全ての予定の変更時は$rruleIdを渡す(この繰り返し予約は重複チェック対象外になるので)
- $ignoreConditions = [];
- if (Hash::get($this->data, 'ReservationActionPlan.origin_event_id')) {
- if (empty($rrule)) {
- // 繰り返しでないなら、keyが同じ予約は編集元レコードなので重複チェック時は無視
- $ignoreConditions = [
- 'ReservationEvent.key != ' => Hash::get($this->data, 'ReservationActionPlan.origin_event_key')
- ];
-
- } else {
- switch (Hash::get($this->data, 'ReservationActionPlan.edit_rrule')){
- case 0:
- // 一つの予約だけ更新
- $ignoreConditions = [
- 'ReservationEvent.key != ' =>
- Hash::get($this->data, 'ReservationActionPlan.origin_event_key')
- ];
- // ひとつだけの変更なので重複チェックでは繰り返しさせない
- $rrule = [];
- break;
- case 1:
- // 以降の予約を更新
- $this->loadModels(['ReservationEvent' => 'Reservations.ReservationEvent']);
- $origin = $this->ReservationEvent->findById(
- Hash::get($this->data, 'ReservationActionPlan.origin_event_id'));
- $ignoreConditions = [
- 'NOT' => [
- 'ReservationEvent.reservation_rrule_id' => Hash::get($this->data,
- 'ReservationActionPlan.origin_rrule_id'),
- 'ReservationEvent.recurrence_event_id !=' => 0,
- 'ReservationEvent.exception_event_id !=' => 0,
- ],
- 'ReservationEvent.dtstart > ' => $origin['ReservationEvent']['dtstart']
- ];
- break;
- case 2:
- // 全ての予約を更新
- $ignoreConditions = [
- 'NOT' => [
- 'ReservationEvent.reservation_rrule_id' =>
- Hash::get($this->data, 'ReservationActionPlan.origin_rrule_id'),
- 'ReservationEvent.recurrence_event_id !=' => 0,
- 'ReservationEvent.exception_event_id !=' => 0,
- ]
-
- ];
- break;
- }
- }
- }
-
- $reservationService = new ReservationService();
- $result = $reservationService->getOverlapReservationDate(
- $locationKey,
- $startDateTime,
- $endDateTime,
- $inputTimeZone,
- $rrule,
- $ignoreConditions
- );
- if (count($result) > 0) {
- $ret = __d(
- 'reservations',
- 'It has been alreay reserved by someone else.Try different time and date.'
- );
- foreach ($result as $date) {
- $ret .= "
" . $date;
- }
- return $ret;
- } else {
- return true;
- }
- }
-
-/**
- * _doMergeTitleValidate
- *
- * タイトル関連バリデーションのマージ
- *
- * @param bool $isDetailEdit 詳細画面かどうか true=詳細(detail)画面, false=簡易(easy)画面
- * @return void
- */
- protected function _doMergeTitleValidate($isDetailEdit) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'title' => array(
- 'rule1' => array(
- 'rule' => array('notBlank'),
- 'required' => true,
- 'message' => __d('reservations', 'Invalid input. (plan title)'),
- ),
- 'rule2' => array(
- 'rule' => array('maxLength', ReservationsComponent::CALENDAR_VALIDATOR_TITLE_LEN),
- 'message' => sprintf(__d('reservations',
- '%d character limited. (plan title)'), ReservationsComponent::CALENDAR_VALIDATOR_TITLE_LEN),
- ),
- ),
- 'title_icon' => array(
- 'rule2' => array(
- 'rule' => array('maxLength', ReservationsComponent::CALENDAR_VALIDATOR_GENERAL_VCHAR_LEN),
- 'required' => false,
- 'allowEmpty' => true,
- 'message' => sprintf(__d('reservations',
- '%d character limited. (title icon)'),
- ReservationsComponent::CALENDAR_VALIDATOR_GENERAL_VCHAR_LEN),
- ),
- ),
- ));
- }
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- */
- public function beforeValidate($options = array()) {
- $isDetailEdit = (isset($this->data['ReservationActionPlan']['is_detail']) &&
- $this->data['ReservationActionPlan']['is_detail']) ? true : false;
- //$this->_doMergeDisplayParamValidate($isDetailEdit); //画面パラメータ関連validation
- $this->_doMergeTitleValidate($isDetailEdit); //タイトル関連validation
- $this->_doMergeDatetimeValidate($isDetailEdit); //日付時刻関連validation
- $this->validate = ValidateMerge::merge($this->validate, array( //コンテンツ関連validation
- 'status' => [
- 'rule1' => [
- 'rule' => ['validateStatus'],
- 'message' => __d('net_commons', 'Invalid request.'),
- ]
- ],
- 'plan_room_id' => array(
- 'rule1' => array(
- 'rule' => array('allowedRoomId'),
- 'required' => true,
- 'allowEmpty' => false,
- 'message' => __d('reservations', 'Invalid input. (authority)'),
- ),
- ),
- 'location_key' => [
- 'rule1' => [
- 'rule' => ['allowedLocationKey'],
- 'required' => true,
- 'allowEmpty' => false,
- 'message' => __d('reservations', 'Invalid input location')
- ]
- ],
- //'plan_room_id' => array(
- // 'rule1' => array(
- // 'rule' => array('allowedRoomId'),
- // 'required' => true,
- // 'allowEmpty' => false,
- // 'message' => __d('reservations', 'Invalid input. (authority)'),
- // ),
- //),
- // This timezone offset is id.
- 'timezone' => array(
- 'rule1' => array(
- 'rule' => array('allowedTimezoneOffset'),
- 'required' => false,
- 'message' => __d('reservations', 'Invalid input. (timezone)'),
- ),
- ),
- 'is_detail' => array(
- 'rule1' => array(
- 'rule' => array('inList', array(0, 1)),
- 'required' => false,
- 'message' => __d('reservations', 'Invalid input. (detail)'),
- ),
- ),
- 'location' => array(
- 'rule1' => array(
- 'rule' => array('maxLength', ReservationsComponent::CALENDAR_VALIDATOR_TITLE_LEN),
- 'required' => false,
- 'message' => sprintf(__d('reservations',
- '%d character limited. (location)'), ReservationsComponent::CALENDAR_VALIDATOR_TITLE_LEN),
- ),
- ),
- 'contact' => array(
- 'rule1' => array(
- 'rule' => array('maxLength', ReservationsComponent::CALENDAR_VALIDATOR_TITLE_LEN),
- 'required' => false,
- 'message' => sprintf(__d('reservations', '%d character limited. (contact)'),
- ReservationsComponent::CALENDAR_VALIDATOR_TITLE_LEN),
- ),
- ),
- 'description' => array(
- 'rule1' => array(
- 'rule' => array('maxLength', ReservationsComponent::CALENDAR_VALIDATOR_TEXTAREA_LEN),
- 'required' => false,
- //'message' => sprintf(__d('reservations', '連絡先は最大 %d 文字です。'),
- 'message' => sprintf(__d('reservations', '%d character limited. (detail)'),
- ReservationsComponent::CALENDAR_VALIDATOR_TEXTAREA_LEN),
- ),
- ),
-
- //statusの値は 施設予約独自status取得関数getStatusで取ってくるので省略
- ));
- $this->_doMergeRruleValidate($isDetailEdit); //繰返し関連validation
-
- return parent::beforeValidate($options);
- }
-
-/**
- * statusのチェック
- *
- * @param array $check checkする値
- * @return bool
- */
- public function validateStatus($check) {
- $statusesForEditor = array(
- WorkflowComponent::STATUS_APPROVAL_WAITING,
- WorkflowComponent::STATUS_IN_DRAFT
- );
- $statusesForPublisher = array(
- WorkflowComponent::STATUS_PUBLISHED,
- WorkflowComponent::STATUS_IN_DRAFT,
- WorkflowComponent::STATUS_DISAPPROVED
- );
-
- $locationKey = $this->data['ReservationActionPlan']['location_key'];
- /** @var ReservationLocation $locationModel */
- $locationModel = ClassRegistry::init('Reservations.ReservationLocation');
- $location = $locationModel->getByKey($locationKey);
- if (! $location) {
- return false;
- }
- if ($location['ReservationLocation']['use_workflow']) {
- // 承認必要
- // 承認者か
- if (in_array(Current::read('User.id'), $location['approvalUserIds'])) {
- //承認者
- $allowList = $statusesForPublisher;
- } else {
- //承認権限無し
- $allowList = $statusesForEditor;
- }
- } else {
- // 承認不要
- $allowList = $statusesForPublisher;
- }
-
- $stauts = $check['status'];
- return in_array($stauts, $allowList);
- }
-
-/**
- * 予約可能な施設を返す
- * 何度も呼び出すことを考慮して内部キャッシュ
- * ε( v ゚ω゚) <ReservationLocation内でキャッシュすればOKなのでは?
- *
- * @return array
- */
- protected function _getLocations() {
- if (is_null($this->_locations)) {
- $this->loadModels(
- [
- 'ReservationLocation' => 'Reservations.ReservationLocation',
- ]
- );
-
- $userId = Hash::get($this->data,
- 'ReservationActionPlan.origin_created_user',
- Current::read('User.id'));
- $this->_locations = $this->ReservationLocation->getReservableLocations(null, $userId);
- }
- return $this->_locations;
- }
-
-/**
- * 選択した施設が予約可能な施設かチェックする
- *
- * @param array $check 入力値 location_key
- * @return bool
- */
- public function allowedLocationKey($check) {
- //
- $locationKey = $check['location_key'];
-
- $locations = $this->_getLocations();
- $locationKeys = Hash::combine($locations, '{n}.ReservationLocation.key', '{n}.ReservableRoom');
- return array_key_exists($locationKey, $locationKeys);
- }
-
-/**
- * allowedRoomId
- *
- * 許可されたルームIDかどうか
- * 予約しようとするユーザのロール、予約する施設により予約可能なルームはことなる。
- *
- * @param array $check 入力配列(room_id)
- * @return bool 成功時true, 失敗時false
- */
- public function allowedRoomId($check) {
- $roomId = $check['plan_room_id'];
- if ($roomId == 0) {
- // 公開先指定無し
- return true;
- }
- $this->loadModels([
- 'ReservationLocationsRoom' => 'Reservations.ReservationLocationsRoom',
- ]);
- $locationKey = $this->data[$this->alias]['location_key'];
- $userId = Current::read('User.id');
- $rooms = $this->ReservationLocationsRoom->getReservableRoomsByLocationKey($locationKey, $userId);
- $reservableRoomIds = array_column(array_column($rooms, 'Room'), 'id');
- return in_array($roomId, $reservableRoomIds);
- }
-
-/**
- * saveReservationPlan
- *
- * 予定データ登録
- *
- * @param array $data POSTされたデータ
- * @param string $procMode procMode
- * @param bool $isOriginRepeat isOriginRepeat
- * @param bool $isTimeMod isTimeMod
- * @param bool $isRepeatMod isRepeatMod
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @param bool $isMyPrivateRoom isMyPrivateRoom
- * @return bool 成功時true, 失敗時false
- * @throws InternalErrorException
- */
- public function saveReservationPlan($data, $procMode,
- $isOriginRepeat, $isTimeMod, $isRepeatMod, $createdUserWhenUpd, $isMyPrivateRoom) {
- // 設定画面を表示する前にこのルームのアンケートブロックがあるか確認
- // 万が一、まだ存在しない場合には作成しておく
- $this->Reservation->afterFrameSave(Current::read());
-
- $this->begin();
- $eventId = 0;
- $this->aditionalData = $data['WorkflowComment'];
-
- try {
- //備忘)
- //選択したTZを考慮したUTCへの変換は、この
- //convertToPlanParamFormat()の中でcallしている、
- //_setAndMergeDateTime()がさらにcallしている、
- //_setAndMergeDateTimeDetail()で行っています。
- //
- $planParam = $this->convertToPlanParamFormat($data);
-
- //CakeLog::debug("DBG: request_data[" . print_r($data, true) . "]");
-
- //call元の_reservationPost()の最初でgetStatus($data)の結果が
- //$data['ReservationActionPlan']['status']に代入されているので
- //ここは、その値を引っ張ってくるだけに直す。
- ////$status = $this->getStatus($data);
- $status = $data['ReservationActionPlan']['status'];
-
- //if ($status === false) { getStatus内でInternalErrorExceptionしている
- // CakeLog::error("save_Nより、statusが決定できませんでした。data[" .
- // serialize($data) . "]");
- // throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- //}
- if ($procMode === ReservationsComponent::PLAN_ADD) {
- //新規追加処理
- //CakeLog::debug("DBG: PLAN_ADD case.");
-
- //$this->insertPlan($planParam);
- $eventId = $this->insertPlan($planParam, $isMyPrivateRoom);
- //$this->updateCalendar($planParam);
- } else { //PLAN_EDIT
- //変更処理
- //CakeLog::debug("DBG: PLAN_MODIFY case.");
-
- //現予定を元に、新世代予定を作成する
- //1. statusは、cal用新statusである。
- //2. createdUserWhenUpdは、変更後の公開ルームidが「元予定生成者の*ルーム」から「編集者・承認者
- //(=ログイン者)のプライベート」に変化していた場合、created_userを元予定生成者から編集者・承認者
- //(=ログイン者)に変更する例外処理用。
- //3. isMyPrivateRoomは、変更後の公開ルームidが「編集者・承認者(=ログイン者)のプライベート」以外の場合、
- //仲間の予定はプライベートの時のみ許される子情報なので、これらはcopy対象から外す(stripする)例外処理用。
- //
- $editRrule = $this->getEditRruleForUpdate($data);
- $newPlan = $this->makeNewGenPlan(
- $data,
- $status,
- $createdUserWhenUpd,
- $isMyPrivateRoom,
- $editRrule
- );
-
- $isInfoArray = array($isOriginRepeat, $isTimeMod, $isRepeatMod, $isMyPrivateRoom);
- $eventId = $this->updatePlan($planParam, $newPlan, $status, $isInfoArray, $editRrule,
- $createdUserWhenUpd);
- }
-
- if ($this->isOverMaxRruleIndex) {
- CakeLog::info("save(ReservationPlanの内部で施設予約のrruleIndex回数超過が" .
- "発生している。強制rollbackし、画面にINDEXオーバーであることを" .
- "出す流れに乗せ、例外は投げないようにする。");
- $this->rollback();
- return false;
- }
-
- // メールやらなんやらが動作する前にはブロックをちゃんと用意しておかねばならない
- $this->Reservation->prepareBlock(
- $data['ReservationActionPlan']['plan_room_id'],
- Current::read('Language.id'),
- 'reservations');
-
- // 承認メール、公開通知メールの送信
- $this->sendWorkflowAndNoticeMail($eventId, $isMyPrivateRoom);
-
- $this->saveReservationTopics($eventId);
-
- $this->_enqueueEmail($data);
-
- $this->commit();
-
- } catch (Exception $ex) {
-
- $this->rollback($ex);
-
- return false;
- }
- return $eventId;
- }
-
-/**
- * saveReservationPlan
- *
- * 予定データ登録
- *
- * @param array $data POSTされたデータ
- * @param bool $isMyPrivateRoom isMyPrivateRoom
- * @return bool 成功時true, 失敗時false
- * @throws InternalErrorException
- */
- public function saveImportRecord($data, $isMyPrivateRoom) {
- $eventId = 0;
- //$this->aditionalData = $data['WorkflowComment'];
-
- try {
- //備忘)
- //選択したTZを考慮したUTCへの変換は、この
- //convertToPlanParamFormat()の中でcallしている、
- //_setAndMergeDateTime()がさらにcallしている、
- //_setAndMergeDateTimeDetail()で行っています。
- //
- $planParam = $this->convertToPlanParamFormat($data);
-
- //CakeLog::debug("DBG: request_data[" . print_r($data, true) . "]");
-
- //call元の_reservationPost()の最初でgetStatus($data)の結果が
- //$data['ReservationActionPlan']['status']に代入されているので
- //ここは、その値を引っ張ってくるだけに直す。
- ////$status = $this->getStatus($data);
- $status = $data['ReservationActionPlan']['status'];
-
- $eventId = $this->insertPlan($planParam, $isMyPrivateRoom);
-
- if ($this->isOverMaxRruleIndex) {
- CakeLog::info("save(ReservationPlanの内部で施設予約のrruleIndex回数超過が" .
- "発生している。強制rollbackし、画面にINDEXオーバーであることを" .
- "出す流れに乗せ、例外は投げないようにする。");
- $this->rollback();
- return false;
- }
-
- // メールやらなんやらが動作する前にはブロックをちゃんと用意しておかねばならない
- $this->Reservation->prepareBlock(
- $data['ReservationActionPlan']['plan_room_id'],
- Current::read('Language.id'),
- 'reservations');
-
- // 承認メール、公開通知メールの送信
- $this->sendWorkflowAndNoticeMail($eventId, $isMyPrivateRoom);
-
- $this->saveReservationTopics($eventId);
-
- $this->_enqueueEmail($data);
-
- //$this->commit();
-
- } catch (Exception $ex) {
-
- return false;
- }
- return $eventId;
- }
-
-/**
- * convertToPlanParamFormat
- *
- * 予定データ登録
- *
- * @param array $data POSTされたデータ
- * @return mixed 成功時$planParamデータ
- * @throws InternalErrorException
- */
- public function convertToPlanParamFormat($data) {
- $planParam = array();
-
- try {
- $model = ClassRegistry::init('Reservations.Reservation');
- if (!($reservation = $model->findByBlockKey($data['Block']['key']))) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- $planParam['reservation_id'] = $reservation[$model->alias]['id'];
-
- ////statusは、上流の_reservationPost()直後で施設予約独自status取得・代入
- ////が実行され、$data['ReservationAtionPlan']['status']にセットされているので
- ////単純なcopyの方に移動させた。
- ////$planParam['status'] = $this->getStatus($data);
- $planParam['language_id'] = Current::read('Language.id');
- $planParam['room_id'] = $data[$this->alias]['plan_room_id'];
- //このtimezoneは数値(ここで変換されてる)
- //$planParam['timezone'] = $this->_getTimeZoneOffsetNum(
- // $data[$this->alias]['timezone']);
- $planParam['timezone'] = $data[$this->alias]['timezone'];
- $planParam['timezone'] = $data[$this->alias]['timezone'];
- $planParam = $this->_setAndMergeDateTime($planParam, $data);
- $planParam = $this->_setAndMergeRrule($planParam, $data);
-
- $shareUsers = Hash::extract($data, 'GroupsUser.{n}.user_id');
- $myUserId = Current::read('User.id');
- $newShareUsers = array();
- foreach ($shareUsers as $user) {
- if ($user == $myUserId) {
- CakeLog::info('予定を共有する人に自分自身 user_id[' .
- $user . ']がいます。自分自身は除外します。');
- continue;
- }
- $newShareUsers[] = $user;
- }
- $planParam['share_users'] = $newShareUsers;
-
- //単純なcopyでOKな項目群
- $fields = array(
- 'title', 'title_icon', //FIXME: insert/update側に追加実装しないといけない項目
- 'location', 'contact', 'description',
- 'enable_email', 'email_send_timing', 'status',
- 'location_key',
- );
- foreach ($fields as $field) {
- $planParam[$field] = $data[$this->alias][$field];
- }
-
- //他の機構で渡さないといけないデータはここでセットすること
- //
- $planParam[ReservationsComponent::ADDITIONAL] = array();
- //ワークフロー用
- if (isset($data['WorkflowComment'])) {
- //ワークフローコメントをセットする。
- $planParam[ReservationsComponent::ADDITIONAL]['WorkflowComment'] = $data['WorkflowComment'];
- //ワークフローコメントがsave時Block.keyも一緒に必要としてるので、セットする。
- $planParam[ReservationsComponent::ADDITIONAL]['Block'] = array();
- $planParam[ReservationsComponent::ADDITIONAL]['Block']['key'] = Current::read('Block.key');
- }
-
- } catch(Exception $ex) {
- //パラメータ変換のどこかでエラーが発生
- CakeLog::error($ex->getMessage());
- throw($ex); //再throw
- }
- return $planParam;
- }
-
-/**
- * getStatus
- *
- * WorkflowStatus値の取り出し
- *
- * @param array $data POSTされたデータ
- * @return string 成功時 $status, 失敗時 例外をthrowする。
- */
- public function getStatus($data) {
- return $this->_getStatus($data);
- }
-
-/**
- * enqueueEmail
- *
- * メール通知がonの場合、通知時刻等を指定したデータをMailキューに登録する。
- *
- * @param array $data POSTされたデータ
- * @return void 失敗時 例外をthrowする.
- * @throws InternalErrorException
- */
- protected function _enqueueEmail($data) {
- //if ($data[$this->alias]['enable_email']) {
- // $[email_send_timing] => 60
- // FIXME: email_send_timingの値をつかって、Mailキューに登録する。
- //}
- }
-
-/**
- * proofreadValidationErrors
- *
- * validationErrors配列の内、対象項目とmessageを動的に校正する。(主にrruleの複合validate対応)
- *
- * @param Model &$model モデル
- * @return array
- */
- public function proofreadValidationErrors(&$model) {
- $msg = Hash::get($model->validationErrors, 'repeat_freq.0');
- if ($msg === ReservationsComponent::CALENDAR_RRULE_ERROR_HAPPEND) {
- unset($model->validationErrors['repeat_freq']);
- //CakeLog::debug("DBG: proofread count[" . count($model->reservationProofreadValidationErrors) . "]");
- if (count($model->reservationProofreadValidationErrors) > 0) {
- $model->validationErrors = Hash::merge($model->validationErrors,
- $model->reservationProofreadValidationErrors);
- }
- }
- }
-
-/**
- * getProcModeOriginRepeatAndModType
- *
- * 追加・変更、元データ繰返し有無、及び時間・繰返し系変更タイプの判断処理
- *
- * @param array $data $this->request->data配列が渡される
- * @param array $originEvent 変更元のevent関連データ
- * @return array 処理モード、元データ繰返し有無、時間系変更有無、繰返し系変更有無を配列で返す。
- */
- public function getProcModeOriginRepeatAndModType($data, $originEvent) {
- $cap = $data['ReservationActionPlan'];
-
- ////////////////////////////////
- //追加処理か変更処理かの判断
- //
- $procMode = ReservationsComponent::PLAN_ADD;
- if (!empty($cap['origin_event_id'])) {
- $procMode = ReservationsComponent::PLAN_EDIT;
- }
-
- ////////////////////////////////
- //元データが繰返しタイプかどうかの判断
- $isOriginRepeat = false;
- if (isset($cap['origin_num_of_event_siblings']) &&
- $cap['origin_num_of_event_siblings'] > 1) {
- $isOriginRepeat = true;
- }
-
- ////////////////////////////////
- //変更内容が、時間系の変更を含むかどうかの判断
- //(Google施設予約の考え方の導入)
- //
- $timeModCnt = 0;
- if (!empty($originEvent)) {
- //1)タイムゾーンの比較
- $this->__compareTz($cap, $originEvent, $timeModCnt);
-
- //2)日付時刻の比較
- //入力されたユーザ日付(時刻)を、選択TZを考慮し、サーバ系日付時刻に直してから比較する。
- $this->__compareDatetime($cap, $originEvent, $timeModCnt);
- }
- $isTimeMod = false;
- if ($timeModCnt) { //1箇所以上変化があればtrueにする。
- $isTimeMod = true;
- }
-
- ////////////////////////////////
- //変更内容が、繰返し系の変更を含むかどうかの判断
- //(Google施設予約の考え方の導入)
- //
- $repeatModCnt = 0;
- if (!empty($originEvent)) {
- //1)繰返しの比較
- $cru = new ReservationRruleUtil();
-
- //POSTされたデータよりrrule配列を生成する。
- $workParam = array();
- $workParam = $this->_setAndMergeRrule($workParam, $data);
- $capRrule = $cru->parseRrule($workParam['rrule']);
-
- //eventの親rruleモデルよりrruleを取り出し配列化する。
- $originRrule = $cru->parseRrule($originEvent['ReservationRrule']['rrule']);
-
- //CakeLog::debug("DBG: capRrule[" . serialize($capRrule) .
- // "] VS originRrule[" . serialize($originRrule) . "]");
- $diff1 = $this->__arrayRecursiveDiff($capRrule, $originRrule);
- $diff2 = $this->__arrayRecursiveDiff($originRrule, $capRrule);
- if (empty($diff1) && empty($diff2)) {
- //a集合=>b集合の差集合、b集合=>a集合の差集合、ともに空なので
- //集合要素に差はない、と判断する。
- } else {
- //差がみつかったので、繰返しに変更あり。
- //CakeLog::debug("DBG: 差がみつかったので、繰返しに変更あり。");
- ++$repeatModCnt;
- //CakeLog::debug("DBG 繰返しに変化あり! capRrule[" . serialize($capRrule) .
- //"] VS originRrule[" . serialize($originRrule) . "]");
- }
- }
- $isRepeatMod = false;
- if ($repeatModCnt) { //1箇所以上変化があればtrueにする。
- $isRepeatMod = true;
- }
-
- return array($procMode, $isOriginRepeat, $isTimeMod, $isRepeatMod);
- }
-
-/**
- * __compareTz
- *
- * タイムゾーンの比較
- *
- * @param array $cap $data['ReservationActionPlan']情報
- * @param array $originEvent 元イベント関連情報
- * @param int &$timeRepeatModCnt 変更数。タイムゾーンが変更されいていたら1加算する。
- * @return void
- */
- private function __compareTz($cap, $originEvent, &$timeRepeatModCnt) {
- //$tzTbl = ReservationsComponent::getTzTbl();
- //$originTzId = '';
- //foreach ($tzTbl as $tzInfo) {
- // //dobule と stringで、型が違うので == で比較すること
- // if ($tzInfo[ReservationsComponent::CALENDAR_timezone_VAL] ==
- // $originEvent['ReservationEvent']['timezone']) {
- // $originTzId = $tzInfo[ReservationsComponent::CALENDAR_TIMEZONE_ID];
- // break;
- // }
- //}
- $originTzId = $originEvent['ReservationEvent']['timezone'];
- if ($originTzId != $cap['timezone']) {
- //選択したTZが変更されている。
- //CakeLog::debug("DBG: 選択したTZが変更されている。");
- ++$timeRepeatModCnt;
- //CakeLog::debug("DBG: TZに変更あり! originTzId=[" . $originTzId .
- // "] VS cap[timezone]=[" . $cap['timezone'] . "]");
- }
- }
-
-/**
- * __compareDatetime
- *
- * 日付時刻の比較
- * 入力されたユーザ日付(時刻)を、選択TZを考慮し、サーバ系日付時刻に直してから比較する。
- *
- * @param array $cap $data['ReservationActionPlan']情報
- * @param array $originEvent 元イベント関連情報
- * @param int &$timeRepeatModCnt 変更数。日付時刻情報が変更されいていたら1加算する。
- * @return void
- */
- private function __compareDatetime($cap, $originEvent, &$timeRepeatModCnt) {
- if ($cap['enable_time']) {
- //開始ー終了. "YYYY-MM-DD hh:mm" - "YYYY-MM-DD hh:mm"
- //
- //FIXME: YYYY-MM-DD hh:mm のはずだが、手入力の時も問題ないか要確認。
- $nctm = new NetCommonsTime();
-
- $serverStartDatetime = $nctm->toServerDatetime($cap['detail_start_datetime'] . ':00',
- $cap['timezone']);
- $startDate = ReservationTime::stripDashColonAndSp(substr($serverStartDatetime, 0, 10));
- $startTime = ReservationTime::stripDashColonAndSp(substr($serverStartDatetime, 11, 8));
- $capDtstart = $startDate . $startTime;
-
- $serverEndDatetime = $nctm->toServerDatetime(
- $cap['detail_end_datetime'] . ':00', $cap['timezone']);
- $endDate = ReservationTime::stripDashColonAndSp(substr($serverEndDatetime, 0, 10));
- $endTime = ReservationTime::stripDashColonAndSp(substr($serverEndDatetime, 11, 8));
- $capDtend = $endDate . $endTime;
- } else {
- //終日指定
- //ReservationsAppMode.phpの_setAndMergeDateTimeEasy()の終日タイプと同様処理をする。
- //
- //FIXME: YYYY-MM-DDのはずだが、手入力の時も問題ないか要確認.
- $ymd = substr($cap['detail_start_datetime'], 0, 10); //YYYY-MM-DD
- list($serverStartDateZero, $serverNextDateZero) =
- (new ReservationTime())->convUserDate2SvrFromToDateTime(
- $ymd, $cap['timezone']);
- $startDate = ReservationTime::stripDashColonAndSp(substr($serverStartDateZero, 0, 10));
- $startTime = ReservationTime::stripDashColonAndSp(substr($serverStartDateZero, 11, 8));
- $capDtstart = $startDate . $startTime;
-
- $endDate = ReservationTime::stripDashColonAndSp(substr($serverNextDateZero, 0, 10));
- $endTime = ReservationTime::stripDashColonAndSp(substr($serverNextDateZero, 11, 8));
- $capDtend = $endDate . $endTime;
- }
- if ($capDtstart == $originEvent['ReservationEvent']['dtstart'] &&
- $capDtend == $originEvent['ReservationEvent']['dtend']) {
- //サーバ日付時間はすべて一致。
- } else {
- //サーバ日付時刻に変更あり。
- //CakeLog::debug("DBG: サーバ日付時刻に変更あり。");
- ++$timeRepeatModCnt;
- /*
- CakeLog::debug("DBG: dtstar,dtendに変更あり! POSTオリジナル enable_time[" .
- $cap['enable_time'] . "] detail_start_datetime[" . $cap['detail_start_datetime'] .
- "] detail_end_datetime[" . $cap['detail_end_datetime'] .
- "] timezone[" . $cap['timezone'] . "] => サーバ系 capDtstart[" .
- $capDtstart . "] capDtend[" . $capDtend . "] VS origin dtstart[" .
- $originEvent['ReservationEvent']['dtstart'] . "] dtend[" .
- $originEvent['ReservationEvent']['dtend'] . "]");
- */
- }
- }
-
-/**
- * __arrayRecursiveDiff
- *
- * 2配列の集合の比較
- *
- * @param array $aArray1 配列1
- * @param array $aArray2 配列2
- * @return array 配列1の内、配列2にふくまれてない要素を配列で返す。
- */
- private function __arrayRecursiveDiff($aArray1, $aArray2) {
- $aReturn = array();
- foreach ($aArray1 as $mKey => $mValue) {
- if (array_key_exists($mKey, $aArray2)) {
- if (is_array($mValue)) {
- $aRecursiveDiffResult = $this->__arrayRecursiveDiff($mValue, $aArray2[$mKey]);
- if (count($aRecursiveDiffResult)) {
- $aReturn[$mKey] = $aRecursiveDiffResult;
- }
- } else {
- if ($mValue != $aArray2[$mKey]) {
- $aReturn[$mKey] = $mValue;
- }
- }
- } else {
- $aReturn[$mKey] = $mValue;
- }
- }
- return $aReturn;
- }
-
-/**
- * 施設利用可能時間かのチェック
- *
- * @param int $startUnixTime 予約の開始日時
- * @param int $endUnixTime 予約の終了日時
- * @param string $locationStartTime 予約可能開始時刻
- * @param string $locationEndTime 予約可能終了時刻
- * @param array $reservableTimeTable 予約可能曜日
- * @return bool
- */
- protected function _isReservableLocationTimeRane($startUnixTime, $endUnixTime,
- $locationStartTime, $locationEndTime, $reservableTimeTable) {
- $weekDay = date('D', $startUnixTime); // 曜日 Mon .. Sun形式
- if (!in_array($weekDay, $reservableTimeTable)) {
- return false;
- }
- // 利用可能時間に収まっているか
- $startTime = date('H:i', $startUnixTime);
- $endTime = date('H:i', $endUnixTime);
- if ($startTime < $locationStartTime ||
- $locationEndTime < $endTime) {
- return false;
- }
- return true;
- }
-
-/**
- * 施設の予約可能時間かチェック
- *
- * @param string $startDateTime Y-m-d H:i:s ユーザタイムゾーン
- * @param string $endDateTime Y-m-d H:i:s ユーザタイムゾーン
- * @param array $location 施設情報
- * @param string $locationTimeZone 施設のタイムゾーン
- * @param array $reservableTimeTable 予約可能曜日
- * @return bool
- */
- protected function _validateLocationTimeRange(
- $startDateTime,
- $endDateTime,
- $location,
- $locationTimeZone,
- $reservableTimeTable
- ) {
- // 予約時間を施設のタイムゾーンの時間に変換
- // This timezone offset is id.
- $planTimeZone = new DateTimeZone($this->data[$this->alias]['timezone']);
- $startDateTime = new DateTime($startDateTime, $planTimeZone);
- $startDateTime->setTimezone($locationTimeZone);
- $startDateTime = $startDateTime->format('Y-m-d H:i:s');
-
- $endDateTime = new DateTime($endDateTime, $planTimeZone);
- $endDateTime->setTimezone($locationTimeZone);
- $endDateTime = $endDateTime->format('Y-m-d H:i:s');
-
- // 施設の利用可能時刻をUTCから施設のタイムゾーンに変換
- $locationStartTime = new DateTime(
- $location['ReservationLocation']['start_time'],
- new DateTimeZone('UTC')
- );
- $locationStartTime->setTimezone($locationTimeZone);
- $locationStartTime = $locationStartTime->format('H:i');
-
- $locationEndTime = new DateTime(
- $location['ReservationLocation']['end_time'],
- new DateTimeZone('UTC')
- );
- $locationEndTime->setTimezone($locationTimeZone);
- $locationEndTime = $locationEndTime->format('H:i');
- if ($locationStartTime == '00:00' && $locationStartTime == $locationEndTime) {
- // 00:00-00:00は00:00-24:00にする
- $locationEndTime = '24:00';
- }
- //
- //$length = strtotime($locationEndTime) = strtotime($locationStartTime);
- //$locationEndTime = strtotime($locationStartTime) + $length;
- //
-
- // 予約を日付毎に分割する
- // 以下、日付毎にチェックする
- // 曜日の制約OKかをチェック
- // 施設の利用可能時刻におさまってるかチェック
- $startDate = date('Y-m-d', strtotime($startDateTime));
- $endDate = date('Y-m-d', strtotime($endDateTime));
- if ($startDate != $endDate) {
- // 日付またぎの予約なら日付毎に分割してチェックする
- // $startDateから1日ずつたして$endDateまで
- $endDateUnixtime = strtotime($endDate);
- $current = strtotime($startDate);
- for ($current = $current; $current <= $endDateUnixtime; $current = $current + (24 * 60 * 60)) {
- if ($current == strtotime($startDate)) {
- // 開始日
- $startUnixTime = strtotime($startDateTime);
- } else {
- $startUnixTime = $current;
- }
- if ($current == strtotime($endDate)) {
- // 終了日
- $endUnixTime = strtotime($endDateTime);
- } else {
- $endUnixTime = $current + (24 * 60 * 60);
- }
- $result = $this->_isReservableLocationTimeRane(
- $startUnixTime,
- $endUnixTime,
- $locationStartTime,
- $locationEndTime,
- $reservableTimeTable
- );
- if (!$result) {
- return false;
- }
- }
- return true;
- } else {
- // 予約OKな曜日か
-
- $startUnixTime = strtotime($startDateTime);
- $endUnixTime = strtotime($endDateTime);
-
- return $this->_isReservableLocationTimeRane(
- $startUnixTime,
- $endUnixTime,
- $locationStartTime,
- $locationEndTime,
- $reservableTimeTable
- );
- }
- }
-}
diff --git a/Model/ReservationCsvRecord.php b/Model/ReservationCsvRecord.php
deleted file mode 100644
index 2fbdb03..0000000
--- a/Model/ReservationCsvRecord.php
+++ /dev/null
@@ -1,176 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class ReservationCsvRecord
- */
-class ReservationCsvRecord extends AppModel {
-
-/**
- * @var bool useTable
- */
- public $useTable = false;
-
-/**
- * @var array actsAs
- */
- public $actsAs = [
- 'Reservations.ReservationValidate',
- ];
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'title' => array(
- 'rule1' => array(
- 'rule' => array('notBlank'),
- 'required' => true,
- 'message' => __d('reservations', 'Invalid input. (plan title)'),
- ),
- 'rule2' => array(
- 'rule' => array('maxLength', ReservationsComponent::CALENDAR_VALIDATOR_TITLE_LEN),
- 'message' => sprintf(__d('reservations',
- '%d character limited. (plan title)'), ReservationsComponent::CALENDAR_VALIDATOR_TITLE_LEN),
- ),
- ),
- 'is_allday' => array(
- 'rule1' => array(
- 'rule' => array('inList', [0, 1, null]),
- 'message' => __d('reservations',
- '「利用時間の制限なし」は0, 1またはnullにしてください。'),
- ),
-
- ),
- 'start_date' => array(
- 'rule1' => array(
- 'rule' => array('checkYyyymmdd'),
- 'message' => __d('reservations', '予約日はyyyymmdd形式で入力して下さい。'),
- ),
- ),
- 'start_time' => array(
- 'rule1' => array(
- 'rule' => array('checkHis'),
- 'message' => __d('reservations', '開始時刻はhhmmss形式で入力して下さい。'),
- ),
- ),
- 'end_time' => array(
- 'rule1' => array(
- 'rule' => array('checkHis'),
- 'message' => __d('reservations', '終了時刻はhhmmss形式で入力して下さい。'),
- ),
- ),
- ));
- }
-
-/**
- * CSV行データからフィールド名ありデータにする
- * 時間指定なしのデータは施設の利用時間のMaxにする
- *
- * @param array $row $csv行データ
- * @param array $location ReservationLocation data
- * @return array
- */
- public function getCsvRecordByRow($row, $location) {
- $data = [];
- foreach ($row as $key => $value) {
- // 'null' って文字だったら nullにする
- $row[$key] = (strtolower($value) == 'null') ? null : $value;
- }
-
- $data['title'] = $row[0];
- $data['is_allday'] = $row[1];
- if ($data['is_allday'] == 1) {
- // 時間指定無し なら 施設のMax範囲
- //$userTimezone = Current::read('User.timezone');
- $ncTime = new NetCommonsTime();
- $locationStart = $ncTime->toUserDatetime($location['ReservationLocation']['start_time']);
- $locationEnd = $ncTime->toUserDatetime($location['ReservationLocation']['end_time']);
- $locationStartTime = date('His', strtotime($locationStart));
- $locationEndTime = date('His', strtotime($locationEnd));
- if ($locationStartTime == $locationEndTime) {
- // 24時間予約OKな施設
- $data['start_time'] = '000000';
- $data['end_time'] = '240000';
- } else {
- $data['start_time'] = $locationStartTime;
- $data['end_time'] = $locationEndTime;
- }
- } else {
- $data['start_time'] = $row[3];
- $data['end_time'] = $row[4];
- }
- $data['start_date'] = $row[2];
-
- $data['contact'] = $row[5];
- $data['description'] = $row[6];
- return $data;
- //$ret = [
- // 'ReservationCsvRecord' => $data,
- // ];
- //return $ret;
- }
-
-/**
- * csvRecordの値をReservationActionPlanのフィールドへマッピングする
- *
- * @param array $csvRecord csvRecord
- * @return array
- */
- public function convertActionPlanData($csvRecord) {
- $data = [];
- $data['title'] = $csvRecord['title'];
- $startDatetime =
- $this->_getDatetiemFromCsvData($csvRecord['start_date'], $csvRecord['start_time']);
- $endDatetime =
- $this->_getDatetiemFromCsvData($csvRecord['start_date'], $csvRecord['end_time']);
- if ($startDatetime >= $endDatetime) {
- // 開始、終了が逆点してるときは、終点がホントは24時間後
- $endDatetime = date('Y-m-d H:i',
- strtotime('+1 day', strtotime($endDatetime))
- );
- }
-
- $data['detail_start_datetime'] =
- $startDatetime;
- $data['detail_end_datetime'] =
- $endDatetime;
-
- $data['contact'] = $csvRecord['contact'];
- $data['description'] = $csvRecord['description'];
-
- return $data;
- }
-
-/**
- * Ymd, His から Y-m-d H:i を返す
- *
- * @param string $date Ymd
- * @param string $time His
- * @return string Y-m-d H:i
- */
- protected function _getDatetiemFromCsvData($date, $time) {
- $datetime = sprintf('%04d-%02d-%02d %02d:%02d',
- substr($date, 0, 4),
- substr($date, 4, 2),
- substr($date, 6, 2),
- substr($time, 0, 2),
- substr($time, 2, 2));
- return $datetime;
- }
-
-}
\ No newline at end of file
diff --git a/Model/ReservationDeleteActionPlan.php b/Model/ReservationDeleteActionPlan.php
deleted file mode 100644
index cb4c531..0000000
--- a/Model/ReservationDeleteActionPlan.php
+++ /dev/null
@@ -1,273 +0,0 @@
-
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppModel', 'Reservations.Model');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component');
-
-/**
- * Reservation Delete Action Plan Model
- *
- * @author AllCreator Co., Ltd.
- * @package NetCommons\Reservations\Model
- */
-class ReservationDeleteActionPlan extends ReservationsAppModel {
-
-/**
- * use table
- *
- * validateおよびinsert/update/deletePlan()呼び出しが
- * 目的のモデルなのでテーブルは使用しない。
- *
- * @var array
- */
- public $useTable = false;
-
-/**
- * use behaviors
- *
- * @var array
- */
- public $actsAs = array(
- 'NetCommons.OriginalKey',
- 'NetCommons.Trackable',
- //'Workflow.Workflow',
- //'Workflow.WorkflowComment',
- 'Reservations.ReservationValidate',
- 'Reservations.ReservationApp', //baseビヘイビア
- 'Reservations.ReservationInsertPlan', //Insert用
- 'Reservations.ReservationUpdatePlan', //Update用
- 'Reservations.ReservationDeletePlan', //Delete用
- 'Reservations.ReservationExposeRoom', //ルーム表示・選択用
- 'Reservations.ReservationPlanOption', //予定CRUD画面の各種選択用
- 'Reservations.ReservationPlanTimeValidate', //予定(時間関連)バリデーション専用
- 'Reservations.ReservationPlanRruleValidate', //予定(Rrule関連)バリデーション専用
- 'Reservations.ReservationPlanValidate', //予定バリデーション専用
- 'Reservations.ReservationPlanGeneration', //予定世代
- //新着情報
- 'Topics.Topics' => array(
- 'fields' => array(
- 'path' => '/:plugin_key/reservation_plans/view/:content_key',
- 'is_active' => 'is_active',
- 'is_latest' => 'is_latest',
- 'status' => 'status',
- ),
- 'search_contents' => array(
- 'title', 'location', 'contact', 'description'
- ),
- ),
- 'Reservations.ReservationTopics',
- );
- // @codingStandardsIgnoreStart
- // $_schemaはcakePHP2の予約語だが、宣言するとphpcsが警告を出すので抑止する。
- // ただし、$_schemaの直前にIgnoreStartを入れると、今度はphpdocが直前の
- // property説明がないと警告を出す。よって、この位置にIgnoreStartを挿入した。
-
-/**
- * use _schema
- *
- * @var array
- */
- public $_schema = array (
- // @codingStandardsIgnoreEnd
-
- // 入力カラムの定義、データ型とdefault値、必要ならlength値
-
- //削除ルール
- 'edit_rrule' => array('type' => 'string', 'default' => ''),
-
- //単一予定(0)or繰返し予定(1)
- 'is_repeat' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
-
- //繰返し時の最初のイベントID(1件だけのときは、origin_event_idと一致)
- 'first_sib_event_id' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
-
- //編集画面にでている対象イベントID
- 'origin_event_id' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
-
- //このイベントが「この予定のみ」指定ですでに変更されていた場合、1が立つ。
- 'is_recurrence' => array(
- 'type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false),
- );
-
-/**
- * Validation rules
- *
- * @var array
- */
- public $validate = array(
- );
-
-/**
- * Constructor. Binds the model's database table to the object.
- *
- * @param bool|int|string|array $id Set this ID for this model on startup,
- * can also be an array of options, see above.
- * @param string $table Name of database table to use.
- * @param string $ds DataSource connection name.
- * @see Model::__construct()
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- */
- public function __construct($id = false, $table = null, $ds = null) {
- parent::__construct($id, $table, $ds);
- }
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'edit_rrule' => array(
- 'rule1' => array(
- 'rule' => array('inList', array(
- ReservationAppBehavior::CALENDAR_PLAN_EDIT_THIS,
- ReservationAppBehavior::CALENDAR_PLAN_EDIT_AFTER,
- ReservationAppBehavior::CALENDAR_PLAN_EDIT_ALL,
- )),
- 'required' => true,
- 'allowEmpty' => false,
- 'message' => __d('reservations', 'Invalid input. (edit rrule)'),
- ),
- ),
- 'is_repeat' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'required' => true,
- 'allowEmpty' => false,
- //'message' => __d('reservations', '先頭のイベントIDが不正です'),
- //'message' => __d('reservations', 'イベントの繰り返しフラグが不正です'),
- 'message' => __d('reservations', 'Invalid input. (repeat flag)'),
- ),
- ),
- 'first_sib_event_id' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'required' => true,
- 'allowEmpty' => false,
- //'message' => __d('reservations', 'イベントの繰り返しフラグが不正です'),
- //'message' => __d('reservations', '先頭のイベントIDが不正です'),
- 'message' => __d('reservations', 'Invalid input. (first sib ebent id)'),
- ),
- ),
- 'origin_event_id' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'required' => true,
- 'allowEmpty' => false,
- 'message' => __d('reservations', 'Invalid input. (origin event id)'),
- ),
- ),
- 'is_recurrence' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'required' => true,
- 'allowEmpty' => false,
- 'message' => __d('reservations', 'Invalid input. (recurrence flag)'),
- ),
- ),
- ));
- return parent::beforeValidate($options);
- }
-
-/**
- * deleteReservationPlan
- *
- * 単一・繰返し3選択肢対応の予定データ削除
- *
- * @param array $data POSTされたデータ
- * @param int $originEventId originEventId (現eventのid)
- * @param string $originEventKey originEventKey(現eventのkey)
- * @param int $originRruleId originRruleId (現eventのreservation_rrule_id)
- * @param bool $isOriginRepeat 元データが繰返しかどうか
- * @return int 成功時、削除した指定のeventIdを返す.
- */
- public function deleteReservationPlan($data, $originEventId, $originEventKey,
- $originRruleId, $isOriginRepeat) {
- $this->begin();
- $eventKey = 0;
-
- try {
- $this->_dequeueEmail($data); //mailQueueからのDequeueを先にする。
-
- //現世代予定の情報を一式取り出す
-
- $curPlan = $this->makeCurGenPlan($data,
- $originEventId, $originEventKey, $originRruleId);
- //CakeLog::debug("DBG: curPlan[" . print_r($curPlan, true) . "]");
-
- $editRrule = $this->getEditRruleForDelete($data);
-
- $eventKey = $this->deletePlan($curPlan, $isOriginRepeat, $editRrule);
-
- $this->deleteReservationTopics($eventKey, $isOriginRepeat, $originEventKey, $editRrule);
-
- $this->commit();
- } catch (Exception $ex) {
-
- $this->rollback($ex);
-
- return 0;
- }
-
- return $eventKey;
- }
-
-/**
- * getEditRruleForDelete
- *
- * request->data情報より、editRruleモードを決定し返す。
- *
- * @param array $data data
- * @return string 成功時editRruleモード(0/1/2)を返す。失敗時 例外をthrowする
- * @throws InternalErrorException
- */
- public function getEditRruleForDelete($data) {
- if (empty($data['ReservationDeleteActionPlan']['edit_rrule'])) {
- //edit_rruleが存在しないか'0'ならば、「この予定のみ変更」
- return ReservationAppBehavior::CALENDAR_PLAN_EDIT_THIS;
- }
- if ($data['ReservationDeleteActionPlan']['edit_rrule'] ==
- ReservationAppBehavior::CALENDAR_PLAN_EDIT_AFTER) {
- return ReservationAppBehavior::CALENDAR_PLAN_EDIT_AFTER;
- }
- if ($data['ReservationDeleteActionPlan']['edit_rrule'] ==
- ReservationAppBehavior::CALENDAR_PLAN_EDIT_ALL) {
- return ReservationAppBehavior::CALENDAR_PLAN_EDIT_ALL;
- }
- //ここに流れてくる時は、モードの値がおかしいので、例外throw
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
-/**
- * _dequeueEmail
- *
- * メール通知がonの場合、通知時刻等を指定したデータをMailキューから外す
- *
- * @param array $data POSTされたデータ
- * @return void 失敗時 例外をthrowする.
- * @throws InternalErrorException
- */
- protected function _dequeueEmail($data) {
- //if ($data[$this->alias]['enable_email']) {
- // FIXME: 予定削除時、関連するMailキューデータを削除すること。
- //}
- }
-}
diff --git a/Model/ReservationEvent.php b/Model/ReservationEvent.php
deleted file mode 100644
index 5410062..0000000
--- a/Model/ReservationEvent.php
+++ /dev/null
@@ -1,784 +0,0 @@
-
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppModel', 'Reservations.Model');
-
-/**
- * ReservationEvent Model
- *
- * @author AllCreator Co., Ltd.
- * @package NetCommons\Reservations\Model
- */
-class ReservationEvent extends ReservationsAppModel {
-
-/**
- * use behaviors
- *
- * @var array
- */
- public $actsAs = array(
- 'NetCommons.OriginalKey',
- 'NetCommons.Trackable',
- 'Reservations.ReservationValidate',
- 'Reservations.ReservationApp', //baseビヘイビア
- 'Reservations.ReservationInsertPlan', //Insert用
- 'Reservations.ReservationUpdatePlan', //Update用
- 'Reservations.ReservationDeletePlan', //Delete用
- 'Reservations.ReservationSearchPlan', //Search用
- 'Reservations.ReservationRoleAndPerm', //施設予約役割・権限
- //'Workflow.Workflow',
- 'Reservations.ReservationWorkflow',
- 'Workflow.WorkflowComment',
- 'Wysiwyg.Wysiwyg' => array(
- 'fields' => array('description'),
- ),
- // 自動でメールキューの登録, 削除。ワークフロー利用時はWorkflow.Workflowより下に記述する
- 'Reservations.ReservationMailQueue' => array(
- 'embedTags' => array(
- 'X-SUBJECT' => 'title',
- 'X-LOCATION' => 'location',
- 'X-CONTACT' => 'contact',
- 'X-BODY' => 'description',
- 'X-URL' => array(
- 'controller' => 'reservation_plans'
- )
- ),
- 'workflowType' => 'workflow',
- ),
- 'Mails.MailQueueDelete',
- //新着情報
- 'Topics.Topics' => array(
- 'fields' => array(
- 'path' => '/:plugin_key/reservation_plans/view/:content_key',
- ),
- 'search_contents' => array(
- 'title', 'location', 'contact', 'description'
- ),
- ),
- //多言語
- 'M17n.M17n' => array(
- 'keyField' => false,
- ),
- );
-
-/**
- * belongsTo associations
- *
- * @var array
- */
- public $belongsTo = array(
- 'ReservationRrule' => array(
- 'className' => 'Reservations.ReservationRrule',
- 'foreignKey' => 'reservation_rrule_id',
- 'conditions' => '',
- 'fields' => '',
- 'order' => '',
- ),
- 'Language' => array(
- 'className' => 'M17n.Language',
- 'foreignKey' => 'language_id',
- 'conditions' => '',
- 'fields' => '',
- 'order' => ''
- ),
- 'ReservationLocation' => [
- 'className' => 'Reservations.ReservationLocation',
- 'foreignKey' => false,
- 'conditions' => [
- 'ReservationEvent.location_key = ReservationLocation.key',
- 'ReservationEvent.language_id = ReservationLocation.language_id'
- ],
- ],
-
- );
-
-/**
- * hasMany associations
- *
- * @var array
- */
- public $hasMany = array(
- 'ReservationEventShareUser' => array(
- 'className' => 'ReservationEventShareUser',
- 'foreignKey' => 'reservation_event_id',
- 'dependent' => true,
- 'conditions' => '',
- 'fields' => '',
- 'order' => array('id' => 'ASC'),
- 'limit' => '',
- 'offset' => '',
- 'exclusive' => '',
- 'finderQuery' => '',
- 'counterQuery' => ''
- ),
- );
-
-/**
- * Validation rules
- *
- * @var array
- */
- public $validate = array(
-
- );
-
-/**
- * Constructor. Binds the model's database table to the object.
- *
- * @param bool|int|string|array $id Set this ID for this model on startup,
- * can also be an array of options, see above.
- * @param string $table Name of database table to use.
- * @param string $ds DataSource connection name.
- * @see Model::__construct()
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- */
- public function __construct($id = false, $table = null, $ds = null) {
- parent::__construct($id, $table, $ds);
- $this->loadModels([
- 'Block' => 'Blocks.Block',
- ]);
-
- // すぐはずす
- //$this->Behaviors->unload('Mails.MailQueue');
- $this->Behaviors->unload('Reservations.ReservationMailQueue');
- $this->Behaviors->unload('Mails.MailQueueDelete');
- $this->Behaviors->unload('Topics.Topics');
- }
-
-/**
- * UploadFilesテーブルのroom_id及び、Wysiwygの画像・ファイルダウンロードURLに
- * 保存できるroom_idに変換する
- *
- * @param string|int $roomId 「公開対象」で選択されたルームID
- * @return string|int 変換されたルームID
- */
- private function __convertCanSaveUploadFileRoomId($roomId) {
- // 「-- 指定しない -- 」が選ばれたら、パブリックルームのルームIDに変換して、
- // Wysiwygにアップロードされた画像・ファイルは、パブリックルームの持ち物とする
-
- // 「-- 指定しない -- 」を示す定数はなく、直接、0と比較していいみたい
- // @see Reservations/Model/ReservationActionPlan::allowedRoomId()
- // @see Reservations/View/Helper/ReservationCommonHelper::getPlanMarkClassName()
- return $roomId == 0
- ? Space::getRoomIdRoot(Space::PUBLIC_SPACE_ID)
- : $roomId; // 「-- 指定しない --」以外ならば、そのままとする
- }
-
-/**
- * _doMergeWorkflowParamValidate
- *
- * Workflowパラメータ関連バリデーションのマージ
- *
- * @return void
- */
- protected function _doMergeWorkflowParamValidate() {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'language_id' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'status' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- 'required' => true,
- ),
- ),
- 'is_active' => array(
- 'rule1' => array(
- 'rule' => 'boolean',
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'is_latest' => array(
- 'rule1' => array(
- 'rule' => 'boolean',
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- ));
- }
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'reservation_rrule_id' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'room_id' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'target_user' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'title' => array(
- 'rule1' => array(
- 'rule' => array('notBlank'),
- 'message' => __d('reservations', 'Please input title text.'),
- ),
- ),
- 'is_allday' => array(
- 'rule1' => array(
- 'rule' => array('boolean'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'start_date' => array(
- 'rule1' => array(
- 'rule' => array('checkYmd'),
- 'message' => __d('reservations', 'Invalid value.'),
- ),
- 'rule2' => array(
- 'rule' => array('checkMaxMinDate', 'start'),
- 'message' => __d('reservations', 'Out of range value.'),
- ),
- ),
- 'start_time' => array(
- 'rule1' => array(
- 'rule' => array('checkHis'),
- 'message' => __d('reservations', 'Invalid value.'),
- ),
- ),
- 'end_date' => array(
- 'rule1' => array(
- 'rule' => array('checkYmd'),
- 'message' => __d('reservations', 'Invalid value.'),
- ),
- 'rule2' => array(
- 'rule' => array('checkMaxMinDate', 'end'),
- 'message' => __d('reservations', 'Out of range value.'),
- ),
- //ReservationActionPlanのvalidateでチェック済なので省略
- //'complex1' => array(
- // 'rule' => array('checkReverseStartEndDate'),
- // 'message' => __d('reservations', 'Reverse about start and end date.'),
- //),
- ),
- 'end_time' => array(
- 'rule1' => array(
- 'rule' => array('checkHis'),
- 'message' => __d('reservations', 'Invalid value.'),
- ),
- ),
- 'timezone' => array(
- 'rule1' => array(
- 'rule' => array('checkTimezone'),
- 'message' => __d('reservations', 'Invalid value.'),
- ),
- ),
- // link_id(int)からlink_key(string)に変えた
- //'link_id' => array(
- // 'rule1' => array(
- // 'rule' => array('numeric'),
- // 'message' => __d('net_commons', 'Invalid request.'),
- // ),
- //),
- 'recurrence_event_id' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'exception_event_id' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- ));
- $this->_doMergeWorkflowParamValidate(); //Workflowパラメータ関連validation
- return parent::beforeValidate($options);
- }
-
-/**
- * Called before each save operation, after validation. Return a non-true result
- * to halt the save.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if the operation should continue, false if it should abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforesave
- * @see Model::save()
- */
- public function beforeSave($options = array()) {
- $content = isset($this->data['ReservationEvent']['description'])
- ? $this->data['ReservationEvent']['description']
- : null;
- if (empty($content)) {
- return true;
- }
-
- $roomId = $this->__convertCanSaveUploadFileRoomId($this->data['ReservationEvent']['room_id']);
- $newDescription = $this->consistentContent($content, $roomId);
- if ($content != $newDescription) {
- $this->data['ReservationEvent']['description'] = $newDescription;
- }
-
- return true;
- }
-
-/**
- * Called after each successful save operation.
- *
- * @param bool $created True if this save created a new record
- * @param array $options Options passed from Model::save().
- * @return void
- * @throws InternalErrorException
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#aftersave
- * @see Model::save()
- */
- public function afterSave($created, $options = array()) {
- $content = isset($this->data['ReservationEvent']['description'])
- ? $this->data['ReservationEvent']['description']
- : null;
- // このroom_idは、Wysiwygでアップロードした画像やファイルの持ち主を決めるための値であり、
- // block_keyの検索条件には使用しない
- $roomId = isset($this->data['ReservationEvent']['room_id'])
- ? $this->__convertCanSaveUploadFileRoomId($this->data['ReservationEvent']['room_id'])
- : null;
- // block_keyを取得
- // 施設予約のBlockは「パブリックルームに固定で1つ」なので、room_idの検索条件はパブリックルーム固定にしておく
- $blockKey = $this->Block->findByRoomIdAndPluginKey(
- Space::getRoomIdRoot(Space::PUBLIC_SPACE_ID),
- 'reservations',
- ['key'],
- null,
- -1
- );
- $updateDescription = [
- 'content_key' => isset($this->data['ReservationEvent']['key'])
- ? $this->data['ReservationEvent']['key']
- : null,
- 'block_key' => isset($blockKey['Block']['key'])
- ? $blockKey['Block']['key']
- : null,
- 'room_id' => $roomId
- ];
-
- $this->updateUploadFile($content, $updateDescription);
- }
-
-/**
- * Returns true if all fields pass validation. Will validate hasAndBelongsToMany associations
- * that use the 'with' key as well. Since _saveMulti is incapable of exiting a save operation.
- *
- * Will validate the currently set data. Use Model::set() or Model::create() to set the active data.
- *
- * @param array $options An optional array of custom options to be made available in the beforeValidate callback
- * @return bool True if there are no errors
- */
- public function validates($options = array()) {
- //if (Hash::get($this->data, 'ReservationEvent.room_id')) {
- // ReservationPermissiveRooms::setCurrentPermission($this->data['ReservationEvent']['room_id']);
- //}
- return parent::validates($options);
- }
-
-/**
- * 自分もふくめた兄弟一覧を取得
- *
- * @param int $rruleId 兄弟が共通にもつrruleのid
- * @param int $needLatest 最新に限定するかどうか。0:最新に限定しない。1:最新に限定する。
- * @param int $languageId 言語ID
- * @return array 兄弟一覧の配列
- */
- public function getSiblings($rruleId, $needLatest = 0, $languageId = 0) {
- if (empty($languageId)) {
- $languageId = Current::read('Language.id');
- }
- $options = array(
- 'conditions' => array(
- $this->alias . '.reservation_rrule_id' => $rruleId,
- //$this->alias . '.is_latest' => 1,
- //$this->alias . '.language_id' => $languageId,
- 'OR' => array(
- $this->alias . '.language_id' => $languageId,
- $this->alias . '.is_translation' => false
- ),
- $this->alias . '.exception_event_id' => 0, //除外でない
- ),
- //'recursive' => -1, //eventだけとる
- 'recursive' => 1, //belongsTo, hasOne, hasManyをとる
- 'callbacks' => false,
- 'order' => array($this->alias . '.dtstart' => 'ASC'),
- );
-
- if ($needLatest) {
- $field = $this->alias . '.is_latest';
- $options['conditions'][$field] = 1;
- }
- return $this->find('all', $options);
- }
-
-/**
- * canDeleteContent
- *
- * 削除できる予定データか確認
- *
- * @param array $data 予定データ
- * @return bool
- */
- public function canDeleteContent($data) {
- $permissionPolicy = new ReservationEventPermissionPolicy($data);
- $userId = Current::read('User.id');
- return $permissionPolicy->canEdit($userId);
- //// 発行済み状態を取得
- //$isPublished = Hash::get($data, 'ReservationEvent.is_published');
- //
- //// 予定の対象ルームIDを取得
- //$roomId = Hash::get($data, 'ReservationEvent.room_id');
- //
- //// データの対象空間での発行権限を取得
- //$canPublish = ReservationPermissiveRooms::isPublishable($roomId);
- //
- //// データの編集権限を取得
- //$canEdit = $this->canEditWorkflowContent($data);
- //
- //// 発行済みだと
- //if ($isPublished) {
- // // 発行権限と編集権限の両方がないと削除できない
- // return ($canPublish && $canEdit);
- //} else {
- // // 未発行の場合
- // // 編集権限さえあれば良い
- // return $canEdit;
- //}
- }
-/**
- * getEventById
- *
- * イベント情報の取得
- *
- * @param int $eventId $eventId
- * @return array 取得したイベント情報配列
- */
- public function getEventById($eventId) {
- $conditions = array(
- $this->alias . '.id' => $eventId,
- );
- $options = array(
- 'conditions' => $conditions,
- 'recursive' => 1, //belongsTo, hasOne, hasManyまで取得
- );
- $event = $this->find('first', $options);
- if (!$event) {
- CakeLog::error(
- __d('reservations', 'There is no event. To continue the event in the blank.'));
- $event = array();
- return array(); //add
- }
- //if (! $this->_isGetableEvent($event)) {
- // return array();
- //}
- return $event;
- }
-
-/**
- * getEventByKey
- *
- * イベント情報の取得
- *
- * @param string $eventKey $eventKey
- * @return array 取得したイベント情報配列
- */
- public function getEventByKey($eventKey) {
- $conditions = array(
- $this->alias . '.key' => $eventKey,
- 'OR' => array(
- $this->alias . '.is_active' => true,
- $this->alias . '.is_latest' => true,
- )
- );
- $options = array(
- 'conditions' => $conditions,
- 'recursive' => 1, //belongsTo, hasOne, hasManyまで取得
- 'order' => array($this->alias . '.id DESC')
- );
- $events = $this->find('all', $options);
- if (!$events) {
- CakeLog::error(
- __d('reservations', 'There is no event. To continue the event in the blank.'));
- return array();
- }
- // 新しいもの順にチェック
- foreach ($events as $event) {
- //if ($this->_isGetableEvent($event)) {
- // 発行済みデータかどうかチェックし、値を追加する
- $conditions[$this->alias . '.is_active'] = true;
- $options = array(
- 'fields' => array(
- 'ReservationEvent.is_active',
- 'Room.space_id'
- ),
- 'conditions' => $conditions,
- 'recursive' => -1,
- 'joins' => array(
- array(
- 'table' => 'rooms',
- 'alias' => 'Room',
- 'type' => 'LEFT',
- 'conditions' => array(
- 'ReservationEvent.room_id = Room.id'
- )
- )
- ),
- );
- $isPublished = $this->find('first', $options);
- // 最終発行公開空間がプライベート空間であった時は「発行済みだよ」にしない
- // プライベート空間での発行は「公開」と見なさないのである
- $event[$this->alias]['is_published'] = false;
- if ($isPublished) {
- if ($isPublished['Room']['space_id'] != Space::PRIVATE_SPACE_ID) {
- $event[$this->alias]['is_published'] =
- Hash::get($isPublished, $this->alias . '.is_active');
- }
- }
- return $event;
- //}
- }
- // 該当のものが見つからなかったってこと
- return array();
- }
-
- ///**
- // * screenPlansUsingGetable($plans);
- // *
- // * 見てもよいイベント情報のみフィルターで通す
- // *
- // * @param array $plans plans
- // * @return array フィルター済のplans配列
- // */
- // public function screenPlansUsingGetable($plans) {
- // $screendPlans = array();
- // foreach ($plans as $event) {
- // if ($this->_isGetableEvent($event)) {
- // $screendPlans[] = $event;
- // }
- // }
- // return $screendPlans;
- // }
-
- ///**
- // * _isGetableEvent
- // *
- // * 見てもよいイベント情報なのか判断する
- // *
- // * @param array &$event reservation event data
- // * @return bool
- // */
- // protected function _isGetableEvent(&$event) {
- // // eventの空間取り出す
- // $roomId = $event['ReservationEvent']['room_id'];
- // // 作成者取り出す
- // $userId = $event['ReservationEvent']['created_user'];
- // // eventの空間でcreatableでかつ作成者または編集者以上
- // if ((ReservationPermissiveRooms::isCreatable($roomId) && $userId == Current::read('User.id')) ||
- // ReservationPermissiveRooms::isEditable($roomId)) {
- // // is_latestのものを返す
- // if ($event['ReservationEvent']['is_latest']) {
- // // 共有予定フラグを立てておく
- // $this->_setSharedFlag($event);
- // return true;
- // }
- // } else {
- // // 上記以外
- // // is_activeのものを返す
- // if ($event['ReservationEvent']['is_active']) {
- // // 共有予定フラグを立てておく
- // $this->_setSharedFlag($event);
- // return true;
- // }
- // }
- // return false;
- // }
-
- ///**
- // * _setSharedFlag
- // *
- // * 共有した、共有された予定である場合は、フラグを設定しておく
- // *
- // * @param array &$event イベント情報
- // * @return void
- // */
- // protected function _setSharedFlag(&$event) {
- // $event[$this->alias]['pseudo_friend_share_plan'] = false; // 共有された
- // $event[$this->alias]['is_share'] = false; // 共有した
- // $userId = Current::read('User.id');
- // if (! empty($userId)) {
- // $share = Hash::extract($event, 'ReservationEventShareUser.{n}[share_user=' . $userId . ']');
- // if (! empty($share)) {
- // $event[$this->alias]['pseudo_friend_share_plan'] = true;
- // } else {
- // if (! empty($event['ReservationEventShareUser'])) {
- // $event[$this->alias]['is_share'] = true;
- // }
- // }
- // }
- // }
-
-/**
- * prepareActiveForUpd
- *
- * eventデータの内、UPDATE時、is_active情報のみ整える。
- *
- * @param array &$event event
- * @return void
- */
- public function prepareActiveForUpd(&$event) {
- if (! (isset($event['ReservationEvent']['id']) && $event['ReservationEvent']['id'] > 0)) {
- //idがない。つまりINSERT用evnetデータの時は、なにもしない。
- return;
- }
- //以後、eventがUPDATE用であることが担保される。
-
- /////////////////////////////////////////////////////////
- //ここで行うべきことは、is_activeの再調整処理のみ。 //
- //作成者、作成日およびis_latestの調整は INSERTsave前の //
- //prepareLatestCreatedForIns発行で処置済なので、UPDATE //
- //ではなにもしなくてよい。 //
- /////////////////////////////////////////////////////////
-
- //is_activeのセット
- $event['ReservationEvent']['is_active'] = false;
- if ($event['ReservationEvent']['status'] === WorkflowComponent::STATUS_PUBLISHED) {
- //statusが公開ならis_activeを付け替える
- $event['ReservationEvent']['is_active'] = true;
-
- //現状のis_activeを外す
- $this->updateAll(
- array('ReservationEvent' . '.is_active' => false),
- array(
- 'ReservationEvent' . '.' . 'key' => $event['ReservationEvent']['key'],
- //'ReservationEvent' . '.language_id' => (int)$event['ReservationEvent']['language_id'],
- 'OR' => array(
- 'ReservationEvent' . '.language_id' => $event['ReservationEvent']['language_id'],
- 'ReservationEvent' . '.is_translation' => false
- ),
- 'ReservationEvent' . '.is_active' => true,
- 'ReservationEvent' . '.' . 'id !=' =>
- $event['ReservationEvent']['id'], //WFとの違い。update対象eventは除外。
- )
- );
- }
- }
-
-/**
- * prepareLatestCreatedForIns
- *
- * eventデータの内、INSERT時、is_latestとcreated,created_user情報のみ整える。
- *
- * @param array &$event event
- * @param int $createdUserWhenUpd createdUserWhenUpd
- * @return void
- */
- public function prepareLatestCreatedForIns(&$event, $createdUserWhenUpd = null) {
- if (isset($event['ReservationEvent']['id']) && $event['ReservationEvent']['id'] > 0) {
- //idがある。つまりUPDATE用evnetデータの時は、なにもしない。
- return;
- }
- //以後、eventがINSERT用であることが担保される。
-
- ////////////////////////////////////////////////////////
- //is_latestの真の調整は、UPDATEsave発行直前までdelay //
- //させるため、ここでは暫定でfalse固定でいれておく。 //
- ////////////////////////////////////////////////////////
- $event['ReservationEvent']['is_active'] = false; //is_activeの暫定offセット
-
- ///////////////////////////////////////////////////////
- //ここで行うべきことは、作成者、作成日およびis_latest//
- //の調整のみ。 //
- ///////////////////////////////////////////////////////
- //作成者のコピー
- $created = $this->find('first', array(
- 'recursive' => -1,
- 'fields' => array('created', 'created_user'),
- 'conditions' => array(
- 'key' => $event['ReservationEvent']['key']
- ),
- ));
- if ($created) {
- $event['ReservationEvent']['created'] = $created['ReservationEvent']['created'];
- $event['ReservationEvent']['created_user'] = $created['ReservationEvent']['created_user'];
- }
-
- //施設予約独自の例外追加1)
- //変更後の公開ルームidが、「元予定生成者の*ルーム」から「編集者・承認者(=ログイン者)の
- //プライベート」に変化していた場合、created_userを、元予定生成者「から」編集者・承認者(=ログイン者)
- //「へ」に変更すること。
- //=>これを考慮したcreatedUserWhenUpdを使えばよい。
- if ($createdUserWhenUpd !== null) {
- $event['ReservationEvent']['created'] = $createdUserWhenUpd;
- }
-
- //is_latestのセット
- $event['ReservationEvent']['is_latest'] = true;
-
- //現状のis_latestを外す
- $this->updateAll(
- array('ReservationEvent' . '.is_latest' => false),
- array(
- 'ReservationEvent' . '.' . 'key' => $event['ReservationEvent']['key'],
- //'ReservationEvent' . '.language_id' => (int)$event['ReservationEvent']['language_id'],
- 'OR' => array(
- 'ReservationEvent' . '.language_id' => (int)$event['ReservationEvent']['language_id'],
- 'ReservationEvent' . '.is_translation' => false
- ),
- 'ReservationEvent' . '.is_latest' => true,
- )
- );
- }
-
-/**
- * 指定されたルームの予約を一括削除
- *
- * @param int $roomId roomId
- * @return bool
- */
- public function deleteEventByRoomId($roomId) {
- $conditions = $this->getWorkflowConditions(['ReservationEvent.room_id' => $roomId]);
- $deleteEvent = $this->find('all', [
- 'conditions' => $conditions,
- 'fields' => ['ReservationEvent.key']
- ]);
- $keys = Hash::combine($deleteEvent, '{n}.ReservationEvent.key', '{n}.ReservationEvent.key');
- $deleteConditions = [
- 'ReservationEvent.key' => $keys,
- ];
- if ($this->deleteAll($deleteConditions)) {
- return true;
- }
- return false;
- }
-
-}
diff --git a/Model/ReservationEventShareUser.php b/Model/ReservationEventShareUser.php
deleted file mode 100644
index 39529d9..0000000
--- a/Model/ReservationEventShareUser.php
+++ /dev/null
@@ -1,111 +0,0 @@
-
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppModel', 'Reservations.Model');
-
-/**
- * ReservationEventShareUser Model
- *
- * @author AllCreator Co., Ltd.
- * @package NetCommons\Reservations\Model
- */
-class ReservationEventShareUser extends ReservationsAppModel {
-
-/**
- * use behaviors
- *
- * @var array
- */
- public $actsAs = array(
- //'NetCommons.OriginalKey',
- 'NetCommons.Trackable',
- //'Workflow.WorkflowComment',
- //'Workflow.Workflow',
- //'Reservations.ReservationValidate',
- //'Reservations.ReservationApp', //baseビヘイビア
- //'Reservations.ReservationInsertPlan', //Insert用
- //'Reservations.ReservationUpdatePlan', //Update用
- //'Reservations.ReservationDeletePlan', //Delete用
- );
-
-/**
- * belongsTo associations
- *
- * @var array
- */
- public $belongsTo = array(
- 'ReservationEvent' => array(
- 'className' => 'Reservations.ReservationEvent',
- 'foreignKey' => 'reservation_event_id',
- 'conditions' => '',
- 'fields' => '',
- 'order' => ''
- )
- );
-
-/**
- * hasMany associations
- *
- * @var array
- */
- public $hasMany = array(
- );
-
-/**
- * Validation rules
- *
- * @var array
- */
- public $validate = array(
- );
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- //'calender_event_id' => array(
- 'reservation_event_id' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'required' => true,
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'share_user' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'required' => true,
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- ));
-
- return parent::beforeValidate($options);
- }
-
-/**
- * Called after each successful save operation.
- *
- * @param bool $created True if this save created a new record
- * @param array $options Options passed from Model::save().
- * @return void
- * @throws InternalErrorException
- */
-}
diff --git a/Model/ReservationFrameSetting.php b/Model/ReservationFrameSetting.php
deleted file mode 100644
index a7e3f07..0000000
--- a/Model/ReservationFrameSetting.php
+++ /dev/null
@@ -1,197 +0,0 @@
-
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppModel', 'Reservations.Model');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component'); //constを使うため
-App::uses('Space', 'Rooms.Model');
-
-/**
- * ReservationFrameSetting Model
- *
- * @author AllCreator Co., Ltd.
- * @package NetCommons\Reservations\Model
- */
-class ReservationFrameSetting extends ReservationsAppModel {
-
-/**
- * getFrameSetting関数が何度も繰り返し呼び出された時のための保持変数
- *
- * @var array
- */
- protected $_getFrameSettingData = array();
-
-/**
- * use behaviors
- *
- * @var array
- */
- public $actsAs = array(
- 'NetCommons.OriginalKey', // key,origin_id あったら動作し、
- // なくても無害なビヘイビア
- );
-
-/**
- * belongsTo associations
- *
- * @var array
- */
- public $belongsTo = array(
- 'Frame' => array(
- 'className' => 'Frames.Frame',
- 'foreignKey' => 'frame_key',
- 'conditions' => '',
- 'fields' => '',
- 'order' => ''
- ),
- );
-
-/**
- * Validation rules
- *
- * @var array
- */
- public $validate = array();
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'display_type' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'required' => true,
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- 'rule2' => array(
- 'rule' => array('inList', ReservationsComponent::$reservationTypes),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'timeline_base_time' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'required' => true,
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- 'rule2' => array(
- 'rule' => array('comparison', '>=', ReservationsComponent::CALENDAR_TIMELINE_MIN_TIME),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- 'rule3' => array(
- 'rule' => array('comparison', '<=', ReservationsComponent::CALENDAR_TIMELINE_MAX_TIME),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'display_start_time_type' => array(
- 'rule1' => array(
- 'rule' => 'boolean',
- 'required' => true,
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- ));
-
- return parent::beforeValidate($options);
- }
-
-/**
- * saveFrameSetting
- *
- * @param array $data save data
- * @return mixed On success Model::$data if its not empty or true, false on failure
- * @throws InternalErrorException
- */
- public function saveFrameSetting($data) {
- //トランザクションBegin
- $this->begin();
- try {
- // フレーム設定のバリデート
- $this->set($data);
- if (! $this->validates()) {
- CakeLog::error(serialize($this->validationErrors));
- $this->rollback();
- return false;
- }
-
- //フレームの登録
- //バリデートは前で終わっているので第二引数=false
- $data = $this->save($data, false);
- if (! $data) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- $this->commit();
- } catch (Exception $ex) {
- $this->rollback($ex);
- }
-
- return $data;
- }
-
-/**
- * setDefaultValue
- *
- * @param array &$data save data
- * @return void
- * @throws InternalErrorException
- */
- public function setDefaultValue(&$data) {
- $default = $this->getDefaultFrameSetting();
- $data = Hash::merge($data, $default);
- }
-
-/**
- * getFrameSetting
- *
- * @return array 施設予約表示形式情報
- */
- public function getFrameSetting() {
- $frameId = Current::read('Frame.id');
- if (isset($this->_getFrameSettingData[$frameId])) {
- return $this->_getFrameSettingData[$frameId];
- }
- $frameSetting = $this->find('first', array(
- 'recursive' => -1,
- 'conditions' => array('frame_key' => Current::read('Frame.key'))
- ));
- if (! $frameSetting) {
- $frameSetting = $this->getDefaultFrameSetting();
- }
- $this->_getFrameSettingData[$frameId] = $frameSetting;
- return $frameSetting;
- }
-
-/**
- * getDefaultFrameSetting
- *
- * @return array 施設予約表示形式デフォルト情報
- */
- public function getDefaultFrameSetting() {
- //frame_key,room_idは明示的に設定されることを想定し、setDefaultではなにもしない。
- return $this->create(array(
- $this->alias => array(
- 'display_type' => ReservationsComponent::RESERVATION_DISP_TYPE_DEFAULT,
- 'timeline_base_time' => ReservationsComponent::CALENDAR_TIMELINE_DEFAULT_BASE_TIME,
- 'id' => null,
- )
- ));
- }
-}
diff --git a/Model/ReservationImport.php b/Model/ReservationImport.php
deleted file mode 100644
index 3321f73..0000000
--- a/Model/ReservationImport.php
+++ /dev/null
@@ -1,45 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class ReservationImport
- */
-class ReservationImport extends AppModel {
-
-/**
- * @var bool useTable
- */
- public $useTable = false;
-
-/**
- * @var string Alias
- */
- public $alias = 'ReservationActionPlan';
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'csv_file' => array(
- 'rule1' => array(
- 'rule' => array('extension', ['csv']),
- 'message' => __d('reservations', 'Please select csv file.'),
- ),
- ),
- ));
- }
-}
\ No newline at end of file
diff --git a/Model/ReservationLocation.php b/Model/ReservationLocation.php
deleted file mode 100644
index 9866a4e..0000000
--- a/Model/ReservationLocation.php
+++ /dev/null
@@ -1,666 +0,0 @@
-
- * @author Your Name
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppModel', 'Reservations.Model');
-App::uses('ReservationLocationOpenText', 'Reservations.Lib');
-
-/**
- * Summary for ReservationLocation Model
- *
- * @property ReservationLocationsRoom $ReservationLocationsRoom
- * @property ReservationLocationsApprovalUser $ReservationLocationsApprovalUser
- * @property ReservationLocationReservable $ReservationLocationReservable
- * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
- */
-class ReservationLocation extends ReservationsAppModel {
-
-/**
- * use behaviors
- *
- * @var array
- */
- public $actsAs = array(
- 'NetCommons.OriginalKey',
- 'Wysiwyg.Wysiwyg' => array(
- 'fields' => array('detail'),
- ),
- //多言語
- 'M17n.M17n' => array(
- 'commonFields' => array( // 言語が異なっても同じにするフィールド
- 'category_id',
- 'weight'
- ),
- 'afterCallback' => false,
- ),
- 'Reservations.ReservationLocationDelete',
- 'Reservations.ReservationValidate',
- 'Reservations.ReservationLocationValidate',
- );
-
-/**
- * belongsTo associations
- *
- * @var array
- */
- public $belongsTo = array(
- 'Language' => array(
- 'className' => 'M17n.Language',
- 'foreignKey' => 'language_id',
- 'conditions' => '',
- 'fields' => '',
- 'order' => ''
- ),
- 'Category' => array(
- 'className' => 'Categories.Category',
- 'foreignKey' => 'category_id',
- 'conditions' => '',
- 'fields' => '',
- 'order' => ''
- ),
- );
-
-/**
- * 施設キャッシュ用
- *
- * @var array
- */
- protected $_locations = [];
-
-/**
- * Constructor. Binds the model's database table to the object.
- *
- * @param bool|int|string|array $id Set this ID for this model on startup,
- * can also be an array of options, see above.
- * @param string $table Name of database table to use.
- * @param string $ds DataSource connection name.
- * @see Model::__construct()
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- */
- public function __construct($id = false, $table = null, $ds = null) {
- parent::__construct($id, $table, $ds);
- $this->loadModels([
- 'Block' => 'Blocks.Block',
- ]);
- }
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate,
- array(
- 'language_id' => array(
- 'numeric' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'category_id' => array(
- 'numeric' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- 'allowEmpty' => true,
- ),
- ),
- 'location_name' => array(
- 'notBlank' => array(
- 'rule' => array('notBlank'),
- 'message' => __d('net_commons', 'Please input %s.', __d('reservations', 'Location name')),
- ),
- ),
- 'time_table' => array(
- 'notBlank' => array(
- 'rule' => array('notBlank'),
- 'message' => __d('reservations', 'Invalid input. Please enter week day.'),
- ),
- ),
- 'start_time' => array(
- 'rule1' => array(
- 'rule' => array('validateTime'),
- 'message' => __d('reservations', 'Invalid input. (time)'),
- ),
- 'rule2' => array(
- 'rule' => array('validateTimeRange', 'end_time'),
- 'message' => __d('reservations', 'Invalid input. Please enter the correct time.'),
- ),
- ),
- 'end_time' => array(
- 'rule1' => array(
- 'rule' => array('validateTime'),
- 'message' => __d('reservations', 'Invalid input. (time)'),
- ),
- ),
- 'use_private' => array(
- 'boolean' => array(
- 'rule' => array('boolean'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'use_all_rooms' => array(
- 'boolean' => array(
- 'rule' => array('boolean'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'weight' => array(
- 'numeric' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- ));
-
- return parent::beforeValidate($options);
- }
-
-/**
- * Called before each find operation. Return false if you want to halt the find
- * call, otherwise return the (modified) query data.
- *
- * @param array $query Data used to execute this query, i.e. conditions, order, etc.
- * @return mixed true if the operation should continue, false if it should abort; or, modified
- * $query to continue with new $query
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforefind
- */
- public function beforeFind($query) {
- if (Hash::get($query, 'recursive') > -1 && ! $this->id) {
- $belongsTo = $this->Category->bindModelCategoryLang('ReservationLocation.category_id');
- $this->bindModel($belongsTo, true);
- }
- return true;
- }
-
-/**
- * Called before each save operation, after validation. Return a non-true result
- * to halt the save.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if the operation should continue, false if it should abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforesave
- * @see Model::save()
- */
- public function beforeSave($options = array()) {
- $content = isset($this->data['ReservationLocation']['detail'])
- ? $this->data['ReservationLocation']['detail']
- : null;
- if (empty($content)) {
- return true;
- }
-
- // Wysiwygでアップロードされた画像やファイルの持ち主は、各ルームではなく、
- // パブリックルームであるべき
- // 各ルームが削除された場合でも、画像やファイルは残しておくため
- $roomId = Space::getRoomIdRoot(Space::PUBLIC_SPACE_ID);
- $newDetail = $this->consistentContent($content, $roomId);
- if ($content != $newDetail) {
- $this->data['ReservationLocation']['detail'] = $newDetail;
- }
-
- return true;
- }
-
-/**
- * Called after each successful save operation.
- *
- * @param bool $created True if this save created a new record
- * @param array $options Options passed from Model::save().
- * @return void
- * @throws InternalErrorException
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#aftersave
- * @see Model::save()
- */
- public function afterSave($created, $options = array()) {
- $content = isset($this->data['ReservationLocation']['detail'])
- ? $this->data['ReservationLocation']['detail']
- : null;
- // Wysiwygでアップロードされた画像やファイルの持ち主は、各ルームではなく、
- // パブリックルームであるべき
- // 各ルームが削除された場合でも、画像やファイルは残しておくため
- // (このroom_idは、Wysiwygでアップロードした画像やファイルの持ち主を決めるための値であり、
- // block_keyの検索条件には使用しない)
- $roomId = Space::getRoomIdRoot(Space::PUBLIC_SPACE_ID);
- // block_keyを取得
- // 施設予約のBlockは「パブリックルームに固定で1つ」なので、room_idの検索条件はパブリックルーム固定にしておく
- $blockKey = $this->Block->findByRoomIdAndPluginKey(
- Space::getRoomIdRoot(Space::PUBLIC_SPACE_ID),
- 'reservations',
- ['key'],
- null,
- -1
- );
- $updateDetail = [
- 'content_key' => isset($this->data['ReservationLocation']['key'])
- ? $this->data['ReservationLocation']['key']
- : null,
- 'block_key' => isset($blockKey['Block']['key'])
- ? $blockKey['Block']['key']
- : null,
- 'room_id' => $roomId
- ];
-
- $this->updateUploadFile($content, $updateDetail);
- }
-
-/**
- * 施設生成処理
- *
- * @return array
- */
- public function createLocation() {
- $newLocation = $this->create();
- $newLocation['ReservationLocation'] = Hash::merge(
- $newLocation['ReservationLocation'],
- [
- 'start_time' => '09:00',
- 'end_time' => '18:00',
- 'time_table' => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'],
- 'use_all_rooms' => '1',
- 'use_workflow' => '1',
- 'timezone' => Current::read('User.timezone'),
- ]
- );
- return $newLocation;
- }
-
-/**
- * 施設データの登録
- *
- * @param array $data 登録データ
- * @return bool
- * @throws InternalErrorException
- */
- public function saveLocation($data) {
- $this->loadModels([
- 'ReservationLocationsRoom' => 'Reservations.ReservationLocationsRoom',
- 'ReservationLocationReservable' => 'Reservations.ReservationLocationReservable',
- 'ReservationLocationsApprovalUser' => 'Reservations.ReservationLocationsApprovalUser',
- ]);
-
- $data = $this->_prepareData($data);
-
- $this->begin();
- try {
- $this->create();
-
- // 先にvalidate 失敗したらfalse返す
- $this->set($data);
- $this->validate['use_workflow']['seleceUserRule'] = [
- 'rule' => ['validateSelectUser'],
- 'message' => __d('net_commons', 'Please input %s.', __d('reservations', 'Approver')),
- ];
- if (!$this->validates($data)) {
- return false;
- }
-
- $savedData = $this->save(null, false);
- if (! $savedData) {
- //このsaveで失敗するならvalidate以外なので例外なげる
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- // ReservationLocationsRoom登録
- if (isset($savedData['ReservationLocationsRoom'])) {
- $key = $savedData[$this->alias]['key'];
- if (! $this->ReservationLocationsRoom->saveReservationLocaitonsRoom($key, $savedData)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
- // ReservationLoationReservable登録
- if (! $this->ReservationLocationReservable->saveReservable($key, $savedData)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- // ReservationLocationsApprovalUser登録
- if (! $this->ReservationLocationsApprovalUser->saveApprovalUser($key, $savedData)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //多言語化の処理
- $this->set($savedData);
- $this->saveM17nData();
-
- $this->commit();
-
- } catch (Exception $e) {
- $this->rollback($e);
- }
- return $savedData;
- }
-
-/**
- * 並び替えの保存
- *
- * @param array $data 並び替えデータ
- * @throws InternalErrorException 例外エラー
- * @return bool
- */
- public function saveWeights($data) {
- //トランザクションBegin
- $this->begin();
-
- //バリデーション
- if (! $this->validateMany($data['ReservationLocations'])) {
- return false;
- }
-
- try {
- //登録処理
- if (! $this->saveMany($data['ReservationLocations'], ['validate' => false])) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //トランザクションCommit
- $this->commit();
-
- } catch (Exception $ex) {
- //トランザクションRollback
- $this->rollback($ex);
- }
-
- return true;
- }
-
-/**
- * 施設データの削除
- *
- * @param string $locationKey 施設キー
- * @return bool
- * @throws InternalErrorException
- */
- public function deleteLocation($locationKey) {
- $this->loadModels([
- 'ReservationLocationsRoom' => 'Reservations.ReservationLocationsRoom',
- 'ReservationLocationReservable' => 'Reservations.ReservationLocationReservable',
- 'ReservationLocationsApprovalUser' => 'Reservations.ReservationLocationsApprovalUser',
- 'ReservationEvent' => 'Reservations.ReservationEvent',
- 'ReservationEventShareUser' => 'Reservations.ReservationEventShareUser',
- 'ReservationFrameSetting' => 'Reservations.ReservationFrameSetting',
- ]);
-
- $this->begin();
- try {
- $this->deleteLocationData($locationKey);
-
- $this->deleteEventData($locationKey);
-
- //ReservationFrameSetting のlocation_keyを変更する
- $updateKey = $this->_getLocationKeyByMinWeight();
- $update = [
- $this->ReservationFrameSetting->alias . '.location_key' => '\'' . $updateKey . '\''
- ];
- $conditions = [
- $this->ReservationFrameSetting->alias . '.location_key' => $locationKey
- ];
- if (! $this->ReservationFrameSetting->updateAll($update, $conditions)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- $this->commit();
-
- } catch (Exception $e) {
- $this->rollback($e);
- }
-
- return true;
- }
-
-/**
- * weightの最大値取得
- *
- * @return int
- */
- protected function _getMaxWeight() {
- $order = $this->find('first', array(
- 'recursive' => -1,
- 'fields' => array('weight'),
- 'order' => array('weight' => 'DESC')
- ));
-
- if (isset($order[$this->alias]['weight'])) {
- $weight = (int)$order[$this->alias]['weight'];
- } else {
- $weight = 0;
- }
- return $weight;
- }
-
-/**
- * weightの最小値の施設キー取得
- *
- * @return int
- */
- protected function _getLocationKeyByMinWeight() {
- $location = $this->find('first', array(
- 'recursive' => -1,
- 'fields' => array('key', 'weight'),
- 'order' => array('weight' => 'ASC')
- ));
-
- if (! $location) {
- $locationKey = null;
- } else {
- $locationKey = $location[$this->alias]['key'];
- }
- return $locationKey;
- }
-
-/**
- * 施設データを取得する
- *
- * アクセス可能なルームから予約を受け付けてる施設だけに絞り込んで返す
- *
- * @param int $categoryId カテゴリID 0を指定したときは例外的にカテゴリ未指定を返す
- * @return array
- */
- public function getLocations($categoryId = null) {
- // ログインユーザが参加してるルームを取得
- $accessibleRoomIds = $this->getReadableRoomIds();
- $this->loadModels([
- 'ReservationLocationsRoom' => 'Reservations.ReservationLocationsRoom',
- //'ReservationLocationReservable' => 'Reservations.ReservationLocationReservable'
- ]);
- $locationsRooms = $this->ReservationLocationsRoom->find('all', ['conditions' => [
- 'room_id' => $accessibleRoomIds,
- ]]);
- $locationKeys = Hash::combine($locationsRooms,
- '{n}.ReservationLocationsRoom.reservation_location_key',
- '{n}.ReservationLocationsRoom.reservation_location_key'
- );
- // そのルームからの予約を受け付ける施設を取得
- $options = [
- 'conditions' => [
- 'language_id' => Current::read('Language.id'),
- 'OR' => [
- 'use_all_rooms' => 1, // 全てのルームから予約を受け付ける施設
- 'ReservationLocation.key' => $locationKeys
- ]
- ],
- 'order' => 'ReservationLocation.weight ASC'
- ];
- if (isset($categoryId)) {
- if ($categoryId != 0) {
- $options['conditions']['category_id'] = $categoryId;
- } else {
- $options['conditions']['category_id'] = null;
- }
- }
-
- $locations = $this->find('all', $options);
- return $locations;
- }
-
-/**
- * 予約可能な施設を返す
- *
- * @param int $categoryId カテゴリID
- * @param int $userId ユーザID
- * @return array
- */
- public function getReservableLocations($categoryId = null, $userId = null) {
- if (! $userId) {
- $userId = Current::read('User.id');
- }
- $this->loadModels(
- [
- 'ReservationLocationsRoom' => 'Reservations.ReservationLocationsRoom',
- 'ReservationLocationReservable' => 'Reservations.ReservationLocationReservable',
- 'ReservationLocationsApprovalUser' => 'Reservations.ReservationLocationsApprovalUser',
- //'ReservationLocationRoom' => 'Reservations.ReservationLocationRoom'
- ]
- );
- $locations = $this->getLocations($categoryId);
-
- // あらかじめ承認ユーザ取得する
- $approvalUsers = $this->ReservationLocationsApprovalUser->findApprovalUserIdsByLocations(
- $locations
- );
- foreach ($locations as $key => $location) {
- $locationKey = $location['ReservationLocation']['key'];
-
- // 承認ユーザを配列にセット
- $locations[$key]['approvalUserIds'] = $approvalUsers[$locationKey] ?? [];
- }
- // プライベートルームを除外したルームIDで予約可能かチェック
- $roomIds = $this->getReadableRoomIdsWithOutPrivate();
- $reservableLocations = [];
-
- // 予め予約可能なロール情報をロードしておく
- $this->ReservationLocationReservable->loadAll($roomIds);
-
- foreach ($locations as $location) {
- // いずれかのルームで予約できるなら予約可能な施設とする
- if ($this->ReservationLocationReservable->isReservableByLocation($location)) {
- $reservableLocations[] = $location;
- }
- }
- return $reservableLocations;
- }
-
-/**
- * 施設キーを元に施設情報を返す(内部キャッシュ有り)
- *
- * @param string $locationKey 施設キー
- * @return mixed
- */
- public function getByKey($locationKey) {
- // 何度も同じ施設で確認だすからキャッシュしとく
- if (!isset($this->_locations[$locationKey])) {
- //$this->ReservationLocation = ClassRegistry::init('Reservations.ReservationLocation');
- $this->loadModels([
- 'ReservationLocationsApprovalUser' => 'Reservations.ReservationLocationsApprovalUser'
- ]);
- //$this->ReservationLocationsApprovalUser = ClassRegistry::init(
- // 'Reservations.ReservationLocationsApprovalUser'
- //);
- $conditions = [
- 'ReservationLocation.key' => $locationKey,
- ];
- $location = $this->find(
- 'first',
- [
- 'conditions' =>
- $conditions
- ]
- );
- if (!$location) {
- return [];
- }
- $location['approvalUserIds'] =
- $this->ReservationLocationsApprovalUser->getApprovalUserIdsByLocation($location);
- $this->_locations[$locationKey] = $location;
-
- }
- return $this->_locations[$locationKey];
- }
-
-/**
- * 保存前にpostされたdataを保存用に加工する
- *
- * @param array $data POSTされたdata
- * @return array 保存用に加工されたdata
- */
- protected function _prepareData($data) {
- if (is_array(Hash::get($data, 'ReservationLocation.time_table'))) {
- $timeTable = implode('|', $data['ReservationLocation']['time_table']);
- $data['ReservationLocation']['time_table'] = $timeTable;
- }
-
- // 全日フラグあったら00:00-24:00あつかいにする
- if ($data['ReservationLocation']['allday_flag']) {
- $data['ReservationLocation']['start_time'] = '00:00';
- $data['ReservationLocation']['end_time'] = '24:00';
- }
- // start_time end_timeをUTCに変換
- $startDateTime = Date('Y-m-d') . $data['ReservationLocation']['start_time'] . ':00';
- $endDateTime = Date('Y-m-d') . $data['ReservationLocation']['end_time'] . ':00';
- $ncTime = new NetCommonsTime();
- $startDateTime4UTC = $ncTime->toServerDatetime($startDateTime,
- $data['ReservationLocation']['timezone']);
- $endDateTime4UTC = $ncTime->toServerDatetime($endDateTime,
- $data['ReservationLocation']['timezone']);
- $data['ReservationLocation']['start_time'] = $startDateTime4UTC;
- $data['ReservationLocation']['end_time'] = $endDateTime4UTC;
-
- // category_id=0だったらnullにする。そうしないと空文字としてSQL発行される
- if (empty($data[$this->alias]['category_id'])) {
- $data[$this->alias]['category_id'] = null;
- }
-
- //新規の場合、順番を最大値+1にする
- if (empty($data['ReservationLocation']['id'])) {
- $data[$this->alias]['weight'] = $this->_getMaxWeight() + 1;
- }
-
- // 予約を受け付けるルームがひとつもえらばれてないとき
- if (!$data['ReservationLocationsRoom']['room_id']) {
- $data['ReservationLocationsRoom']['room_id'] = array();
- }
-
- return $data;
- }
-
-/**
- * カテゴリーをセットしていない施設件数を取得する
- *
- * @return int
- */
- public function getCountUnselectedCategory() {
- $count = $this->find('count', [
- 'conditions' => ['category_id' => null],
- ]);
-
- return $count;
- }
-
-/**
- * getAliveCondition
- * 現在使用中状態であるか判断する。CleanUpプラグインで使用
- *
- * @param array $key 判断対象のデータのキー
- * @return array
- */
- public function getAliveCondition($key) {
- return array(
- 'conditions' => array(
- 'ReservationLocation.key' => $key,
- ),
- );
- }
-}
diff --git a/Model/ReservationLocationReservable.php b/Model/ReservationLocationReservable.php
deleted file mode 100644
index 02084ca..0000000
--- a/Model/ReservationLocationReservable.php
+++ /dev/null
@@ -1,463 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppModel', 'Reservations.Model');
-
-/**
- * Summary for ReservationLocationReservable Model
- */
-class ReservationLocationReservable extends ReservationsAppModel {
-
-/**
- * Use table
- *
- * @var mixed False or table name
- */
- public $useTable = 'reservation_location_reservable';
-
-/**
- * Validation rules
- *
- * @var array
- */
- public $validate = array(
- );
-
- //The Associations below have been created with all possible keys, those that are not needed can be removed
-
-/**
- * belongsTo associations
- *
- * @var array
- */
- public $belongsTo = array(
- 'Room' => array(
- 'className' => 'Rooms.Room',
- 'foreignKey' => 'room_id',
- 'conditions' => '',
- 'fields' => '',
- 'order' => ''
- )
- );
-
-/**
- * @var array|null [location_key => 予約可能なロール, ...]
- */
- private $__reservableRoleKeys;
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'location_key' => array(
- 'notBlank' => array(
- 'rule' => array('notBlank'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'role_key' => array(
- 'notBlank' => array(
- 'rule' => array('notBlank'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- ));
-
- return parent::beforeValidate($options);
- }
-
-/**
- * 予約可能な施設か?(権限判定のみ)
- *
- * @param array $location ReservationLocation data
- * @return bool
- */
- public function isReservableByLocation($location) : bool {
- $this->loadModels([
- 'RolesRoomsUser' => 'Rooms.RolesRoomsUser',
- ]);
-
- $roomIds = $this->getReadableRoomIdsWithOutPrivate();
- $userId = Current::read('User.id');
- if (!$userId) {
- return false;
- }
- // 個人的な予約OKな施設
- if ($location['ReservationLocation']['use_private'] && $this->__canUsePrivateRoom()) {
- // マイルームが使えるならOK
- return true;
- }
-
- if ($location['ReservationLocation']['use_all_rooms']) {
- return $this->__isReservableByUseAllRoomLocation(
- $location['ReservationLocation']['key'],
- $roomIds
- );
- }
- return $this->__isReservableByUseSpecifiedRoomLocation(
- $location['ReservationLocation']['key'],
- $roomIds
- );
- }
-
-/**
- * Currentユーザはプライベートルームを利用できるか
- *
- * @return bool
- */
- private function __canUsePrivateRoom() : bool {
- $usePrivateRoom = Current::read('User.UserRoleSetting.use_private_room');
-
- // Currentで取得できるはずだが、万一取得できなかったらDBから取得する。
- if ($usePrivateRoom === null) {
- $this->loadModels(['UserRoleSetting' => 'UserRoles.UserRoleSetting']);
- $userRole = Current::read('User.role_key');
- $userRoleSetting = $this->UserRoleSetting->find(
- 'first',
- [
- 'conditions' => [
- 'UserRoleSetting.role_key' => $userRole
- ]
- ]
- );
- $usePrivateRoom = $userRoleSetting['UserRoleSetting']['use_private_room'];
- }
- return $usePrivateRoom;
- }
-
-/**
- * __isReservableByUseAllRoomLocation
- *
- * @param string $locationKey 施設キー
- * @param array $roomIds room_id リスト
- * @return bool
- */
- private function __isReservableByUseAllRoomLocation($locationKey, array $roomIds) : bool {
- // 全てのルームで予約OK
- // その施設で予約可能なロールの取得
- $reservableRoleKeys = $this->__findReservableRoleKeys(
- $locationKey,
- null
- );
- foreach ($roomIds as $roomId) {
- // ユーザが参加しているルームでのロール取得
- $roleKey = $this->__findRoleKeyByRoomId($roomId);
-
- // 全てのルームで予約OKな施設のロールリストはキー0にある
- if (isset($reservableRoleKeys[0])) {
- if (in_array($roleKey, $reservableRoleKeys[0], true)) {
- return true;
- }
- }
- }
- return false;
- }
-
-/**
- * __findReservableRoleKeys
- *
- * @param string $locationKey 施設キー
- * @param array|null $roomIds Room.idリスト nullのときは全ルームで予約を受け付けるときのロールを取得する
- * @return array [roomId => 予約可能なロールリスト, ...]
- */
- private function __findReservableRoleKeys(string $locationKey, array $roomIds = null) {
- if (isset($this->__reservableRoleKeys[$locationKey])) {
- return $this->__reservableRoleKeys[$locationKey];
- }
- // ロールに対する予約権限取得
- $conditions = [
- 'ReservationLocationReservable.location_key' => $locationKey,
- //'ReservationLocationReservable.role_key' => $roleKey,
- 'ReservationLocationReservable.room_id' => $roomIds,
- 'ReservationLocationReservable.value' => 1,
- ];
- $findResult = $this->find('all', [
- 'conditions' => $conditions,
- 'recursive' => -1,
- 'fields' => ['value', 'room_id', 'role_key']
- ]);
- $reservableRoleKeys = [];
- foreach ($findResult as $data) {
- // 全ルームOKの施設では0になる
- $roomId = (int)$data['ReservationLocationReservable']['room_id'];
- $reservableRoleKeys[$roomId][] = $data['ReservationLocationReservable']['role_key'];
- }
-
- return $reservableRoleKeys;
- }
-
-/**
- * __findRoleKeyByRoomId
- *
- * @param int $roomId Room.id
- * @return string
- */
- private function __findRoleKeyByRoomId($roomId) {
- if (!isset($this->_roleKeysWithRoomId[$roomId])) {
- $userId = Current::read('User.id');
- // ルームでのロール取得
- $rolesRoomsUsers = $this->RolesRoomsUser->find(
- 'first',
- array(
- 'recursive' => 0,
- 'conditions' => array(
- 'RolesRoomsUser.user_id' => $userId,
- 'RolesRoomsUser.room_id' => $roomId,
- ),
- )
- );
- $roleKey = Hash::get($rolesRoomsUsers, 'RolesRoom.role_key');
- $this->_roleKeysWithRoomId[$roomId] = $roleKey;
- }
- return $this->_roleKeysWithRoomId[$roomId];
- }
-
-/**
- * __isReservableByUseSpecifiedRoomLocation
- *
- * @param string $locationKey 施設キー
- * @param array $roomIds room_id リスト
- * @return bool
- */
- private function __isReservableByUseSpecifiedRoomLocation($locationKey, array $roomIds) : bool {
- // 選択されたルームのみ予約OK
- $reservable = false;
- $reservableRoleKeys = $this->__findReservableRoleKeys(
- $locationKey,
- $roomIds
- );
- foreach ($roomIds as $roomId) {
- $roleKey = $this->__findRoleKeyByRoomId($roomId);
-
- if (isset($reservableRoleKeys[$roomId])) {
- if (in_array($roleKey, $reservableRoleKeys[$roomId], true)) {
- return true;
- }
- }
- }
- return $reservable;
- }
-
-/**
- * 施設に対する予約できる権限データを取得する
- *
- * @param string $locationKey 施設キー
- * @param int| $roomId ルームID
- * @return array
- */
- public function getPermissions($locationKey, $roomId = null) {
- // reseravableデータ取得
- if ($locationKey !== null) {
- if (! $roomId) {
- $result = $this->find('first', [
- 'recursive' => -1,
- 'fields' => ['location_key', 'room_id'],
- 'conditions' => [
- 'location_key' => $locationKey
- ]
- ]);
- $roomId = Hash::get($result, 'ReservationLocationReservable.room_id');
- }
- $result = $this->find('all', [
- 'recursive' => -1,
- 'conditions' => [
- 'location_key' => $locationKey,
- 'room_id' => $roomId
- ]
- ]);
- $reservables = Hash::combine(
- $result,
- '{n}.ReservationLocationReservable.role_key',
- '{n}.ReservationLocationReservable.value'
- );
- } else {
- // default
- $reservables = [];
- }
-
- //DefaultRolePermission取得
- $this->loadModels([
- 'DefaultRolePermission' => 'Roles.DefaultRolePermission',
- ]);
-
- $defaultPermissions = $this->DefaultRolePermission->find('all', array(
- 'recursive' => -1,
- 'fields' => array('DefaultRolePermission.*', 'DefaultRolePermission.value AS default'),
- 'conditions' => array(
- 'DefaultRolePermission.type' => 'location_role',
- 'DefaultRolePermission.permission' => 'location_reservable',
- ),
- ));
- $defaultPermissions = Hash::remove($defaultPermissions, '{n}.DefaultRolePermission.id');
- $defaults = Hash::combine(
- $defaultPermissions, '{n}.DefaultRolePermission.role_key', '{n}.DefaultRolePermission'
- );
-
- foreach ($defaults as $roleKey => $default) {
- $default['value'] = Hash::get($reservables, $roleKey, $default['value']);
- $defaults[$roleKey] = $default;
- }
-
- return $defaults;
- }
-
-/**
- * 予約できる権限の保存
- *
- * #### $data のサンプル
- * $data => array(
- * 'ReservationLocationReservable' => array(
- * 'room_administrator' => array(
- * 'role_key' => 'room_administrator',
- * 'type' => 'location_role',
- * 'permission' => 'location_reservable',
- * 'value' => true,
- * 'fixed' => true,
- * 'default' => true,
- * ),
- * 'chief_editor' => array(
- * 'role_key' => 'chief_editor',
- * 'type' => 'location_role',
- * 'permission' => 'location_reservable',
- * 'value' => '1',
- * 'fixed' => false,
- * 'default' => true,
- * 'id' => '',
- * ),
- * 'editor' => array(
- * 'role_key' => 'editor',
- * 'type' => 'location_role',
- * 'permission' => 'location_reservable',
- * 'value' => '1',
- * 'fixed' => false,
- * 'default' => true,
- * 'id' => '',
- * ),
- * 'general_user' => array(
- * 'role_key' => 'general_user',
- * 'type' => 'location_role',
- * 'permission' => 'location_reservable',
- * 'value' => '0',
- * 'fixed' => false,
- * 'default' => false,
- * 'id' => '',
- * ),
- * 'visitor' => array(
- * 'role_key' => 'visitor',
- * 'type' => 'location_role',
- * 'permission' => 'location_reservable',
- * 'value' => false,
- * 'fixed' => true,
- * 'default' => false,
- * ),
- * ),
- * )
- *
- * @param string $locationKey location_key
- * @param array $data save data
- * @throws InternalErrorException
- * @return bool
- */
- public function saveReservable($locationKey, $data) {
- $roles = $data[$this->alias];
-
- // 同じ施設のreservableデータをあらかじめ削除しておく
- if (! $this->deleteAll(['location_key' => $locationKey])) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- foreach ($roles as $roleKey => $role) {
- $value = $role['value'];
- // ルーム毎に保存
- if ($data['ReservationLocation']['use_all_rooms']) {
- // 全てのルームから予約を受けつける
- $this->create();
- $reservableData = [
- 'location_key' => $locationKey,
- 'role_key' => $roleKey,
- 'room_id' => null,
- 'value' => $value
- ];
- if (! $this->save($reservableData)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- };
- } else {
- // 個別のルームから予約を受け付ける
- foreach ($data['ReservationLocationsRoom']['room_id'] as $roomId) {
- $this->create();
- $reservableData = [
- 'location_key' => $locationKey,
- 'role_key' => $roleKey,
- 'room_id' => $roomId,
- 'value' => $value
- ];
- if (! $this->save($reservableData)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
- }
- }
-
- return true;
- }
-
-/**
- * loadAll
- *
- * アクセスユーザが参加しているルームで予約可能なロールをすべて取得する
- *
- * @param array $userJoinRoomIds アクセスユーザが参加しているルームIDリスト
- * @return void
- */
- public function loadAll(array $userJoinRoomIds) {
- if ($this->__reservableRoleKeys !== null) {
- return;
- }
- $findResult = $this->find('all', [
- 'conditions' => [
- 'ReservationLocationReservable.value' => 1,
- 'OR' => [
- ['ReservationLocationReservable.room_id' => $userJoinRoomIds],
- ['ReservationLocationReservable.room_id' => null], // 全ルームOKの施設
- ]
- ],
- 'recursive' => -1,
- 'fields' => ['location_key', 'value', 'room_id', 'role_key']
- ]);
- $reservableRoleKeys = [];
- foreach ($findResult as $data) {
- $locationKey = $data['ReservationLocationReservable']['location_key'];
- // 全ルームOKの場合はroomId = 0としてセットされる
- $roomId = (int)$data['ReservationLocationReservable']['room_id'];
- $reservableRoleKeys[$locationKey][$roomId][] =
- $data['ReservationLocationReservable']['role_key'];
- }
- $this->__reservableRoleKeys = $reservableRoleKeys;
- }
-
-/**
- * clearCache
- *
- * @return void
- */
- public function clearCache() {
- unset($this->__reservableRoleKeys);
- }
-}
diff --git a/Model/ReservationLocationsApprovalUser.php b/Model/ReservationLocationsApprovalUser.php
deleted file mode 100644
index d0f2ba0..0000000
--- a/Model/ReservationLocationsApprovalUser.php
+++ /dev/null
@@ -1,207 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppModel', 'Reservations.Model');
-
-/**
- * Summary for ReservationLocationsApprovalUser Model
- */
-class ReservationLocationsApprovalUser extends ReservationsAppModel {
-
-/**
- * Validation rules
- *
- * @var array
- */
- public $validate = array();
-
- //The Associations below have been created with all possible keys, those that are not needed can be removed
-
-/**
- * belongsTo associations
- *
- * @var array
- */
- public $belongsTo = array(
- 'User' => array(
- 'className' => 'Users.User',
- 'foreignKey' => 'user_id',
- 'conditions' => '',
- 'fields' => '',
- 'order' => ''
- )
- );
-
-/**
- * 施設の承認者idリスト ReservationLocation.keyをキーにもつ配列
- *
- * @var array
- */
- protected $_approvalUserIds = [];
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'location_key' => array(
- 'notBlank' => array(
- 'rule' => array('notBlank'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'user_id' => array(
- 'numeric' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- ));
-
- return parent::beforeValidate($options);
- }
-
-/**
- * 施設管理者の保存
- *
- * #### $data のサンプル
- * array(
- * 'ReservationLocationsApprovalUser' => array(
- * 0 => ['user_id' => '1'],
- * 1 => ['user_id' => '2'],
- * )
- * )
- *
- * @param string $locationKey location_key
- * @param array $data save data
- * @throws InternalErrorException
- * @return void
- */
- public function saveApprovalUser($locationKey, $data) {
- $userIds = array_keys(Hash::combine($data, 'ReservationLocationsApprovalUser.{n}.user_id'));
-
- $this->deleteAll(['location_key' => $locationKey]);
- foreach ($userIds as $userId) {
- $this->create();
- $userData = [
- 'ReservationLocationsApprovalUser' => [
- 'location_key' => $locationKey,
- 'user_id' => $userId
- ]
- ];
- if (! $this->save($userData)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
- return true;
- }
-
-/**
- * 施設の承認者ID一覧を返す
- *
- * @param array $location ReservationLocation data
- * @return array 承認者ID一覧
- */
- public function getApprovalUserIdsByLocation($location) {
- $locationKey = $location['ReservationLocation']['key'];
- $useWorkflow = $location['ReservationLocation']['use_workflow'];
-
- if (!isset($this->_approvalUserIds[$locationKey])) {
- $approvalUserIds = [];
- if ($useWorkflow) {
- // 承認が必要なら承認ユーザ取得
- $condition = [
- 'ReservationLocationsApprovalUser.location_key' =>
- $locationKey,
- ];
- $approvalUsers = $this->find('all',
- ['conditions' => $condition]);
- $approvalUserIds = Hash::combine($approvalUsers,
- '{n}.ReservationLocationsApprovalUser.user_id',
- '{n}.ReservationLocationsApprovalUser.user_id');
- }
- $this->_approvalUserIds[$locationKey] =
- $approvalUserIds;
- }
- return $this->_approvalUserIds[$locationKey];
- }
-
-/**
- * findApprovalUserIdsByLocations
- *
- * @param array $locations 施設リスト
- * @return array [承認者ユーザID => 承認者ユーザID, ...]
- * (配列のキーの承認者ユーザIDはJavaScriptで利用している)
- */
- public function findApprovalUserIdsByLocations(array $locations) {
- // 承認が必要な施設のキーだけを抜き出す
- $locationKeys = [];
- foreach ($locations as $location) {
- $useWorkflow = $location['ReservationLocation']['use_workflow'];
- if ($useWorkflow) {
- $locationKey = $location['ReservationLocation']['key'];
- $locationKeys[] = $locationKey;
- }
- }
- // 取得済みならFINDしない
- $needFind = false;
- foreach ($locationKeys as $locationKey) {
- if (!isset($this->_approvalUserIds[$locationKey])) {
- $needFind = true;
- break;
- }
- }
- if ($needFind === false) {
- // 全部キャッシュ済みなら改めて取得しなおさない
- return $this->_approvalUserIds;
- }
-
- // Find
- $condition = [
- 'ReservationLocationsApprovalUser.location_key' =>
- $locationKeys,
- ];
- $approvalUsers = $this->find(
- 'all',
- [
- 'conditions' => $condition,
- 'recursive' => -1,
- 'fields' => [
- 'ReservationLocationsApprovalUser.location_key',
- 'ReservationLocationsApprovalUser.user_id'
- ]
- ]
- );
- // [location_key => [user_id,...], ...] 形式にする
- $approvalUserIds = [];
- foreach ($approvalUsers as $approvalUser) {
- $locationKey = $approvalUser['ReservationLocationsApprovalUser']['location_key'];
- $userId = $approvalUser['ReservationLocationsApprovalUser']['user_id'];
- // JavaScript側でキーにuserIdが入ってることを期待しているのでキーにもセットする
- $approvalUserIds[$locationKey][$userId] = $userId;
- }
- // _approvalUserIdsにmergeする
- $this->_approvalUserIds = array_merge(
- $this->_approvalUserIds,
- $approvalUserIds
- );
- return $this->_approvalUserIds;
- }
-
-}
diff --git a/Model/ReservationLocationsRoom.php b/Model/ReservationLocationsRoom.php
deleted file mode 100644
index 578cfa7..0000000
--- a/Model/ReservationLocationsRoom.php
+++ /dev/null
@@ -1,206 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppModel', 'Reservations.Model');
-
-/**
- * Summary for ReservationLocationsRoom Model
- */
-class ReservationLocationsRoom extends ReservationsAppModel {
-
-/**
- * Validation rules
- *
- * @var array
- */
- public $validate = array();
-
- //The Associations below have been created with all possible keys, those that are not needed can be removed
-
-/**
- * belongsTo associations
- *
- * @var array
- */
- public $belongsTo = array(
- 'Room' => array(
- 'className' => 'Rooms.Room',
- 'foreignKey' => 'room_id',
- 'conditions' => '',
- 'fields' => '',
- 'order' => ''
- )
- );
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'reservation_location_key' => array(
- 'notBlank' => array(
- 'rule' => array('notBlank'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'room_id' => array(
- 'numeric' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- ));
-
- return parent::beforeValidate($options);
- }
-
-/**
- * ReservationLocationsRoomの登録
- *
- * ReservationLocationSetting::saveReservationLocationSetting()から実行されるため、ここではトランザクションを開始しない
- *
- * @param string $locationKey ReservationLocation.key
- * @param array $data リクエストデータ
- * @return mixed On success Model::$data if its not empty or true, false on failure
- * @throws InternalErrorException
- */
- public function saveReservationLocaitonsRoom($locationKey, $data) {
- $roomIds = Hash::get($data, $this->alias . '.room_id', array());
-
- $saved = $this->find('list', array(
- 'recursive' => -1,
- 'fields' => array('id', 'room_id'),
- 'conditions' => ['reservation_location_key' => $locationKey],
- ));
- $saved = array_unique(array_values($saved));
-
- $delete = array_diff($saved, $roomIds);
- if (count($delete) > 0) {
- $conditions = array(
- 'ReservationLocationsRoom' . '.reservation_location_key' => $locationKey,
- 'ReservationLocationsRoom' . '.room_id' => $delete,
- );
- if (! $this->deleteAll($conditions, false)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
-
- $new = array_diff($roomIds, $saved);
- if (count($new) > 0) {
- $saveDate = array();
- foreach ($new as $i => $roomId) {
- $saveDate[$i] = array(
- 'id' => null,
- 'room_id' => $roomId,
- 'reservation_location_key' => $locationKey
- );
- }
- if (! $this->saveMany($saveDate)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
-
- return true;
- }
-
-/**
- * getReservableRoomsByLocationKey
- *
- * @param string $locationKey 施設キー
- * @param int|string $userId User.id
- * @return array Room data
- */
- public function getReservableRoomsByLocationKey($locationKey, $userId) : array {
- $this->loadModels([
- 'ReservationLocation' => 'Reservations.ReservationLocation'
- ]);
- // location取得
- $location = $this->ReservationLocation->getByKey($locationKey);
-
- if ($location) {
- return $this->getReservableRoomsByLocationAndUserId($location, $userId);
- }
- return [];
- }
-
-/**
- * getReservableRoomsByLocationAndUserId
- *
- * @param array $location 施設
- * @param int|string $userId User.id
- * @return array
- */
- public function getReservableRoomsByLocationAndUserId(array $location, $userId) : array {
- // roomBase取得
- $this->loadModels([
- 'Room' => 'Rooms.Room',
- ]);
- $condition = $this->Room->getReadableRoomsConditions([], $userId);
- $roomBase = $this->Room->find('all', $condition);
-
- return $this->getReservableRoomsByLocation($location, $roomBase);
- }
-
-/**
- * 施設で予約を受け付けるルームを返す
- *
- * @param array $location ReservationLocation data
- * @param array $roomBase アクセスユーザがアクセス可能なルーム情報
- * @return array アクセス可能なルームのうち引数で指定された施設で予約可能なルーム
- */
- public function getReservableRoomsByLocation($location, $roomBase) {
- // 予約を受け付けるルームを制限するなら受け付けるルームIDを取得する
- if (!$location['ReservationLocation']['use_all_rooms']) {
- $locationRooms = $this->find(
- 'all',
- [
- 'conditions' => [
- 'ReservationLocationsRoom.reservation_location_key' => $location['ReservationLocation']['key']
- ]
- ]
- );
- $reservableRoomIds = array_column(
- array_column($locationRooms, 'ReservationLocationsRoom'),
- 'room_id'
- );
- }
-
- $thisLocationRooms = [];
- foreach ($roomBase as $room) {
- if ($room['Room']['space_id'] == Space::PRIVATE_SPACE_ID) {
- if ($location['ReservationLocation']['use_private']) {
- // 個人的な予約OK ならプライベートルームを選択肢に追加
- $thisLocationRooms[] = $room;
- }
- } else {
- if ($location['ReservationLocation']['use_all_rooms']) {
- // 全てのルームから予約受付なら選択肢にルームを追加
- $thisLocationRooms[] = $room;
- } else {
- // 予約を受け付けるルームなら選択肢に追加
- if (in_array($room['Room']['id'], $reservableRoomIds)) {
- $thisLocationRooms[] = $room;
- }
- }
- }
- }
- return $thisLocationRooms;
- }
-}
-
diff --git a/Model/ReservationPermission.php b/Model/ReservationPermission.php
deleted file mode 100644
index f4e8723..0000000
--- a/Model/ReservationPermission.php
+++ /dev/null
@@ -1,371 +0,0 @@
-
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppModel', 'Reservations.Model');
-App::uses('BlockSettingBehavior', 'Blocks.Model/Behavior');
-
-/**
- * Reservation Model
- *
- * @author AllCreator Co., Ltd.
- * @package NetCommons\Reservations\Model
- */
-class ReservationPermission extends ReservationsAppModel {
-
-/**
- * Use table config
- *
- * @var bool
- */
- public $useTable = 'reservations';
-
-/**
- * alias
- *
- * @var string
- */
- public $alias = 'Reservation';
-
-/**
- * use behaviors
- *
- * @var array
- */
- public $actsAs = array(
- 'Blocks.BlockRolePermission',
- 'Blocks.BlockSetting' => array(
- BlockSettingBehavior::FIELD_USE_WORKFLOW,
- ),
- );
-
-/**
- * belongsTo associations
- *
- * @var array
- */
- public $belongsTo = array(
- 'Block' => array(
- 'className' => 'Blocks.Block',
- 'foreignKey' => 'block_key',
- 'conditions' => '',
- 'fields' => '',
- 'order' => ''
- ),
- );
-
-/**
- * hasMany associations
- *
- * @var array
- */
- public $hasMany = array(
- );
-
-/**
- * Validation rules
- *
- * @var array
- */
- public $validate = array();
-
-/**
- * getReservationRoomBlocks
- *
- * 現在存在する全てのルームと、そこに配置されるべきブロック、施設予約を取り出す
- *
- * @param Component $workflow workflow component
- * @return array
- */
- public function getReservationRoomBlocks($workflow) {
- $this->Room = ClassRegistry::init('Rooms.Room', true);
- $spaceIds = array(Space::PUBLIC_SPACE_ID, Space::COMMUNITY_SPACE_ID);
- $rooms = array();
-
- // 空間ごとに処理
- foreach ($spaceIds as $spaceId) {
-
- // 読み取り可能なルームを取得
- $readableRoom = $this->Room->find('all',
- $this->Room->getReadableRoomsConditions(array('Room.space_id' => $spaceId)));
- $readableRoomIds = Hash::combine($readableRoom, '{n}.Room.id', '{n}.Room.id');
- $readableRoom = Hash::combine($readableRoom, '{n}.Room.id', '{n}');
-
- // 読み取り可能ルームIDをもとに条件取得
- $conditions = $this->_getReservationConditions($readableRoomIds);
-
- // ルーム+ブロック情報取得
- $roomsBlocks = $this->Room->find('all', $conditions);
-
- // 取得したルーム+ブロック情報にさらにパーミッション情報を追加でセット
- $this->_setPermission($workflow, $roomsBlocks, $readableRoom);
- // 取得したルーム+ブロック情報にさらにブロック設定情報を追加でセット
- $this->_setBlockSetting($roomsBlocks);
- $rooms[$spaceId] = Hash::combine($roomsBlocks, '{n}.Room.id', '{n}');
- }
- return $rooms;
- }
-/**
- * getReservationAllMemberRoomBlocks
- *
- * 全会員ルームと、そこに配置されるべきブロック、施設予約を取り出す
- *
- * @param Component $workflow workflow component
- * @return array
- */
- public function getReservationAllMemberRoomBlocks($workflow) {
- // 読み取り可能なルームを取得
- $condition = $this->Room->getReadableRoomsConditions();
- $condition['conditions'] = array('Room.id' => Space::getRoomIdRoot(Space::COMMUNITY_SPACE_ID));
- $roomBase = $this->Room->find('all', $condition);
- $roomBase = Hash::combine($roomBase, '{n}.Room.id', '{n}');
-
- $conditions = $this->_getReservationConditions(
- array(Space::getRoomIdRoot(Space::COMMUNITY_SPACE_ID))
- );
- // ルーム+ブロック情報取得
- $roomsBlocks = $this->Room->find('all', $conditions);
- $roomsBlocks = Hash::combine($roomsBlocks, '{n}.Room.id', '{n}');
-
- // 取得したルーム+ブロック情報にさらにパーミッション情報を追加でセット
- $this->_setPermission($workflow, $roomsBlocks, $roomBase);
- // 取得したルーム+ブロック情報にさらにブロック設定情報を追加でセット
- $this->_setBlockSetting($roomsBlocks);
- return array(Space::COMMUNITY_SPACE_ID => $roomsBlocks);
- }
-/**
- * _getReservationConditions
- *
- * 現在存在する全てのルームと、そこに配置されるべきブロック、施設予約を取り出すためのfindのoption作成
- *
- * @param array $readableRoomIds readable room id
- * @return array
- */
- protected function _getReservationConditions($readableRoomIds) {
- return array(
- 'fields' => array(
- 'Room.*',
- 'RoomsLanguage.*',
- 'Block.*',
- //'Reservation.*'
- ),
- 'recursive' => -1,
- 'joins' => array(
- array('table' => 'rooms_languages',
- 'alias' => 'RoomsLanguage',
- 'type' => 'LEFT',
- 'conditions' => array(
- 'Room.id = RoomsLanguage.room_id',
- 'RoomsLanguage.language_id' => Current::read('Language.id')
- )
- ),
- array('table' => 'blocks',
- 'alias' => 'Block',
- 'type' => 'LEFT',
- 'conditions' => array(
- 'Room.id = Block.room_id',
- 'Block.plugin_key' => 'reservations',
- )
- ),
- // array('table' => 'reservations',
- // 'alias' => 'Reservation',
- // 'type' => 'LEFT',
- // 'conditions' => array(
- // 'Reservation.block_key = Block.key',
- // )
- // )
- ),
- 'conditions' => array(
- 'Room.id' => $readableRoomIds
- ),
- 'order' => array(
- 'Room.sort_key asc'
- )
- );
- }
-/**
- * _setPermission
- *
- * 指定されたルーム、ブロックに相当する権限設定情報を取り出す
- *
- * @param object $workflow workflow component
- * @param array &$roomBlocks ルーム、ブロック、情報
- * @param array $readableRoom アクセス可能ルームリスト(ルームでのRole情報が見られる
- * @return array
- */
- protected function _setPermission($workflow, &$roomBlocks, $readableRoom) {
- foreach ($roomBlocks as &$roomBlock) {
- $blockKey = $roomBlock['Block']['key'];
- if (! isset($roomBlock['Block']['key'])) {
- $blockKey = '';
- }
- $permissions = $workflow->getBlockRolePermissions(
- array(
- 'content_creatable',
- 'content_editable',
- 'content_publishable',
- 'block_permission_editable',
- 'mail_editable'),
- $roomBlock['Room']['id'],
- $blockKey
- );
- if ($permissions) {
- $roomBlock['BlockRolePermission'] = $permissions['BlockRolePermissions'];
- //$roomBlock['Roles'] = $permissions['Roles'];
- }
- if (isset($readableRoom[$roomBlock['Room']['id']]['RolesRoom'])) {
- $roomBlock['RolesRoom'] = $readableRoom[$roomBlock['Room']['id']]['RolesRoom'];
- }
- }
- }
-/**
- * _setBlockSetting
- *
- * 指定されたルーム、ブロックに相当するブロック設定情報を取り出す
- *
- * @param array &$roomBlocks ルーム、ブロック、情報
- * @return void
- */
- protected function _setBlockSetting(&$roomBlocks) {
- foreach ($roomBlocks as &$roomBlock) {
- $blockKey = Hash::get($roomBlock, 'Block.key');
- $roomId = Hash::get($roomBlock, 'Block.room_id');
- $blockSetting = $this->getBlockSetting($blockKey, $roomId);
- $roomBlock[$this->alias] = $blockSetting[$this->alias];
- }
- }
-/**
- * getDefaultRoles
- *
- * デフォルトの権限を返す
- *
- * @return array
- */
- public function getDefaultRoles() {
- $this->DefaultRolePermission = ClassRegistry::init('Roles.DefaultRolePermission', true);
- $roles = $this->DefaultRolePermission->find('all', array(
- 'fields' => array(
- 'DefaultRolePermission.*',
- 'Role.*',
- ),
- 'joins' => array(
- array('table' => 'roles',
- 'alias' => 'Role',
- 'type' => 'LEFT',
- 'conditions' => array(
- 'DefaultRolePermission.role_key = Role.key',
- 'Role.language_id' => Current::read('Language.id')
- )
- ),
- ),
- 'conditions' => array(
- 'DefaultRolePermission.permission' => 'content_creatable',
- 'OR' => array(
- array(
- 'DefaultRolePermission.fixed' => false
- ),
- array(
- 'DefaultRolePermission.value' => true
- ),
- )
- )
- ));
- return $roles;
- }
-/**
- * savePermission
- *
- * 権限設定を登録
- *
- * @param array $data 保存データ
- * @return bool
- * @throws InternalErrorException
- */
- public function savePermission($data) {
- $this->Block = ClassRegistry::init('Blocks.Block', true);
-
- //トランザクションBegin
- $this->begin();
-
- try {
- foreach ($data as $spaceId => $rooms) {
- if (! is_numeric($spaceId)) {
- continue;
- }
- foreach ($rooms as $roomId => $room) {
- // Reservation.idが空っぽ
- //if (empty($room['Reservation']['id'])) {
- // その場合はブロック未作成なので前もってブロック&Reservation作る
- $block = $this->saveBlock($roomId);
- // そのブロックキーを設定して
- foreach ($room['BlockRolePermission']['content_creatable'] as &$perm) {
- $perm['block_key'] = $block['Block']['key'];
- }
- $room['Reservation']['block_key'] = $block['Block']['key'];
- //}
- // 保存する
- $this->create();
- $this->set($room);
- if (! $this->validates()) {
- $this->rollback();
- return false;
- }
-
- // rooom_idを指定してBlockSettingを保存
- $this->saveBlockSetting($block['Block']['key'], $block['Block']['room_id']);
-
- $this->Behaviors->disable('Blocks.BlockSetting');
- if (! $this->save($room, false)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- $this->Behaviors->enable('Blocks.BlockSetting');
-
- }
- }
- //トランザクションCommit
- $this->commit();
-
- } catch (Exception $ex) {
- //トランザクションRollback
- $this->rollback($ex);
- return false;
- }
- return true;
- }
-/**
- * saveBlock
- *
- * ブロックを登録(すでにある場合は取得)
- *
- * @param int $roomId ルームID
- * @return array
- */
- public function saveBlock($roomId) {
- $block = $this->Block->find('first', array(
- 'conditions' => array(
- 'room_id' => $roomId,
- 'plugin_key' => 'reservations',
- ),
- 'recursive' => -1
- ));
- if ($block) {
- return $block;
- }
- $this->Block->create();
- $block = $this->Block->save(array(
- 'room_id' => $roomId,
- 'plugin_key' => 'reservations',
- ));
- return $block;
- }
-}
diff --git a/Model/ReservationRrule.php b/Model/ReservationRrule.php
deleted file mode 100644
index 878df2f..0000000
--- a/Model/ReservationRrule.php
+++ /dev/null
@@ -1,196 +0,0 @@
-
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppModel', 'Reservations.Model');
-
-/**
- * ReservationRrule Model
- *
- * @author AllCreator Co., Ltd.
- * @package NetCommons\Reservations\Model
- */
-class ReservationRrule extends ReservationsAppModel {
-
-/**
- * use behaviors
- *
- * @var array
- */
- public $actsAs = array(
- 'NetCommons.OriginalKey',
- 'NetCommons.Trackable',
- ////'Workflow.WorkflowComment',
- ////'Workflow.Workflow',
- 'Reservations.ReservationValidate',
- 'Reservations.ReservationApp', //base
- 'Reservations.ReservationInsertPlan', //Insert
- 'Reservations.ReservationUpdatePlan', //Update
- 'Reservations.ReservationDeletePlan', //Delete
- //'Blocks.Block' => array( // 施設予約ではブロック1つなんで削除 RyujiAMANO
- // //nameの値がBlockモデルの名称として登録される。
- // 'name' => 'ReservationRrule.name',
- // //'loadModels' => array( //Blockと紐づく(アソシエーションのある)
- // // //他のモデルがあれば、loadModelsで指定しておくと。
- // // //ブロックデータ登録時、指定モデルのblock_id,block_key
- // // //に値を自動セットしてくれる。
- // // //フロックデータ削除時、指定モデルから削除してくれる。
- // // //
- // // 'WorkflowComment' => 'Workflow.WorkflowComment',
- // // //Reservationの場合、WorkflowCommentがそれなので指定する。
- // // //
- // // //仕様詳細はBlocks/Model/Behavior/BlockBehavior.php参照のこと。
- // //),
- //),
- );
-
-/**
- * belongsTo associations
- *
- * @var array
- */
- public $belongsTo = array(
- 'Reservation' => array(
- 'className' => 'Reservations.Reservation',
- 'foreignKey' => 'reservation_id',
- 'conditions' => '',
- 'fields' => '',
- 'order' => ''
- ),
- 'Room' => array(
- 'className' => 'Rooms.Room',
- 'foreignKey' => 'room_id',
- 'conditions' => '',
- 'fields' => '',
- 'order' => ''
- ),
- //'Language' => array(
- // 'className' => 'Languages.Language',
- // 'foreignKey' => 'language_id',
- // 'conditions' => '',
- // 'fields' => '',
- // 'order' => ''
- //),
- );
-
-/**
- * hasMany associations
- *
- * @var array
- */
- public $hasMany = array(
- 'ReservationEvent' => array(
- 'className' => 'Reservations.ReservationEvent',
- 'foreignKey' => 'reservation_rrule_id',
- 'dependent' => true,
- 'conditions' => '',
- 'fields' => '',
- 'order' => array('id' => 'ASC'),
- 'limit' => '',
- 'offset' => '',
- 'exclusive' => '',
- 'finderQuery' => '',
- 'counterQuery' => ''
- )
- );
-
-/**
- * Validation rules
- *
- * @var array
- */
- public $validate = array(
- );
-
-/**
- * Constructor. Binds the model's database table to the object.
- *
- * @param bool|int|string|array $id Set this ID for this model on startup,
- * can also be an array of options, see above.
- * @param string $table Name of database table to use.
- * @param string $ds DataSource connection name.
- * @see Model::__construct()
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- */
- public function __construct($id = false, $table = null, $ds = null) {
- parent::__construct($id, $table, $ds);
-
- $this->loadModels([
- 'ReservationRrule' => 'Reservations.ReservationRrule',
- ]);
- }
-
-/**
- * Called during validation operations, before validation. Please note that custom
- * validation rules can be defined in $validate.
- *
- * @param array $options Options passed from Model::save().
- * @return bool True if validate operation should continue, false to abort
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
- * @see Model::save()
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate, array(
- 'reservation_id' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- 'required' => true,
- ),
- ),
- 'room_id' => array(
- 'rule1' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- 'required' => true,
- ),
- ),
- //langauge_id, status, is_active, is_latestは削除した。
- //'language_id' => array(
- // 'rule1' => array(
- // 'rule' => array('numeric'),
- // 'message' => __d('net_commons', 'Invalid request.'),
- // ),
- //),
- //'status' => array(
- // 'rule1' => array(
- // 'rule' => array('numeric'),
- // 'message' => __d('net_commons', 'Invalid request'),
- // 'required' => true,
- // ),
- //),
- //'is_active' => array(
- // 'rule1' => array(
- // 'rule' => 'boolean',
- // 'message' => __d('net_commons', 'Invalid request'),
- // ),
- //),
- //'is_latest' => array(
- // 'rule1' => array(
- // 'rule' => 'boolean',
- // 'message' => __d('net_commons', 'Invalid request'),
- // ),
- //),
- ));
- return parent::beforeValidate($options);
- }
-
-/**
- * Called after each successful save operation.
- *
- * @param bool $created True if this save created a new record
- * @param array $options Options passed from Model::save().
- * @return void
- * @throws InternalErrorException
- */
-}
diff --git a/Model/ReservationTimeframe.php b/Model/ReservationTimeframe.php
deleted file mode 100644
index 8585834..0000000
--- a/Model/ReservationTimeframe.php
+++ /dev/null
@@ -1,390 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsAppModel', 'Reservations.Model');
-
-/**
- * Summary for ReservationTimeframe Model
- */
-class ReservationTimeframe extends ReservationsAppModel {
-
-/**
- * use behaviors
- *
- * @var array
- */
- public $actsAs = array(
- 'NetCommons.OriginalKey',
- //多言語
- 'M17n.M17n' => array(
- 'commonFields' => array( // 言語が異なっても同じにするフィールド
- 'color',
- ),
- 'afterCallback' => false,
- ),
- );
-
-/**
- * Validation rules
- *
- * @var array
- */
- public $validate = array();
-
- //The Associations below have been created with all possible keys, those that are not needed can be removed
-
-/**
- * belongsTo associations
- *
- * @var array
- */
- public $belongsTo = array(
- 'Language' => array(
- 'className' => 'M17n.Language',
- 'foreignKey' => 'language_id',
- 'conditions' => '',
- 'fields' => '',
- 'order' => ''
- )
- );
-
-/**
- * beforeValidate
- *
- * @param array $options options
- * @return bool
- */
- public function beforeValidate($options = array()) {
- $this->validate = ValidateMerge::merge($this->validate,
- array(
- 'language_id' => array(
- 'numeric' => array(
- 'rule' => array('numeric'),
- 'message' => __d('net_commons', 'Invalid request.'),
- ),
- ),
- 'title' => array(
- 'notBlank' => array(
- 'rule' => array('notBlank'),
- 'message' => __d(
- 'net_commons',
- 'Please input %s.', __d('reservations', 'Time frame name')
- ),
- ),
- ),
- 'start_time' => array(
- 'rule1' => array(
- 'rule' => array('validateTime'),
- 'message' => __d('reservations', 'Invalid value.'),
- ),
- 'rule2' => array(
- 'rule' => array('validateTimeRange', 'end_time'),
- 'message' => __d('reservations', 'Invalid value.'),
- ),
- 'rule3' => [
- 'rule' => ['validateTimeFrameNotExist'],
- 'message' => __d('reservations', 'Duplicate time frames.')
- ]
- ),
- 'end_time' => array(
- 'rule1' => array(
- 'rule' => array('validateTime'),
- 'message' => __d('reservations', 'Invalid value.'),
- ),
- ),
- 'color' => array(
- 'notBlank' => array(
- 'rule' => array('notBlank'),
- 'message' => __d(
- 'net_commons',
- 'Please input %s.', __d('reservations', 'Time frame color')
- ),
- ),
- ),
- )
- );
- return parent::beforeValidate($options);
- }
-
-/**
- * Called after each find operation. Can be used to modify any results returned by find().
- * Return value should be the (modified) results.
- *
- * @param mixed $results The results of the find operation
- * @param bool $primary Whether this model is being queried directly (vs. being queried as an association)
- * @return mixed Result of the find operation
- * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
- * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#afterfind
- */
- public function afterFind($results, $primary = false) {
- foreach ($results as $key => $value) {
- if (
- Hash::check($value, $this->alias . '.start_time') &&
- Hash::check($value, $this->alias . '.end_time')
- ) {
- $results[$key][$this->alias]['openText'] = $this->_openText($value);
- }
- //if (array_key_exists('start_time', $results[$key][$this->alias]) &&
- // array_key_exists('end_time', $results[$key][$this->alias])) {
- // $results[$key][$this->alias]['openText'] = $this->_openText($value);
- //}
- }
- return $results;
- }
-
-/**
- * 時間枠の登録
- *
- * @param array $data 登録データ
- * @return bool
- * @throws InternalErrorException
- */
- public function saveTimeframe($data) {
- $this->begin();
-
- try {
- // 先にvalidate 失敗したらfalse返す
- $this->set($data);
- if (!$this->validates($data)) {
- return false;
- }
-
- // start_time end_timeをUTCに変換
- $startDateTime = Date('Y-m-d') . $data[$this->alias]['start_time'] . ':00';
- $endDateTime = Date('Y-m-d') . $data[$this->alias]['end_time'] . ':00';
- $ncTime = new NetCommonsTime();
- $startDateTime4UTC = $ncTime->toServerDatetime($startDateTime,
- $data[$this->alias]['timezone']);
- $endDateTime4UTC = $ncTime->toServerDatetime($endDateTime,
- $data[$this->alias]['timezone']);
- $data[$this->alias]['start_time'] = $startDateTime4UTC;
- $data[$this->alias]['end_time'] = $endDateTime4UTC;
-
- $savedData = $this->save($data, false);
- if (! $savedData) {
- //このsaveで失敗するならvalidate以外なので例外なげる
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //多言語化の処理
- $this->set($savedData);
- $this->saveM17nData();
-
- $this->commit();
-
- } catch (Exception $e) {
- $this->rollback($e);
- }
-
- return $savedData;
- }
-
-/**
- * 時間枠の削除
- *
- * @param array $data 登録データ
- * @return bool
- * @throws InternalErrorException
- */
- public function deleteTimeframe($data) {
- $this->begin();
-
- try {
- $conditions = array(
- $this->alias . '.key' => $data[$this->alias]['key']
- );
- if (! $this->deleteAll($conditions, false)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
-
- //0件になったら、ReservationFrameSetting.display_timeframeを0にする
- if ($this->find('count', ['recursive' => -1]) === 0) {
- $this->loadModels([
- 'ReservationFrameSetting' => 'Reservations.ReservationFrameSetting',
- ]);
- $update = array(
- $this->ReservationFrameSetting->alias . '.display_timeframe' => false
- );
- if (! $this->ReservationFrameSetting->updateAll($update, null)) {
- throw new InternalErrorException(__d('net_commons', 'Internal Server Error'));
- }
- }
-
- $this->commit();
-
- } catch (Exception $e) {
- $this->rollback($e);
- }
-
- return true;
- }
-
-/**
- * 時刻バリデーション H:i形式か。
- *
- * @param array $check チェックする値の配列
- * @return bool
- */
- public function validateTime($check) {
- $values = array_values($check);
- $time = $values[0];
-
- if (!preg_match('/^[0-9]{2}:[0-9]{2}$/', $time)) {
- return false;
- }
- list($hour, $min) = explode(':', $time);
- if (intval($hour) < 0 || intval($hour) > 24) {
- return false;
- }
- if (intval($min) < 0 || intval($min) > 59) {
- return false;
- }
- return true;
- }
-
-/**
- * 時刻範囲バリデーション
- *
- * @param array $check 開始の配列
- * @param string $endKey 終了値の入るキー名
- * @return bool
- */
- public function validateTimeRange($check, $endKey) {
- $values = array_values($check);
- $startTime = $values[0];
-
- $endTime = $this->data[$this->alias][$endKey];
- return ($startTime < $endTime);
- }
-
-/**
- * 時間枠の重複防止バリデーション
- *
- * @param array $check チェック対象配列
- * @return bool
- */
- public function validateTimeFrameNotExist($check) {
- $startTime = $this->data[$this->alias]['start_time'];
- $endTime = $this->data[$this->alias]['end_time'];
- // UTCに変換してから比較する。
- $startDateTime = Date('Y-m-d') . $startTime . ':00';
- $endDateTime = Date('Y-m-d') . $endTime . ':00';
- $ncTime = new NetCommonsTime();
- $startDateTime4UTC = $ncTime->toServerDatetime($startDateTime,
- $this->data[$this->alias]['timezone']);
- $endDateTime4UTC = $ncTime->toServerDatetime($endDateTime,
- $this->data[$this->alias]['timezone']);
-
- $startTime = date('H:i:s', strtotime($startDateTime4UTC));
- $endTime = date('H:i:s', strtotime($endDateTime4UTC));
-
- // start > endになったら24:00またぎなのでstart-24:00 までと 0:00-end の重複チェックする
- if ($startTime > $endTime) {
- $inputRanges = [
- [
- 'start' => $startTime,
- 'end' => '24:00:00'
- ],
- [
- 'start' => '00:00:00',
- 'end' => $endTime
- ]
-
- ];
- } else {
- $inputRanges = [
- [
- 'start' => $startTime,
- 'end' => $endTime
- ]
- ];
- }
- // 全時間枠取得
- $conditions = [];
- if ($id = Hash::get($this->data, 'ReservationTimeframe.id')) {
- $conditions = [
- 'ReservationTimeframe.id !=' => $id,
- ];
- }
- $timeframes = $this->find('all', [
- 'conditions' => $conditions,
- 'group' => 'ReservationTimeframe.key'
- ]);
- // start > endなデータは24:00またぎなのでstart-24:00 と 0:00-end のデータとして扱う。
- $existRanges = [];
- foreach ($timeframes as $timeframe) {
- if ($timeframe[$this->alias]['start_time'] > $timeframe[$this->alias]['end_time']) {
- $existRanges[] = [
- 'start' => $timeframe[$this->alias]['start_time'],
- 'end' => '24:00:00'
- ];
- $existRanges[] = [
- 'start' => '00:00:00',
- 'end' => $timeframe[$this->alias]['end_time']
- ];
- } else {
- $existRanges[] = [
- 'start' => $timeframe[$this->alias]['start_time'],
- 'end' => $timeframe[$this->alias]['end_time']
- ];
- }
- }
- foreach ($inputRanges as $inputRange) {
- foreach ($existRanges as $existRange) {
- // 既にある時間枠のStartが指定範囲のENDより前で既存時間枠のENDが指定STARTよりも後なら重複
- if ($existRange['start'] < $inputRange['end'] &&
- $existRange['end'] > $inputRange['start']
- ) {
- return false;
- }
- }
- }
- return true;
- }
-
-/**
- * 時間枠の範囲(表示用)を返す
- *
- * @param array $timeframe 施設データ
- * @return string
- */
- protected function _openText($timeframe) {
- $ret = '';
-
- //時間
- $startTime = $timeframe[$this->alias]['start_time'];
- $timeframeTimeZone = new DateTimeZone($timeframe[$this->alias]['timezone']);
- $startDate = new DateTime($startTime, new DateTimeZone('UTC'));
-
- $startDate->setTimezone($timeframeTimeZone);
- $timeframe[$this->alias]['start_time'] = $startDate->format('H:i');
-
- $endTime = $timeframe[$this->alias]['end_time'];
- $endDate = new DateTime($endTime, new DateTimeZone('UTC'));
- $endDate->setTimezone($timeframeTimeZone);
- $timeframe[$this->alias]['end_time'] = $endDate->format('H:i');
-
- $ret = sprintf('%s %s - %s',
- $ret,
- $timeframe[$this->alias]['start_time'],
- $timeframe[$this->alias]['end_time']
- );
- if (AuthComponent::user('timezone') != $timeframe[$this->alias]['timezone']) {
- $SiteSetting = new SiteSetting();
- $SiteSetting->prepare();
- $ret .= ' ';
- $ret .= $SiteSetting->defaultTimezones[$timeframe[$this->alias]['timezone']];
- }
- return $ret;
- }
-}
diff --git a/Model/ReservationsAppModel.php b/Model/ReservationsAppModel.php
index 464b374..5405e7e 100644
--- a/Model/ReservationsAppModel.php
+++ b/Model/ReservationsAppModel.php
@@ -1,464 +1,7 @@
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
App::uses('AppModel', 'Model');
-App::uses('ReservationRruleUtil', 'Reservations.Utility');
-App::uses('Space', 'Rooms.Model');
-/**
- * ReservationsApp Model
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Model
- */
class ReservationsAppModel extends AppModel {
-/**
- * getReadableRoomIds関数が何度も繰り返し呼び出された時のための保持変数
- *
- * @var array
- */
- protected $_readableRoomIds = null;
-
-/**
- * getReadableRoomIdsWithOutPrivate()が何度も繰り返し呼び出された時のための保持変数
- *
- * @var array|null
- */
- protected $_notPrivateRoomIds = null;
-
-/**
- * @var array|null アクセスユーザの参加るーむごとのrole_key [room.id => role_key, ...] プライベートルームは含まない
- * @see self::__loadJoinRoomsAndRole
- */
- protected $_roleKeysWithRoomId = null;
-
-/**
- * @var array 参加ルーム プライベートルーム含む
- * @see self::__loadJoinRoomsAndRole
- */
- private $__joinRooms;
-
-/**
- * getReadableRoomIds
- *
- * 読み取り可能なルームのID配列を返す
- *
- * @return array
- */
- public function getReadableRoomIds() {
- // 読み取り可能なルームを取得
- // 読み取り可能なルームはフレームが異なろうとも、1アクセス中で変わることはないので
- // 保存して使いまわす
- if (! is_null($this->_readableRoomIds)) {
- return $this->_readableRoomIds;
- }
-
- $rooms = $this->__loadJoinRoomsAndRole();
-
- $roomIds = array_column(array_column($rooms, 'Room'), 'id');
- $this->_readableRoomIds = $roomIds;
- return $roomIds;
- }
-
-/**
- * プライベートルームを除外したアクセス可能なルームIDリスト
- *
- * @return array
- */
- public function getReadableRoomIdsWithOutPrivate() {
- if (! is_null($this->_notPrivateRoomIds)) {
- return $this->_notPrivateRoomIds;
- }
-
- $rooms = $this->__loadJoinRoomsAndRole();
-
- $roomIds = [];
- foreach ($rooms as $room) {
- if ($room['Room']['space_id'] !== Space::PRIVATE_SPACE_ID) {
- $roomIds[] = $room['Room']['id'];
- }
- }
- $this->_notPrivateRoomIds = $roomIds;
-
- return $roomIds;
- }
-
-/**
- * __findJoinRooms
- *
- * @see self::_roleKeysWithRoomId
- * @see self::__joinRooms
- *
- * @return array|int|null 参加しているルームを返す(プライベートルーム含む)
- */
- private function __loadJoinRoomsAndRole() {
- if ($this->__joinRooms === null) {
- $this->Room = ClassRegistry::init('Rooms.Room', true);
- $condition = $this->Room->getReadableRoomsConditions();
- $this->__joinRooms = $this->Room->find('all', $condition);
- foreach ($this->__joinRooms as $room) {
- if ($room['Room']['space_id'] !== Space::PRIVATE_SPACE_ID) {
- $roomId = $room['Room']['id'];
- $this->_roleKeysWithRoomId[$roomId] = $room['RolesRoom']['role_key'];
- }
- }
- }
- return $this->__joinRooms;
- }
-
-/**
- * _setAndMergeDateTime
- *
- * 日付時刻系のパラメータを整形し、予定パラメータにマージして返す
- *
- * @param array $planParam merge前の予定パラメータ
- * @param array $data POSTされたデータ
- * @return array 成功時 整形,merged後の予定パラメータ. 失敗時 例外をthrowする.
- * @throws InternalErrorException
- */
- protected function _setAndMergeDateTime($planParam, $data) {
- //詳細画面からのデータ
- //時間指定なしの場合
- // [detail_start_datetime] => 2016-03-06 ユーザ系日付(から)
- // [detail_end_datetime] => 2016-03-08 ユーザ系日付(まで)
- //時間指定有の場合
- // [detail_start_datetime] => 2016-03-06 09:00 ユーザ系日付時刻(秒はなし)(から)
- // [detail_end_datetime] => 2016-03-08 12:00 ユーザ系日付時刻(秒はなし)(まで)
-
- if ($data[$this->alias]['enable_time']) {
- $planParam['is_allday'] = 0;
- //時間指定あり
- $nctm = new NetCommonsTime();
-
- $serverStartDatetime = $nctm->toServerDatetime(
- $data[$this->alias]['detail_start_datetime'] . ':00', $data[$this->alias]['timezone']);
- $planParam['start_date'] =
- ReservationTime::stripDashColonAndSp(substr($serverStartDatetime, 0, 10));
- $planParam['start_time'] =
- ReservationTime::stripDashColonAndSp(substr($serverStartDatetime, 11, 8));
- $planParam['dtstart'] = $planParam['start_date'] . $planParam['start_time'];
-
- $serverEndDatetime =
- $nctm->toServerDatetime($data[$this->alias]['detail_end_datetime'] . ':00',
- $data[$this->alias]['timezone']);
- $planParam['end_date'] =
- ReservationTime::stripDashColonAndSp(substr($serverEndDatetime, 0, 10));
- $planParam['end_time'] = ReservationTime::stripDashColonAndSp(substr($serverEndDatetime, 11, 8));
- $planParam['dtend'] = $planParam['end_date'] . $planParam['end_time'];
- } else {
- $planParam['is_allday'] = 1;
- //ユーザー系の開始日と終了日とタイムゾーンを、サーバ系の開始日の00:00:00から終了翌日の00:00:00に変換する
- // FUJI start, end が翌日に設定されているときはNextDateにするなとわたす
- list($serverStartDate, $serverEndNextDate) =
- (new ReservationTime())->convUserFromTo2SvrFromTo(
- $data[$this->alias]['detail_start_datetime'],
- $data[$this->alias]['detail_end_datetime'],
- $data[$this->alias]['timezone'],
- $planParam['is_allday']);
-
- $planParam['start_date'] = ReservationTime::stripDashColonAndSp(substr($serverStartDate, 0, 10));
- $planParam['start_time'] = ReservationTime::stripDashColonAndSp(substr($serverStartDate, 11, 8));
- $planParam['dtstart'] = $planParam['start_date'] . $planParam['start_time'];
-
- $planParam['end_date'] = ReservationTime::stripDashColonAndSp(substr($serverEndNextDate, 0, 10));
- $planParam['end_time'] = ReservationTime::stripDashColonAndSp(substr($serverEndNextDate, 11, 8));
- $planParam['dtend'] = $planParam['end_date'] . $planParam['end_time'];
- }
- return $planParam;
- }
-
-/**
- * _setAndMergeRrule
- *
- * Rruleのパラメータを整形し、予定パラメータにマージして返す
- *
- * @param array $planParam merge前の予定パラメータ
- * @param array $data POSTされたデータ
- * @return array 成功時 整形,merged後の予定パラメータ. 失敗時 例外をthrowする.
- * @throws InternalErrorException
- */
- protected function _setAndMergeRrule($planParam, $data) {
- //CakeLog::debug("DBGY: data[" . $this->alias . "]=[" . print_r($data[$this->alias], true), "]");
-
- $rrule = array();
-
- if ($data[$this->alias]['is_repeat']) {
- //$wdayArray = explode('|', ReservationsComponent::CALENDAR_REPEAT_WDAY);
- $repeatFreq = $data[$this->alias]['repeat_freq'];
- $rruleInterval = $data[$this->alias]['rrule_interval'];
-
- $rruleByday = $data[$this->alias]['rrule_byday'];
- $rruleBymonthday = $data[$this->alias]['rrule_bymonthday'];
-
- $rruleBymonth = $data[$this->alias]['rrule_bymonth'];
-
- $rruleTerm = $data[$this->alias]['rrule_term'];
-
- //validateはすでに終わっているので、以下では、データ加工のみに集中する。
-
- //
- //rruleTermの設定
- //
- if ($rruleTerm === 'COUNT') {
- $rruleCount = $data[$this->alias]['rrule_count'];
- //validateはすでにおわっているので省略
- $rrule['COUNT'] = $rruleCount;
- }
-
- if ($rruleTerm === 'UNTIL') {
- $this->__doRruleTermUntil($planParam, $data, $rrule, $repeatFreq, $rruleInterval,
- $rruleByday, $rruleBymonthday, $rruleBymonth, $rruleTerm);
- }
-
- //
- // repeatFreqの設定
- //
- switch ($repeatFreq) {
- case ReservationsComponent::CALENDAR_REPEAT_FREQ_DAILY: //日単位
- $rrule['FREQ'] = $repeatFreq;
- $rrule['INTERVAL'] = intval($rruleInterval[$repeatFreq]);
- break;
- case ReservationsComponent::CALENDAR_REPEAT_FREQ_WEEKLY: //週単位
- $rrule['FREQ'] = $repeatFreq;
- $rrule['INTERVAL'] = intval($rruleInterval[$repeatFreq]);
- $rrule['BYDAY'] = $rruleByday[$repeatFreq];
- break;
- case ReservationsComponent::CALENDAR_REPEAT_FREQ_MONTHLY: //月単位
- $this->__doRruleRepeatFreqMonthly(
- $planParam, $data, $rrule, $repeatFreq, $rruleInterval,
- $rruleByday, $rruleBymonthday, $rruleBymonth, $rruleTerm);
- break;
- case ReservationsComponent::CALENDAR_REPEAT_FREQ_YEARLY: //年単位
- $this->__doRruleRepeatFreqYearly(
- $planParam, $data, $rrule, $repeatFreq, $rruleInterval, $rruleByday,
- $rruleBymonthday, $rruleBymonth, $rruleTerm);
- break;
- default:
- $rrule['FREQ'] = 'NONE';
- }
- } else {
- //繰返しなし
- $rrule['FREQ'] = 'NONE';
- }
- //rrule配列を、concatRrule()を使って文字列化
- $planParam['rrule'] = (new ReservationRruleUtil())->concatRrule($rrule);
-
- return $planParam;
- }
-
-/**
- * __doRruleTermUntil
- *
- * RruleTermUntilのrrule設定処理
- *
- * @param array &$planParam planParam
- * @param array &$data data
- * @param array &$rrule rrule 最終的な結果はこのrruleにセットする。
- * @param array &$repeatFreq repeatFreq
- * @param array &$rruleInterval rruleInterval
- * @param mixed &$rruleByday rruleByday
- * @param mixed &$rruleBymonthday rruleBymonthday
- * @param array &$rruleBymonth rruleBymonth
- * @param array &$rruleTerm rruleTerm
- * @return void 参照引数$rruleに値をセットして返すので戻り値なし
- */
- private function __doRruleTermUntil(&$planParam, &$data, &$rrule, &$repeatFreq, &$rruleInterval,
- &$rruleByday, &$rruleBymonthday, &$rruleBymonth, &$rruleTerm) {
- //$rruleUntil = $data[$this->alias]['rrule_until'];
- //validateはすでにおわっているので省略
-
- //注釈) NC2の時は、UNTILを同日24:00:00から作り出していたが、NC3では、翌日00:00:00をUNTILとしている。
- //
- $untilDateS = $data[$this->alias]['rrule_until'] . ' 00:00:00'; //Y-m-d H:i:s形式
- $untilDateA = ReservationTime::transFromYmdHisToArray($untilDateS);
- list($yearOfNextDay, $monthOfNextDay, $nextDay) =
- ReservationTime::getNextDay($untilDateA['year'], $untilDateA['month'], $untilDateA['day']);
- $nextDayOfUntilDateS =
- sprintf("%04d-%02d-%02d 00:00:00", (int)$yearOfNextDay, (int)$monthOfNextDay,
- (int)$nextDay);
- //untilDateSの翌日00:00:00を作り出し、サーバー系に直す
- $nctm = new NetCommonsTime();
- $svrNxtDayOfUntilDtS =
- $nctm->toServerDatetime($nextDayOfUntilDateS, $data[$this->alias]['timezone']);
- $ymdHis = ReservationTime::dt2CalDt($svrNxtDayOfUntilDtS);
- $rrule['UNTIL'] = substr($ymdHis, 0, 8) . 'T' . substr($ymdHis, 8);
- }
-
-/**
- * __doRruleRepeatFreqMonthly
- *
- * RruleRepeatFreqの月のrrule設定処理
- *
- * @param array &$planParam planParam
- * @param array &$data data
- * @param array &$rrule rrule 最終的な結果はこのrruleにセットする。
- * @param array &$repeatFreq repeatFreq
- * @param array &$rruleInterval rruleInterval
- * @param mixed &$rruleByday rruleByday
- * @param mixed &$rruleBymonthday rruleBymonthday
- * @param array &$rruleBymonth rruleBymonth
- * @param array &$rruleTerm rruleTerm
- * @return void 参照引数$rruleに値をセットして返すので戻り値なし
- */
- private function __doRruleRepeatFreqMonthly(
- &$planParam, &$data, &$rrule, &$repeatFreq, &$rruleInterval, &$rruleByday,
- &$rruleBymonthday, &$rruleBymonth, &$rruleTerm) {
- $rrule['FREQ'] = $repeatFreq;
- $rrule['INTERVAL'] = intval($rruleInterval[$repeatFreq]);
-
- //CakeLog::debug("DBG: MONTHLY case. repeatFreq[" . $repeatFreq . "] rruleByday[" . $repeatFreq . "]=[" . print_r($rruleByday[$repeatFreq], true) . "]");
-
- if (isset($rruleByday) && isset($rruleByday[$repeatFreq])) {
- $this->__toArrayRrruleByanyway($rruleByday, $repeatFreq);
- $rrule['BYDAY'] = $this->__makeArrayOfRruleByDay($rruleByday, $repeatFreq);
- }
- if (isset($rruleBymonthday) && isset($rruleBymonthday[$repeatFreq])) {
- $this->__toArrayRrruleByanyway($rruleBymonthday, $repeatFreq);
- $rrule['BYMONTHDAY'] = $this->__makeArrayOfRruleByMonthday($rruleBymonthday, $repeatFreq);
- }
- //実際には、$byday, $bymonthdayいずれか一方は空配列で、他方に1要素のみ存在する形になることがvalidatorで保証されている。
- }
-
-/**
- * __toArrayRrruleByanyway
- *
- * Rrule用汎用配列統一関数
- *
- * @param mixed &$rruleByanyway rruleByanyway
- * @param string &$repeatFreq repeatFreq
- * @return void 参照引数$rruleByanywayに値をセットして返すので戻り値なし
- */
- private function __toArrayRrruleByanyway(&$rruleByanyway, &$repeatFreq) {
- //NC3のcakePHPのViewの場合、singleSelectの場合、配列ではなく文字列で渡ってくる.
- //が、本プログラムの繰り返し処理は、rrule_byday[MONTHLY] or rrule_bymonthday[MONTHLY] or rrule_byday[YEARLY]
- //が配列であるとを想定して実装してある。
- //よって、文字列の場合、配列化する。
- if (!is_array($rruleByanyway[$repeatFreq])) {
- if (empty($rruleByanyway[$repeatFreq])) { //空文字=未選択の場合
- $rruleByanyway[$repeatFreq] = array();
- } else {
- $rruleByanyway[$repeatFreq] = array($rruleByanyway[$repeatFreq]);
- }
- }
- }
-
-/**
- * __makeArrayOfRruleByDay
- *
- * Rrule用BYDAY配列生成関数
- *
- * @param array &$rruleByday rruleByday
- * @param string &$repeatFreq repeatFreq
- * @return array 作成したbyday配列を返す
- */
- private function __makeArrayOfRruleByDay(&$rruleByday, &$repeatFreq) {
- $wdays = explode('|', ReservationsComponent::CALENDAR_REPEAT_WDAY); //SU,MO, ... ,SA
-
- $byday = array();
- foreach ($rruleByday[$repeatFreq] as $val) {
- $wday = substr($val, -2); //4SA,-1MOより、"SA","MO"の部分を抜き出す。
- $num = intval(substr($val, 0, -2)); //4SA,-1MOより、"4","-1"の部分を抜き出し整数化
- if ($num === 0) { //YEARYの「開始日と同日」($val==='')のケース
- $val = $wday;
- }
- if (!in_array($wday, $wdays)) { //YEARYの「開始日と同日」指定時は代入しない
- continue;
- }
- //$wdayがSU-SAにあるかどうか、$numが-1以上4以下であるかのチェックは、すでにvalidateでおわっているので省略
- $byday[] = $val;
- }
- return $byday;
- }
-
-/**
- * __makeArrayOfRruleByMonthday
- *
- * Rrule用BYMONTHDAY配列生成関数
- *
- * @param array &$rruleBymonthday rruleBymonthday
- * @param string &$repeatFreq repeatFreq
- * @return array 作成したbymonthday配列を返す
- */
- private function __makeArrayOfRruleByMonthday(&$rruleBymonthday, &$repeatFreq) {
- $bymonthday = array();
- foreach ($rruleBymonthday[$repeatFreq] as $val) {
- $val = intval($val);
- if ($val > 0 && $val <= 31) {
- $bymonthday[] = $val;
- }
- }
- return $bymonthday;
- }
-
-/**
- * __doRruleRepeatFreqYearly
- *
- * RruleRepeatFreqの年のrrule設定処理
- *
- * @param array &$planParam planParam
- * @param array &$data data
- * @param array &$rrule rrule 最終的な結果はこのrruleにセットする。
- * @param array &$repeatFreq repeatFreq
- * @param array &$rruleInterval rruleInterval
- * @param mixed &$rruleByday rruleByday
- * @param mixed &$rruleBymonthday rruleBymonthday
- * @param array &$rruleBymonth rruleBymonth
- * @param array &$rruleTerm rruleTerm
- * @return void 参照引数$rruleに値をセットして返すので戻り値なし
- */
- private function __doRruleRepeatFreqYearly(
- &$planParam, &$data, &$rrule, &$repeatFreq, &$rruleInterval, &$rruleByday,
- &$rruleBymonthday, &$rruleBymonth, &$rruleTerm) {
- $rrule['FREQ'] = $repeatFreq;
- $rrule['INTERVAL'] = intval($rruleInterval[$repeatFreq]);
-
- $bymonth = array();
- foreach ($rruleBymonth[$repeatFreq] as $val) {
- $val = intval($val);
- if ($val > 0 && $val <= 12) {
- $bymonth[] = $val;
- }
- }
- $rrule['BYMONTH'] = $bymonth;
-
- if (isset($rruleByday) && isset($rruleByday[$repeatFreq])) {
- $this->__toArrayRrruleByanyway($rruleByday, $repeatFreq);
- $rrule['BYDAY'] = $this->__makeArrayOfRruleByDay($rruleByday, $repeatFreq);
- }
- }
-
-/**
- * _getStatus
- *
- * $data['save_N']のN(=status)を抜き出す
- *
- * @param array $data request->data配列
- * @return mixed 成功した時はstatus。失敗した時はfalseを返す。
- */
- protected function _getStatus($data) {
- $statuses = array(
- WorkflowComponent::STATUS_PUBLISHED,
- WorkflowComponent::STATUS_APPROVAL_WAITING,
- WorkflowComponent::STATUS_IN_DRAFT,
- WorkflowComponent::STATUS_DISAPPROVED,
- );
- foreach ($statuses as $status) {
- $saveStatus = 'save_' . $status;
- //save_Nの値は空なので、emptyではなくissetで判断すること
- if (isset($data[$saveStatus])) {
- return $status;
- }
- }
- return false;
- }
-
}
diff --git a/Parameter/ReservationRruleParameter.php b/Parameter/ReservationRruleParameter.php
deleted file mode 100644
index 5cf31a5..0000000
--- a/Parameter/ReservationRruleParameter.php
+++ /dev/null
@@ -1,116 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class ReservationRruleParameter
- */
-class ReservationRruleParameter {
-
-/**
- * @var string モデル名
- */
- protected $_modelName = 'ReservationActionPlan';
-
-/**
- * @var array rrule
- */
- protected $_rrule = null;
-
-/**
- * request dataのセット
- *
- * @param array $data リクエストデータ。
- * @return void
- */
- public function setData($data) {
- // リピートか?
- $data = $data[$this->_modelName];
- if ($data['is_repeat']) {
- // repeat
- // 日、週、月、年のいずれか?
- $this->_rrule['FREQ'] = $data['repeat_freq'];
- switch ($data['repeat_freq']){
- case 'DAILY':
- $this->_rrule['INTERVAL'] = $data['rrule_interval']['DAILY'];
- break;
- case 'WEEKLY':
- $this->_makeWeeklyRrule($data);
- break;
- case 'MONTHLY':
- $this->_makeMonthlyRrule($data);
- break;
- case 'YEARLY':
- $this->_makeYearyRrule($data);
- break;
- }
- // count or until
- if ($data['rrule_term'] == 'COUNT') {
- // count
- $this->_rrule['COUNT'] = $data['rrule_count'];
- } else {
- //until
- $this->_rrule['UNTIL'] = $data['rrule_until'];
- }
- }
- }
-
-/**
- * rruleをかえす
- *
- * @return array rrule
- */
- public function getRrule() {
- return $this->_rrule;
- }
-
-/**
- * 年繰り返しのrrule生成
- *
- * @param array $data request data
- * @return void
- */
- protected function _makeYearyRrule($data) {
- $this->_rrule['INTERVAL'] = $data['rrule_interval']['YEARLY'];
- if ($data['rrule_bymonth']['YEARLY']) {
- $this->_rrule['BYMONTH'] = $data['rrule_bymonth']['YEARLY']; // 配列まま
- }
- if ($data['rrule_byday']['YEARLY']) {
- // ex 2SU 第2日曜
- $this->_rrule['BYDAY'] = $data['rrule_byday']['YEARLY'];
- }
- }
-
-/**
- * 月繰り返しのrrule生成
- *
- * @param array $data request data
- * @return void
- */
- protected function _makeMonthlyRrule($data) {
- $this->_rrule['INTERVAL'] = $data['rrule_interval']['MONTHLY'];
- if ($data['rrule_byday']['MONTHLY']) {
- // ex 2SU 第2日曜
- $this->_rrule['BYDAY'] = $data['rrule_byday']['MONTHLY'];
- }
- if ($data['rrule_bymonthday']['MONTHLY']) {
- $this->_rrule['BYMONTHDAY'] = $data['rrule_bymonthday']['MONTHLY'];
- }
- }
-
-/**
- * 週繰り返しのrrule生成
- *
- * @param array $data request data
- * @return void
- */
- protected function _makeWeeklyRrule($data) {
- $this->_rrule['INTERVAL'] = $data['rrule_interval']['WEEKLY'];
- $this->_rrule['BYDAY'] = $data['rrule_byday']['WEEKLY']; //配列のまま
- }
-}
\ No newline at end of file
diff --git a/Policy/ReservationEventPermissionPolicy.php b/Policy/ReservationEventPermissionPolicy.php
deleted file mode 100644
index a325b23..0000000
--- a/Policy/ReservationEventPermissionPolicy.php
+++ /dev/null
@@ -1,205 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class ReservationEventPermissionPolicy
- */
-class ReservationEventPermissionPolicy {
-
-/**
- * @var array ReservationEvent data
- */
- protected $_event;
-
-/**
- * 施設のキャッシュ
- *
- * @var array
- */
- protected $_locations = [];
-
-/**
- * アクセス可能なルームIDリストのキャッシュ
- *
- * @var array
- */
- protected $_readableRoomIds = [];
-
-/**
- * @var ReservationLocationReservable ReadableLocationReservable model
- */
- private $__reservationLocationReservable;
-
-/**
- * ReservationEventPermissionPolicy constructor.
- *
- * @param array $event ReservationEvnet Data
- */
- public function __construct($event) {
- $this->_event = $event;
- $this->__reservationLocationReservable = ClassRegistry::init(
- 'Reservations.ReservationLocationReservable'
- );
- }
-
-/**
- * 編集できるか
- *
- * @param int $userId ユーザID
- * @return bool
- */
- public function canEdit($userId) {
- $data = $this->_event;
- $location = $this->_getLocationByKey($data['ReservationEvent']['location_key']);
- if ($userId == $data['ReservationEvent']['created_user']) {
- // 予約権限があれば編集可
- return $this->__reservationLocationReservable->isReservableByLocation($location);
- } else {
- // 他の人の予約
- // ルーム管理者なら編集可能にしていたが、システム管理者、サイト管理者のみ編集可能にする。
- // サイト管理を使えるユーザなら編集可能。
- if (Current::allowSystemPlugin('site_manager')) {
- return true;
- }
- //// block_permission_editable なら見られる
- //if (Current::read('Room.space_id') != Space::PRIVATE_SPACE_ID) {
- // if (Current::read('Permission.block_permission_editable.value')) {
- // return true;
- // }
- //}
-
- $approvalUserIds = $location['approvalUserIds'];
-
- if (in_array($userId, $approvalUserIds)) {
- // 承認者はどのルームでも編集可能(でないと承認できない)
- return true;
- }
- // 承認者でなければ編集不可
- return false;
- }
- }
-
-/**
- * 詳細を閲覧できるか
- *
- * @param int $userId ユーザID
- * @return bool
- */
- public function canRead($userId) {
- // ε( v ゚ω゚) <こういう判定はPolicy ReadableReservationPolicy classとかにした方がいいのかも
- // (DBアクセスあるのはイヤだけど)
- // ε( v ゚ω゚) < というかアクセスユーザのアクセス可能なルームぐらいSessionにあってもいい気もする
-
- //$userId = Current::read('User.id');
- $data = $this->_event;
- if ($userId == $data['ReservationEvent']['created_user']) {
- // 自分の予約は無条件に見られる。
- return true;
- }
- // 他の人の予約
-
- // block_permission_editable なら見られる
- if (Current::read('Room.space_id') != Space::PRIVATE_SPACE_ID) {
- if (Current::read('Permission.block_permission_editable.value')) {
- return true;
- }
- }
-
- $location = $this->_getLocationByKey($data['ReservationEvent']['location_key']);
- $approvalUserIds = $location['approvalUserIds'];
-
- if (in_array($userId, $approvalUserIds)) {
- // 承認者はどのルームでも見られる(でないと承認できない)
- return true;
- }
-
- // 以降承認者以外の場合のチェック
- $publishedRoomId = $data['ReservationEvent']['room_id'];
- if (!$this->_isReadablePublishedRoomId($publishedRoomId, $userId, $location)) {
- return false;
- }
-
- $status = $data['ReservationEvent']['status'];
- if ($status == WorkflowComponent::STATUS_PUBLISHED) {
- //「公開」になってる予約は承認者でなくても見られる
- return true;
- }
-
- // まだ公開になってない予約は見られない
- return false;
- }
-
-/**
- * 予約で公開先となってるRoomIdにたいしてアクセスできるか?
- *
- * @param int $publishedRoomId 予約の公開先ルーム 0だと指定無し
- * @param int $userId ユーザID
- * @param array $location 施設データ
- * @return bool
- */
- protected function _isReadablePublishedRoomId($publishedRoomId, $userId, $location) {
- $readableRooomIds = $this->_getReadableRoomIds($userId);
- //$publishedRoomId = $data['ReservationEvent']['room_id'];
- if ($publishedRoomId == 0) {
- // 指定無し
- if (!$location['ReservationLocation']['use_all_rooms']) {
- // 施設で利用可能なルームのいずれにもアクセスできないなら見られない
- $LocationsRoom = ClassRegistry::init('Reservations.ReservationLocationsRoom');
- $count = $LocationsRoom->find('count', [
- 'conditions' => [
- 'reservation_location_key' => $location['ReservationLocation']['key'],
- 'room_id' => $readableRooomIds
- ]
- ]);
- if ($count == 0) {
- // ユーザがアクセスできるルームで利用可のグループ無し
- return false;
- }
- }
- } elseif (!in_array($publishedRoomId, $readableRooomIds)) {
- // 承認者でないなら→予約の公開ルームにアクセス権無いと見られない
- return false;
- }
- return true;
- }
-
-/**
- * 閲覧可能なルームのIDリストを返す
- *
- * @param int $userId ユーザID
- * @return array ルームIDリスト
- */
- protected function _getReadableRoomIds($userId) {
- if (!isset($this->_readableRoomIds[$userId])) {
- $this->Room = ClassRegistry::init('Rooms.Room');
- $condition = $this->Room->getReadableRoomsConditions([], $userId);
- $readableRooms = $this->Room->find('all', $condition);
- $readableRooomIds = Hash::combine($readableRooms, '{n}.Room.id', '{n}.Room.id');
-
- $this->_readableRoomIds[$userId] = $readableRooomIds;
- }
- return $this->_readableRoomIds[$userId];
- }
-
-/**
- * 施設情報を返す
- *
- * @param string $locationKey 施設キー
- * @return array ReservationLocation data
- */
- protected function _getLocationByKey($locationKey) {
- // 何度も同じ施設で確認だすからキャッシュしとく
- if (!isset($this->_locations[$locationKey])) {
- $this->ReservationLocation = ClassRegistry::init('Reservations.ReservationLocation');
- $this->_locations[$locationKey] = $this->ReservationLocation->getByKey($locationKey);
- }
- return $this->_locations[$locationKey];
- }
-
-}
diff --git a/README.md b/README.md
deleted file mode 100644
index 0723cb7..0000000
--- a/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Reservations
-=========
-
-[](https://github.com/NetCommons3/Reservations/actions/workflows/tests.yml)
-[](https://coveralls.io/r/NetCommons3/Reservations?branch=master)
-[](https://packagist.org/packages/netcommons/reservations)
diff --git a/Service/ReservationRepeatService.php b/Service/ReservationRepeatService.php
deleted file mode 100644
index f62e920..0000000
--- a/Service/ReservationRepeatService.php
+++ /dev/null
@@ -1,353 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-/**
- * Class ReservationRepeatService
- */
-class ReservationRepeatService {
-
-/**
- * @var array rruleでつかってる曜日文字
- */
- protected $_weekday = [
- 0 => 'SU',
- 1 => 'MO',
- 2 => 'TU',
- 3 => 'WE',
- 4 => 'TH',
- 5 => 'FR',
- 6 => 'SA'
- ];
-
-/**
- * rruleと開始日から繰り返しの日付リストを返す
- *
- * @param array $rrule rrule
- * @param string $startDate Y-m-d日付
- * @return array Y-m-d日付のリスト
- */
- public function getRepeatDateSet($rrule, $startDate) {
- switch ($rrule['FREQ'] ?? null) {
- case 'DAILY':
- $dateSet = $this->_getRepeatDateSetByDaily($rrule, $startDate);
- break;
- case 'WEEKLY':
- $dateSet = $this->_getRepeatDateSetByWeekly($rrule, $startDate);
- break;
- case 'MONTHLY':
- $dateSet = $this->_getRepeatDateSetByMonthly($rrule, $startDate);
- break;
- case 'YEARLY':
- $dateSet = $this->_getRepeatDateSetByYearly($rrule, $startDate);
- break;
- default:
- // $rruleに該当する繰り返しがなければ初日だけ
- $dateSet = [
- $startDate
- ];
- break;
- }
- //debug($dateSet);
- return $dateSet;
- }
-
-/**
- * 日繰り返しの日付を返す
- *
- * @param array $rrule rrule
- * @param string $startDate Y-m-d日付
- * @return array Y-m-d日付のリスト
- */
- protected function _getRepeatDateSetByDaily($rrule, $startDate) {
- // 間隔
- $interval = $rrule['INTERVAL'];
- // 回数 COUNT か期日 UNTILまでか
- $currentDate = $startDate;
- $repeatDateSet = [];
-
- // 回数指定 最初を1回目として数える
- $count = 1;
- $continue = true;
-
- while ($continue) {
- $repeatDateSet[] = $currentDate;
- $currentDate = date(
- 'Y-m-d',
- strtotime('+' . $interval . ' day', strtotime($currentDate))
- );
-
- $count++;
- $continue = $this->_isContinue($rrule, $count, $currentDate);
- }
-
- return $repeatDateSet;
- }
-
-/**
- * 週繰り返しの日付を返す
- *
- * @param array $rrule rrule
- * @param string $startDate Y-m-d日付
- * @return array Y-m-d日付のリスト
- */
- protected function _getRepeatDateSetByWeekly($rrule, $startDate) {
- // 間隔
- $interval = $rrule['INTERVAL'];
- // 回数 COUNT か期日 UNTILまでか
- $currentDate = $startDate;
- $repeatDateSet = [];
- $bydayNumbers = [];
- foreach ($rrule['BYDAY'] as $weekday) {
- $bydayNumbers[] = array_search($weekday, $this->_weekday);
- }
- // 回数指定 最初を1回目として数える
-
- $currentWeekEndDate = date('Y-m-d', strtotime('Saturday', strtotime($currentDate)));//
- // 土曜日の日付取得
- $continue = true;
- $count = 1;
- while ($continue) {
- $repeatDateSet[] = $currentDate;
- $next = false;
-
- while ($next == false) {
- $currentDate = date(
- 'Y-m-d',
- strtotime('+1 day', strtotime($currentDate))
- );
- $currentWeekDayNumber = date('w', strtotime($currentDate));
- //$next = true;
- if (in_array($currentWeekDayNumber, $bydayNumbers)) {
- // 繰り返し曜日に該当したら繰り返し日に保存
- $next = true;
- }
- if ($currentDate >= $currentWeekEndDate) {
- // 土曜になったら翌週へ。interval 1なら1週
- $currentWeekEndDate = date(
- 'Y-m-d',
- strtotime(
- '+' . $interval . ' week
- Saturday',
- strtotime($currentWeekEndDate)
- )
- );
- $currentDate = date(
- 'Y-m-d',
- strtotime(
- '+' . $interval - 1 . ' week',
- strtotime($currentDate)
- )
- );
- }
- }
- $count++;
- $continue = $this->_isContinue($rrule, $count, $currentDate);
-
- }
- return $repeatDateSet;
- }
-
-/**
- * 月繰り返しの日付を返す
- *
- * @param array $rrule rrule
- * @param string $startDate Y-m-d日付
- * @return array Y-m-d日付のリスト
- */
- protected function _getRepeatDateSetByMonthly($rrule, $startDate) {
- // 間隔
- $interval = $rrule['INTERVAL'];
- // 回数 COUNT か期日 UNTILまでか
- $currentDate = $startDate;
- $repeatDateSet = [];
- //$bydayNumbers = [];
- //foreach($rrule['BYDAY'] as $weekday){
- // $bydayNumbers[] = array_search($weekday, $this->_weekday);
- //}
- // 回数指定 最初を1回目として数える
-
- //$currentWeekEndDate = date('Y-m-d', strtotime('Saturday', strtotime($currentDate)));//
- // 土曜日の日付取得
-
- $currentMonth = date('Y-m', strtotime($currentDate));
- $continue = true;
- $count = 1;
-
- while ($continue) {
- $repeatDateSet[] = $currentDate;
-
- $nthString = [
- '-1' => 'last',
- '1' => 'First',
- '2' => 'Second',
- '3' => 'Third',
- '4' => 'Fourth',
- ];
- $weekDayString = [
- 'SU' => 'Sunday',
- 'MO' => 'Monday',
- 'TU' => 'Tuesday',
- 'WE' => 'Wednesday',
- 'TH' => 'Thursday',
- 'FR' => 'Friday',
- 'SA' => 'Saturday',
- ];
-
- $continue2 = true;
- while ($continue2) {
- if (isset($rrule['BYDAY'])) {
- // 第n曜日繰り返し
- $weekDay = substr($rrule['BYDAY'], -2);// SU, MO, ...SA
- $nth = str_replace($weekDay, '', $rrule['BYDAY']); // -1 〜4
-
- $nextString = sprintf(
- '%s %s of %s',
- $nthString[$nth],
- $weekDayString[$weekDay],
- $currentMonth
- );
- $nextDate = date('Y-m-d', strtotime($nextString));
- } else {
- //指定日繰り返し
- $nextDate = $currentMonth . '-' . $rrule['BYMONTHDAY'];
- }
-
- if ($nextDate > $currentDate) {
- // 1回目は第n $weekDay曜日が$cuurentDateより小さくなる可能性あるのでチェックする。
- $currentDate = $nextDate;
- //$repeatDateSet[] = $currentDate;
- $continue2 = false;
- }
-
- // 次の繰り返しの年月
- $currentMonth = date(
- 'Y-m',
- strtotime('+' . $interval . ' month', strtotime($currentMonth))
- );
- }
-
- $count++;
- $continue = $this->_isContinue($rrule, $count, $currentDate);
-
- }
- return $repeatDateSet;
- }
-
-/**
- * 年繰り返しの日付を返す
- *
- * @param array $rrule rrule
- * @param string $startDate Y-m-d日付
- * @return array Y-m-d日付のリスト
- */
- protected function _getRepeatDateSetByYearly($rrule, $startDate) {
- // 間隔
- $interval = $rrule['INTERVAL'];
- // 回数 COUNT か期日 UNTILまでか
- $currentDate = $startDate;
- $repeatDateSet = [];
-
- // 回数指定 最初を1回目として数える
- $count = 1; //次のカウント
- // スタート年の繰り返し月日を得る
- // 日付指定くりかえし
- $currentYear = date('Y', strtotime($startDate));
- $repeatDay = date('d', strtotime($startDate));
-
- $continue = true;
- $byMonth = $rrule['BYMONTH'];
- $byMonthIndex = 0;
- $byMonthLength = count($byMonth);
- //$monthCycle = new ReservationCycle($rrule['BYMONTH']);
- while ($continue) {
- $repeatDateSet[] = $currentDate;
-
- $date = '1900-01-01';
- while ($date < $currentDate) {
- $month = $byMonth[$byMonthIndex];
-
- if (isset($rrule['BYDAY'])) {
- //第nX曜日指定
- $nthString = [
- '-1' => 'last',
- '1' => 'First',
- '2' => 'Second',
- '3' => 'Third',
- '4' => 'Fourth',
- ];
- $weekDayString = [
- 'SU' => 'Sunday',
- 'MO' => 'Monday',
- 'TU' => 'Tuesday',
- 'WE' => 'Wednesday',
- 'TH' => 'Thursday',
- 'FR' => 'Friday',
- 'SA' => 'Saturday',
- ];
-
- $weekDay = substr($rrule['BYDAY'], -2);// SU, MO, ...SA
- $nth = str_replace($weekDay, '', $rrule['BYDAY']); // -1 〜4
-
- $nextString = sprintf(
- '%s %s of %04d-%02d',
- $nthString[$nth],
- $weekDayString[$weekDay],
- $currentYear,
- $month
- );
- $date = date('Y-m-d', strtotime($nextString));
-
- } else {
- // 開始日で繰り返し
- $date = sprintf('%04d-%02d-%02d', $currentYear, $month, $repeatDay);
- }
-
- if (date('m', strtotime($date)) != $month) {
- // 2017-02-30とかって日時をstrtotimeしてdate('m')すると3月あつかいになる
- // 翌月になってしまうなら月の最終日とする
- $date('Y-m-d', strtotime('Last day of ' . $currentYear . ' ' . $month));
- }
- $byMonthIndex++;
- if ($byMonthIndex >= $byMonthLength) {
- $byMonthIndex = 0;
- $currentYear = $currentYear + $interval;
- }
- }
- $currentDate = $date;
-
- $count++;
- $continue = $this->_isContinue($rrule, $count, $currentDate);
- }
- return $repeatDateSet;
- }
-
-/**
- * 繰り返し終了判定
- *
- * @param array $rrule rrule
- * @param int $count 現在の繰返し回数
- * @param string $currentDate Y-m-d 繰り返しで生成中の日付
- * @return bool false:繰り返し終了 true : 繰り返し
- */
- protected function _isContinue($rrule, $count, $currentDate) {
- $continue = true;
- if (isset($rrule['COUNT'])) {
- if ($count > $rrule['COUNT']) {
- $continue = false;
- }
- } else {
- if ($currentDate > $rrule['UNTIL']) {
- $continue = false;
- }
- }
- return $continue;
- }
-
-}
-
diff --git a/Service/ReservationService.php b/Service/ReservationService.php
deleted file mode 100644
index 7291f79..0000000
--- a/Service/ReservationService.php
+++ /dev/null
@@ -1,151 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-App::uses('ReservationRepeatService', 'Reservations.Service');
-
-/**
- * Class ReservationService
- */
-class ReservationService {
-
-/**
- * 施設に対する予約が重複している日付を返す。
- * 重複がなければ空配列
- *
- * @param string $locationKey 施設キー
- * @param string $startDateTime 開始日時
- * @param string $endDateTime 終了日時
- * @param string $timezone タイムゾーン
- * @param array $rrule rrule
- * @param array $ignoreConditions 無視するEventのConditions日付のリスト
- * @return array 予約が重複している日付のリスト
- */
- public function getOverlapReservationDate(
- $locationKey,
- $startDateTime,
- $endDateTime,
- $timezone,
- $rrule,
- $ignoreConditions
- ) {
- $overlapDates = [];
-
- //繰り返しの日付リストを生成
- $repeatService = new ReservationRepeatService();
- $startDate = date('Y-m-d', strtotime($startDateTime));
- $timeLength = strtotime($endDateTime) - strtotime($startDateTime); // 予約の時間幅
-
- $repeatDateSet = $repeatService->getRepeatDateSet($rrule, $startDate);
- // 日付、開始時刻、終了時刻にわける
- $startTime = date('H:i:s', strtotime($startDateTime));
-
- // 繰り返しの数だけ重複をチェックする
- foreach ($repeatDateSet as $checkDate) {
- // 繰り返し生成日付+時刻でチェックする開始日時、終了日時を生成
- $checkStartDateTime = $checkDate . ' ' . $startTime;
- $checkEndDateTime = date('Y-m-d H:i:s', strtotime($checkStartDateTime) + $timeLength);
- if ($this->_existOverlapReservation(
- $locationKey,
- $checkStartDateTime,
- $checkEndDateTime,
- $timezone,
- $ignoreConditions
- )
- ) {
- // 重複予約があれば重複日リストに追加
- $overlapDates[] = $checkDate;
- }
- }
- return $overlapDates;
- }
-
-/**
- * 重複する予約があるかチェック
- *
- * @param string $locationKey 施設キー
- * @param string $startDateTime 開始日時
- * @param string $endDateTime 終了日時
- * @param string $inputTimeZone 入力日時のタイムゾーン
- * @param array $ignoreConditions 無視するEventのConditions日付のリスト
- * @return bool true 重複有り false 重複無し
- */
- protected function _existOverlapReservation(
- $locationKey,
- $startDateTime,
- $endDateTime,
- $inputTimeZone,
- $ignoreConditions
- ) {
- // この時点ではユーザタイム
-
- // サーバタイムに変換
- // $locationKeyで指定された施設に対して予約があるかをis_active=1 or (is_latest =1 AND 承認待ち)の中からさがす
- // └is_latestも入れてるのは、未承認の仮予約でも重複させないため。
-
- // サーバタイムに変換
- $netCommonsTime = new NetCommonsTime();
- $startDateTime = $netCommonsTime->toServerDatetime($startDateTime, $inputTimeZone);
- $endDateTime = $netCommonsTime->toServerDatetime($endDateTime, $inputTimeZone);
-
- $startDateTime = date('YmdHis', strtotime($startDateTime));
- $endDateTime = date('YmdHis', strtotime($endDateTime));
- // 存在チェック
- //$this->loadModels(['ReservationEvent' => 'Reservations.ReservationEvent']);
- $this->ReservationEvent = ClassRegistry::init('Reservations.ReservationEvent');
- $conditions = [
- 'ReservationEvent.location_key' => $locationKey,
- // 同じ繰り返しIDの予約は重複チェック対象外
- // ignoreConditions の差し込み
- $ignoreConditions,
- //'ReservationEvent.reservation_rrule_id !=' => $rruleId,
- // workflow
- [
- // isActive
- // isLatestは承認申請中だけ(差し戻しと一時保存はチェックしない)
- 'OR' => [
- 'ReservationEvent.is_active' => 1,
- [
- 'ReservationEvent.is_latest' => 1,
- 'ReservationEvent.status' => WorkflowComponent::STATUS_APPROVAL_WAITING,
- ]
- ]
- ],
- [
- 'ReservationEvent.dtstart <' => $endDateTime,
- 'ReservationEvent.dtend >' => $startDateTime,
- ]
- // 'OR' => [
- // // 重複している予約は開始が$endDateTimeより前 AND 終了が$startDateTiemより後
- // [
- // 'ReservationEvent.dtstart <' => $endDateTime,
- // 'ReservationEvent.dtend >' => $startDateTime,
- //
- // // 始点が指定した範囲にあったら時間枠重複
- // //'ReservationEvent.dtstart >=' => $startDateTime,
- // //'ReservationEvent.dtstart <' => $endDateTime,
- // ],
- // [
- // // 終点が指定した範囲にあったら時間枠重複
- // //'ReservationEvent.dtend >' => $startDateTime,
- // //'ReservationEvent.dtend <=' => $endDateTime,
- //
- // ],
- // [
- // // 始点、終点ともそれぞれ指定範囲の前と後だったら時間枠重複
- // 'ReservationEvent.dtstart <' => $startDateTime,
- // 'ReservationEvent.dtend >' => $endDateTime,
- // ],
- // ]
- //],
-
- ];
- $exist = $this->ReservationEvent->find('count', ['conditions' => $conditions]);
- return ($exist) ? true : false;
- }
-}
\ No newline at end of file
diff --git a/Test/Case/AllReservationsTest.php b/Test/Case/AllReservationsTest.php
deleted file mode 100644
index 31748d9..0000000
--- a/Test/Case/AllReservationsTest.php
+++ /dev/null
@@ -1,58 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsTestSuite', 'NetCommons.TestSuite');
-
-/**
- * Reservations All Test Suite
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case
- * @codeCoverageIgnore
- */
-class AllReservationsTest extends NetCommonsTestSuite {
-
-/**
- * All test suite
- *
- * @return CakeTestSuite
- */
- public static function suite() {
- $plugin = preg_replace('/^All([\w]+)Test$/', '$1', __CLASS__);
- $suite = new NetCommonsTestSuite(sprintf('All %s Plugin tests', $plugin));
- //$suite->addTestDirectoryRecursive(CakePlugin::path($plugin) . 'Test' . DS . 'Case');
- $basePath = CakePlugin::path($plugin) . 'Test' . DS . 'Case';
- $suite->addTestDirectoryRecursive($basePath . DS . 'Service');
- $suite->addTestDirectoryRecursive($basePath . DS . 'Utility');
- //$suite->addTestDirectoryRecursive($basePath . DS . 'Model');
-
- $suite->addTestFile(
- $basePath . DS . 'Model' . DS . 'ReservationLocation' . DS .
- 'GetLocationsTest.php'
- );
- $suite->addTestFile(
- $basePath . DS . 'Model' . DS . 'ReservationLocation' . DS .
- 'GetReservableLocationsTest.php'
- );
-
- $suite->addTestFile(
- $basePath . DS . 'Model' . DS . 'ReservationLocationReservableTest.php'
- );
- $suite->addTestFile(
- $basePath . DS . 'Model' . DS . 'ReservationLocationsRoomTest.php'
- );
- $suite->addTestFile(
- $basePath . DS . 'Model' . DS . 'ReservationLocationsApprovalUserTest.php'
- );
-
- //$suite->addTestDirectoryRecursive($basePath . DS . 'Controller');
- return $suite;
- }
-}
diff --git a/Test/Case/Controller/ReservationBlockRolePermissions/EditTest.php b/Test/Case/Controller/ReservationBlockRolePermissions/EditTest.php
deleted file mode 100644
index 9a6f36a..0000000
--- a/Test/Case/Controller/ReservationBlockRolePermissions/EditTest.php
+++ /dev/null
@@ -1,313 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsControllerTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component');
-App::uses('ReservationFrameSettingFixture', 'Reservations.Test/Fixture');
-App::uses('ReservationPermissiveRooms', 'Reservations.Utility');
-App::uses('BlockRolePermissionsControllerEditTest', 'Blocks.TestSuite');
-
-/**
- * ReservationBlockRolePermissionsController Test Case
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Test\Case\Controller
- */
-class ReservationBlockRolePermissionsControllerEditTest extends BlockRolePermissionsControllerEditTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- 'plugin.reservations.roles_room4test', //add
- 'plugin.reservations.roles_rooms_user4test', //add
- );
-
-/**
- * Plugin name
- *
- * @var array
- */
- public $plugin = 'reservations';
-
-/**
- * Controller name
- *
- * @var string
- */
- protected $_controller = 'reservation_block_role_permissions';
-
-/**
- * テストDataの取得
- * @param bool $isPost POSTかどうか
- *
- * @return array
- */
- private function __getData($isPost) {
- if ($isPost == true) {
- $data = array(
- 'save' => '',
- 'Frame' => array(
- 'id' => 6,
- ),
- 'Block' => array(
- 'id' => 2,
- 'key' => 'block_1',
- 'language_id' => '',
- 'room_id' => '',
- 'plugin_key' => '',
- ),
- '2' => array(
- '1' => array(
- 'BlockRolePermission' => array(
- 'content_creatable' => array(
- 'general_user' => array(
- 'id' => '1',
- 'roles_room_id' => '4',
- 'permission' => 'content_creatable',
- 'value' => '1',
- ),
- ),
- ),
- 'reservation' => array(
- 'block_key' => 'block_1',
- 'id' => '',
- 'use_workflow' => '1',
- ),
- ),
- ));
- } else {
- $data = array(
- 'ReservationSetting' => array(
- 'use_workflow',
- 'use_comment_approval',
- 'approval_type',
- )
- );
- }
-
- return $data;
- }
-
-/**
- * edit()アクションDataProvider
- *
- * ### 戻り値
- * - approvalFields コンテンツ承認の利用有無のフィールド
- * - exception Exception
- * - return testActionの実行後の結果
- *
- * @return void
- */
- public function dataProviderEditGet() {
- return array(
- array('approvalFields' => $this->__getData(false))
- );
- }
-
-/**
- * editアクションのGETテスト
- *
- * @param array $approvalFields コンテンツ承認の利用有無のフィールド
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderEditGet
- * @return string Viewの内容
- */
- public function testEditGet($approvalFields, $exception = null, $return = 'view') {
- //ログイン
- TestAuthGeneral::login($this);
-
- $frameId = '6';
- $blockId = '2';
-
- //テスト実施
- $url = array(
- 'plugin' => $this->plugin,
- 'controller' => $this->_controller,
- 'action' => 'edit',
- 'frame_id' => $frameId,
- 'block_id' => $blockId
- );
- $params = array(
- 'method' => 'get',
- 'return' => 'view',
- );
- $result = $this->_testNcAction($url, $params, $exception, $return);
-
- if (! $exception) {
- //チェック
- $assert = array(
- 'method' => 'assertInput', 'type' => 'form', 'name' => null,
- 'value' => NetCommonsUrl::actionUrl($url)
- );
- $this->asserts(array($assert), $result);
-
- $assert = array(
- 'method' => 'assertInput', 'type' => 'input', 'name' => 'data[Block][id]',
- 'value' => $blockId
- );
- $this->asserts(array($assert), $result);
-
- }
-
- //ログアウト
- TestAuthGeneral::logout($this);
-
- return $result;
- }
-
-/**
- * editアクションのGETテスト(Exceptionエラー) (施設予約の場合は不要)
- *
- * @param array $approvalFields コンテンツ承認の利用有無のフィールド
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderEditGet
- * @return void
- */
- /*
- public function testEditGetExceptionError($approvalFields, $exception = null, $return = 'view') {
- $this->_mockForReturnFalse('Reservations.ReservationPermission', 'getReservationRoomBlocks');
-
- // 施設予約権限設定情報確保
- $testRoomInfos = array(
- 'roomInfos' => array(
- '2' => array(
- 'role_key' => 'room_administrator',
- 'use_workflow' => '',
- 'content_publishable_value' => 1,
- 'content_editable_value' => 1,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
-
- $exception = 'BadRequestException';
- $this->testEditGet($approvalFields, $exception, $return);
- }
- */
-
-/**
- * edit()アクションDataProvider
- *
- * ### 戻り値
- * - data POSTデータ
- * - exception Exception
- * - return testActionの実行後の結果
- *
- * @return void
- */
- public function dataProviderEditPost() {
- return array(
- array('data' => $this->__getData(true)),
- //array('data' => $this->__getData(true), 'exception' => 'InternalErrorException'),
- );
- }
-
-/**
- * edit()アクションDataProvider
- *
- * ### 戻り値
- * - data POSTデータ
- * - exception Exception
- * - return testActionの実行後の結果
- *
- * @return void
- */
- public function dataProviderEditPostSaveError() {
- return array(
- array('data' => $this->__getData(true), 'exception' => 'InternalErrorException'),
- array('data' => $this->__getData(true), 'exception' => 'validates'),
- );
- }
-
-/**
- * editアクションのPOSTテスト(Saveエラー)
- *
- * @param array $data POSTデータ
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderEditPostSaveError
- * @return void
- */
- public function testEditPostSaveError($data, $exception = null, $return = 'view') {
- $data['BlockRolePermission']['content_creatable'][Role::ROOM_ROLE_KEY_GENERAL_USER]['roles_room_id'] = 'aaaa';
-
- if ($exception == 'InternalErrorException') {
- $this->setExpectedException('InternalErrorException');
- $this->_mockForReturnFalse('Reservations.ReservationPermission', 'save');
- //$this->setExpectedException('InternalErrorException');
- } else {
- $this->_mockForReturnFalse('Reservations.ReservationPermission', 'validates');
- }
-
- // 施設予約権限設定情報確保
- $testRoomInfos = array(
- 'roomInfos' => array(
- '2' => array(
- 'role_key' => 'room_administrator',
- 'use_workflow' => '',
- 'content_publishable_value' => 1,
- 'content_editable_value' => 1,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
-
- //テスト実施
- $this->testEditPost($data, false, $return);
- $this->assertEquals(
- $this->controller->request->data['BlockRolePermission']['content_creatable']['general_user']['roles_room_id'],
- 'aaaa');
- //$approvalFields = $this->__getData(false);
- //$this->_assertEditGetPermission($approvalFields, $result);
- }
-
-/**
- * ロールチェックdataProvider
- *
- * ### 戻り値
- * - method: リクエストメソッド(get or post or put)
- * - expected: 期待するviewファイル
- * - role: ロール名
- * - exception: Exception
- *
- * @return array
- */
- public function dataProviderRoleAccess() {
- $data = array(
-
- array(Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR, null),
- array(Role::ROOM_ROLE_KEY_CHIEF_EDITOR, 'ForbiddenException'),
- array(Role::ROOM_ROLE_KEY_EDITOR, 'ForbiddenException'),
- array(Role::ROOM_ROLE_KEY_GENERAL_USER, 'ForbiddenException'),
- array(Role::ROOM_ROLE_KEY_VISITOR, 'ForbiddenException'),
- array(null, 'ForbiddenException'),
- );
- return $data;
- }
-
-}
diff --git a/Test/Case/Controller/ReservationFrameSettings/EditTest.php b/Test/Case/Controller/ReservationFrameSettings/EditTest.php
deleted file mode 100644
index 7c5e2d2..0000000
--- a/Test/Case/Controller/ReservationFrameSettings/EditTest.php
+++ /dev/null
@@ -1,308 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsControllerTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component');
-App::uses('ReservationFrameSettingFixture', 'Reservations.Test/Fixture');
-
-/**
- * ReservationFrameSettingsController Test Case
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Test\Case\Controller
- */
-class ReservationFrameSettingsControllerEditTest extends NetCommonsControllerTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- );
-
-/**
- * Plugin name
- *
- * @var array
- */
- public $plugin = 'reservations';
-
-/**
- * Controller name
- *
- * @var string
- */
- protected $_controller = 'reservation_frame_settings';
-
-/**
- * テストDataの取得
- *
- * @return array
- */
- private function __getData() {
- //$frameId = '6';
- //$blockId = '2';
- $data['Frame']['id'] = 6;
- $data['ReservationFrameSetting'] = (new ReservationFrameSettingFixture())->records[0];
- $data['ReservationFrameSetting']['is_select_room'] = '1';
-
- $data['ReservationFrameSettingSelectRoom'] = array();
- $selectRoomFixture = new ReservationFrameSettingSelectRoomFixture();
- // Modelの試験のときはパブリックデータしか操作できない....ログイン状態を作れない
- $data['ReservationFrameSettingSelectRoom'][1] = $selectRoomFixture->records[0];
- $data['ReservationFrameSettingSelectRoom'][4] = $selectRoomFixture->records[3];
- $data['ReservationFrameSettingSelectRoom'][5] = array(
- 'reservation_frame_setting_id' => 1,
- 'room_id' => '6'
- );
- return $data;
- }
-
-/**
- * editアクションのGETテスト
- *
- * @param array $urlOptions URLオプション
- * @param array $assert テストの期待値
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderEditGet
- * @return void
- */
- public function testEditGet($urlOptions, $assert, $exception = null, $return = 'view') {
- //Exception
- if ($exception) {
- $this->setExpectedException($exception);
- }
-
- //テスト実施
- $url = Hash::merge(array(
- 'plugin' => $this->plugin,
- 'controller' => $this->_controller,
- 'action' => 'edit',
- ), $urlOptions);
-
- $this->_testGetAction($url, $assert, $exception, $return);
- }
-/**
- * editアクションのGETテスト(ログインなし)用DataProvider
- *
- * #### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderEditGet() {
- $data = $this->__getData();
- $results = array();
-
- //ログインなし
- $results[0] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id']),
- 'assert' => null,
- 'exception' => 'ForbiddenException',
- );
- return $results;
- }
-
-/**
- * editアクションのGETテスト
- *
- * @param array $urlOptions URLオプション
- * @param array $assert テストの期待値
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderEditGetByPublishable
- * @return void
- */
- public function testEditGetByPublishable($urlOptions, $assert, $exception = null, $return = 'view') {
- //ログイン
- TestAuthGeneral::login($this, Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR);
-
- //テスト実施
- $url = Hash::merge(array(
- 'plugin' => $this->plugin,
- 'controller' => $this->_controller,
- 'action' => 'edit',
- ), $urlOptions);
-
- $this->_testGetAction($url, $assert, $exception, $return);
-
- //ログアウト
- TestAuthGeneral::logout($this);
- }
-/**
- * editアクションのGETテスト(ログインあり)用DataProvider
- *
- * #### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderEditGetByPublishable() {
- $data0 = $this->__getData();
- $results = array();
-
- //ログインあり
- $results[0] = array(
- 'urlOptions' => array('frame_id' => $data0['Frame']['id']),
- 'assert' => null
- );
- // ブロックが存在しないフレームID
- $results[1] = array(
- 'urlOptions' => array('frame_id' => 16),
- 'assert' => null,
- );
- // 存在しないフレームID
- $results[2] = array(
- 'urlOptions' => array('frame_id' => 9999),
- 'assert' => null,
- 'exception' => 'BadRequestException',
- );
- return $results;
- }
-
-/**
- * editアクションのPOSTテスト
- *
- * @param array $data POSTデータ
- * @param string $role ロール
- * @param array $urlOptions URLオプション
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderEditPost
- * @return void
- */
- public function testEditPost($data, $role, $urlOptions, $exception = null, $return = 'view') {
- //ログイン
- if (isset($role)) {
- TestAuthGeneral::login($this, $role);
- }
-
- //テスト実施
- $this->_testPostAction('put', $data, Hash::merge(array('action' => 'edit'), $urlOptions), $exception, $return);
-
- //正常の場合、リダイレクト
- if (! $exception) {
- $header = $this->controller->response->header();
- $this->assertNotEmpty($header['Location']);
- }
-
- //ログアウト
- if (isset($role)) {
- TestAuthGeneral::logout($this);
- }
- }
-/**
- * editアクションのPOSTテスト用DataProvider
- *
- * #### 戻り値
- * - data: 登録データ
- * - role: ロール
- * - urlOptions: URLオプション
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderEditPost() {
- $data = $this->__getData();
-
- return array(
- //ログインなし
- array(
- 'data' => $data, 'role' => null,
- 'urlOptions' => array('frame_id' => $data['Frame']['id']),
- 'exception' => 'ForbiddenException'
- ),
-
- //正常
- array(
- 'data' => $data, 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => $data['Frame']['id']),
-
- ),
- //フレームID指定なしテスト
- array(
- 'data' => $data, 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => null),
-
- ),
-
- );
- }
-
-/**
- * editアクションのValidateionErrorテスト
- *
- * @param array $data POSTデータ
- * @param array $urlOptions URLオプション
- * @param string|null $validationError ValidationError
- * @dataProvider dataProviderEditValidationError
- * @return void
- */
- public function testEditValidationError($data, $urlOptions, $validationError = null) {
- //ログイン
- TestAuthGeneral::login($this);
-
- //テスト実施
- $this->_testActionOnValidationError('put', $data, Hash::merge(array('action' => 'edit'), $urlOptions), $validationError);
-
- //ログアウト
- TestAuthGeneral::logout($this);
- }
-/**
- * editアクションのValidationErrorテスト用DataProvider
- *
- * #### 戻り値
- * - data: 登録データ
- * - urlOptions: URLオプション
- * - validationError: バリデーションエラー
- *
- * @return array
- */
- public function dataProviderEditValidationError() {
- $data = $this->__getData();
-
- $result = array(
- 'data' => $data,
- 'urlOptions' => array('frame_id' => $data['Frame']['id']),
- );
-
- return array(
- //バリデーションエラー
- Hash::merge($result, array(
- 'validationError' => array(
- 'field' => 'ReservationFrameSetting.display_type',
- 'value' => '300000',
- 'message' => __d('net_commons', 'Invalid request.'),
- )
- )),
- );
- }
-
-}
diff --git a/Test/Case/Controller/ReservationMailSettings/EditTest.php b/Test/Case/Controller/ReservationMailSettings/EditTest.php
deleted file mode 100644
index 676ffce..0000000
--- a/Test/Case/Controller/ReservationMailSettings/EditTest.php
+++ /dev/null
@@ -1,194 +0,0 @@
-
- * @author Allcreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsControllerTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component');
-
-/**
- * ReservationMailSettingsController Test Case
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Test\Case\Controller
- */
-class ReservationMailSettingsControllerEditTest extends NetCommonsControllerTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.mails.mail_setting_fixed_phrase',
- 'plugin.reservations.room4test',
- 'plugin.rooms.rooms_language4test',
- 'plugin.rooms.room_role_permission4test', //test
- 'plugin.reservations.roles_room4test', //add
- 'plugin.reservations.roles_rooms_user4test', //add
- 'plugin.reservations.plugins_role4test', //add
- );
-
-/**
- * Plugin name
- *
- * @var array
- */
- public $plugin = 'reservations';
-
-/**
- * Controller name
- *
- * @var string
- */
- protected $_controller = 'reservation_mail_settings';
-
-/**
- * テストDataの取得
- *
- * @return array
- */
- /*
- private function __getData() {
- $data = array(
- 'save' => '',
- 'MailSetting' => array(
- 'id' => 16,
- 'plugin_key' => 'reservations',
- 'block_key' => 'block_1',
- 'is_mail_send' => 1,
- 'is_mail_send_approval' => 0,
- ),
- );
- return $data;
- }
- */
-
-/**
- * editアクションのGETテスト
- *
- * @param array $urlOptions URLオプション
- * @param array $assert テストの期待値
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderEditGet
- * @return void
- */
- public function testEditGet($urlOptions, $assert, $exception = null, $return = 'view') {
- //Exception
- if ($exception) {
- $this->setExpectedException($exception);
- }
-
- //テスト実施
- $url = Hash::merge(array(
- 'plugin' => $this->plugin,
- 'controller' => $this->_controller,
- 'action' => 'edit',
- ), $urlOptions);
-
- $this->_testGetAction($url, $assert, $exception, $return);
- }
-
-/**
- * editアクションのGETテスト(ログインなし)用DataProvider
- *
- * #### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderEditGet() {
- $results = array();
-
- //ログインなし
- $results[0] = array(
- 'urlOptions' => array('frame_id' => '6', 'block_id' => '2'),
- 'assert' => null,
- 'exception' => 'ForbiddenException',
- );
- return $results;
- }
-
-/**
- * editアクションのGETテスト
- *
- * @param array $urlOptions URLオプション
- * @param array $assert テストの期待値
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderEditGetByPublishable
- * @return void
- */
- public function testEditGetByPublishable($urlOptions, $assert, $exception = null, $return = 'view') {
- //ログイン
- TestAuthGeneral::login($this, Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR);
-
- CakeSession::write('Auth.User.UserRoleSetting.use_private_room', true);
-
- //テスト実施
- $url = Hash::merge(array(
- 'plugin' => $this->plugin,
- 'controller' => $this->_controller,
- 'action' => 'edit',
- ), $urlOptions);
-
- $this->_testGetAction($url, $assert, $exception, $return);
-
- //ログアウト
- TestAuthGeneral::logout($this);
- }
-
-/**
- * editアクションのGETテスト(ログインあり)用DataProvider
- *
- * #### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderEditGetByPublishable() {
- //$data0 = $this->__getData();
- $results = array();
-
- //ログインあり
- $results[0] = array(
- 'urlOptions' => array('frame_id' => '6', 'block_id' => '2'),
- 'assert' => null
- );
- // ブロックが存在しないフレームID
- //$results[1] = array(
- // 'urlOptions' => array('frame_id' => 15, 'block_id' => '2'),
- // 'assert' => null,
- //);
- // 存在しないフレームID
- //$results[2] = array(
- // 'urlOptions' => array('frame_id' => 9999, 'block_id' => '2'),
- // 'assert' => null,
- // 'exception' => 'BadRequestException',
- //);
- return $results;
- }
-
-}
diff --git a/Test/Case/Controller/ReservationPlans/AddTest.php b/Test/Case/Controller/ReservationPlans/AddTest.php
deleted file mode 100644
index f5d75f0..0000000
--- a/Test/Case/Controller/ReservationPlans/AddTest.php
+++ /dev/null
@@ -1,425 +0,0 @@
-
- * @author Allcreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationPlansController', 'Reservations.Controller');
-App::uses('WorkflowControllerAddTest', 'Workflow.TestSuite');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component'); //constを使うため
-
-/**
- * ReservationPlansController Test Case
- *
- * @author Allcreator Co., Ltd.
- * @package NetCommons\Reservations\Test\Case\Controller\ReservationPlansController
- */
-class ReservationPlansControllerAddTest extends WorkflowControllerAddTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- 'plugin.holidays.holiday',
- 'plugin.holidays.holiday_rrule',
- 'plugin.reservations.roles_room4test', //add
- 'plugin.reservations.roles_rooms_user4test', //add
- 'plugin.user_attributes.user_attribute_layout',
- 'plugin.reservations.room4test',
- //'plugin.groups.group4_users_test',
- );
-
-/**
- * Plugin name
- *
- * @var array
- */
- public $plugin = 'reservations';
-
-/**
- * Controller name
- *
- * @var string
- */
- protected $_controller = 'reservation_plans';
-
-/**
- * テストDataの取得
- *
- * @param string $originEventId eventID
- * @return array
- */
- private function __getData($originEventId = '0') {
- $frameId = '6';
- $blockId = '2';
- $blockKey = 'block_1';
-
- $data = array(
- 'save_' . WorkflowComponent::STATUS_PUBLISHED => null,
- //'delete' => null,
- 'Frame' => array(
- 'id' => $frameId
- ),
- 'Block' => array(
- 'id' => $blockId,
- 'key' => $blockKey,
- ),
- 'ReservationActionPlan' => array(
- 'origin_event_id' => $originEventId,
- 'origin_event_key' => 0,
- 'origin_event_recurrence' => '0',
- 'origin_event_exception' => '0',
- 'origin_rrule_id' => '0',
- 'origin_rrule_key' => '',
- 'origin_num_of_event_siblings' => '0',
- 'is_repeat' => '0',
- 'first_sib_event_id' => '0',
- 'is_recurrence' => '0',
- 'edit_rrule' => '0',
- 'first_sib_event_id' => 7,
- 'first_sib_event_key' => 'reservationplanx',
- 'first_sib_year' => '2016',
- 'first_sib_month' => '9',
- 'first_sib_day' => '4',
- 'easy_start_date' => '',
- 'easy_hour_minute_from' => '',
- 'easy_hour_minute_to' => '',
- 'is_detail' => 1,
- 'title_icon' => '',
- 'title' => 'add',
- 'enable_time' => '0',
- 'detail_start_datetime' => '2016-09-04',
- 'detail_end_datetime' => '2016-09-04',
- 'is_repeat' => 0,
- 'repeat_freq' => 'DAILY',
- 'rrule_interval' => array(
- 'DAILY' => '1',
- 'WEEKLY' => '1',
- 'MONTHLY' => '1',
- 'YEARLY' => '1',
- ),
- 'rrule_byday' => array(
- 'WEEKLY' => array(
- '0' => 'SU',
- ),
- 'MONTHLY' => '',
- 'YEARLY' => '',
- ),
- 'rrule_byday' => array(
- 'WEEKLY' => array(
- '0' => 'SU'
- ),
- 'MONTHLY' => 0,
- 'YEARLY' => 0,
- ),
- 'rrule_bymonthday' => array(
- 'MONTHLY' => '',
- 'rrule_bymonth' => array(
- 'YEARLY' => array(
- '0' => 9,
- ),
- ),
- ),
- 'rrule_term' => 'COUNT',
- 'rrule_count' => '3',
- 'rrule_until' => '2016-09-04',
- 'plan_room_id' => '2',
- 'enable_email' => '',
- 'email_send_timing' => '5',
- 'location' => '',
- 'contact' => '',
- 'description' => '',
- 'timezone' => 'Asia/Tokyo',
- ),
- 'WorkflowComment' => array(
- 'comment' => 'WorkflowComment save test'
- ),
- );
-
- return $data;
- }
-
-/**
- * addアクションのGETテスト(ログインなし)用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderAddGet() {
- $data = $this->__getData();
- $results = array();
-
- //ログインなし
- $results[0] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id']),
- 'assert' => null, 'exception' => 'ForbiddenException'
- );
- return $results;
- }
-
-/**
- * addアクションのGETテスト(作成権限あり)用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderAddGetByCreatable() {
- $data = $this->__getData();
- $results = array();
-
- //作成権限あり
- $base = 0;
- $results[0] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], '?' => array('year' => '2016', 'month' => '9', 'day' => '7', 'hour' => '12')),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- array_push($results, Hash::merge($results[$base], array(
- 'assert' => array('method' => 'assertInput', 'type' => 'input', 'name' => 'data[Frame][id]', 'value' => $data['Frame']['id']),
- )));
- array_push($results, Hash::merge($results[$base], array(
- 'assert' => array('method' => 'assertInput', 'type' => 'input', 'name' => 'data[Block][id]', 'value' => $data['Block']['id']),
- )));
- array_push($results, Hash::merge($results[$base], array(
- 'assert' => array('method' => 'assertInput', 'type' => 'button', 'name' => 'save_' . WorkflowComponent::STATUS_IN_DRAFT, 'value' => null),
- )));
- array_push($results, Hash::merge($results[$base], array(
- //'assert' => array('method' => 'assertInput', 'type' => 'button', 'name' => 'save_' . WorkflowComponent::STATUS_APPROVAL_WAITING, 'value' => null),
- 'assert' => array('method' => 'assertInput', 'type' => 'button', 'name' => 'save_' . WorkflowComponent::STATUS_PUBLISHED, 'value' => null),
- )));
-
- //フレームID指定なしテスト
- array_push($results, Hash::merge($results[$base], array(
- 'urlOptions' => array('frame_id' => null, 'block_id' => $data['Block']['id']),
- 'assert' => array('method' => 'assertNotEmpty'),
- )));
-
- return $results;
- }
-
-/**
- * addアクションのPOSTテスト用DataProvider
- *
- * ### 戻り値
- * - data: 登録データ
- * - role: ロール
- * - urlOptions: URLオプション
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderAddPost() {
- $data = $this->__getData();
-
- //共有者あり
- $dataGroup = $data;
- $dataGroup['ReservationActionPlan']['plan_room_id'] = '8';
- $dataGroup['GroupsUser'][0]['user_id'] = 2;
- $dataGroup['GroupsUser'][1]['user_id'] = 1;
-
- $dataGroupN = $dataGroup;
- $dataGroupN['ReservationActionPlan']['plan_room_id'] = '5';
-
- //繰り返しあり
- $dataRep = $data;
- $dataRep['ReservationAction']['is_repeat'] = 1;
- $dataRep['ReservationAction']['rrule_term'] = 'UNTIL';
-
- $dataError1 = $data;
- unset($dataError1['save_' . WorkflowComponent::STATUS_PUBLISHED]);
- $dataError1['save_' . ''] = '';
-
- $dataError2 = $data;
- //unset($dataError2['Block']['key']);
- $dataError2['Block']['key'] = 'aaa';
-
- return array(
- //ログインなし
- array(
- 'data' => $data, 'role' => null,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id']),
- 'exception' => 'ForbiddenException'
- ),
- //作成権限あり
- array(
- 'data' => $data, 'role' => Role::ROOM_ROLE_KEY_GENERAL_USER,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id']),
- ),
- //(共有者あり)
- array(
- 'data' => $dataGroup, 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id']),
- ),
- //(共有者あり)(プライベートルームではないので無効になるパターン)
- array(
- 'data' => $dataGroupN, 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id']),
- ),
- //(繰り返しあり(期限))
- array(
- 'data' => $dataRep, 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id']),
- ),
- //フレームID指定なしテスト
- array(
- 'data' => $data, 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => null, 'block_id' => $data['Block']['id']),
- ), //pending
- //save_不正
- array(
- 'data' => $dataError1, 'role' => Role::ROOM_ROLE_KEY_GENERAL_USER,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id']),
- 'exception' => 'InternalErrorException'
-
- ),
- //blockKey不正
- array(
- 'data' => $dataError2, 'role' => Role::ROOM_ROLE_KEY_GENERAL_USER,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id']),
- 'exception' => 'InternalErrorException'
- ),
- );
- }
-
-/**
- * addアクションのValidationErrorテスト用DataProvider
- *
- * ### 戻り値
- * - data: 登録データ
- * - urlOptions: URLオプション
- * - validationError: バリデーションエラー
- *
- * @return array
- */
- public function dataProviderAddValidationError() {
- $data = $this->__getData();
- //繰り返し回数不正
- $data['ReservationActionPlan']['is_repeat'] = 1;
- $data['ReservationActionPlan']['rrule_count'] = 1;
- $data['ReservationActionPlan']['timezone'] = 'Australia/Adelaide'; //timezoneが変わるルート
- $result = array(
- 'data' => $data,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id']),
- );
-
- return array(
- Hash::merge($result, array(
- 'validationError' => array(
- 'field' => 'ReservationActionPlan.title',
- 'value' => '',
- 'message' => __d('reservations', 'Invalid input. (plan title)'),
- )
- )),
- Hash::merge($result, array(
- 'validationError' => array(
- 'field' => 'ReservationActionPlan.rrule_count',
- 'value' => '888',
- 'message' => __d('reservations',
- 'The number of repetition is %d or more and %d or less.', ReservationsComponent::CALENDAR_RRULE_COUNT_MIN, ReservationsComponent::CALENDAR_RRULE_COUNT_MAX),
- )
- )),
- );
- }
-
-/**
- * addアクションのExceptionErrorテスト
- *
- * @param string $mockModel Mockのモデル
- * @param string $mockMethod Mockのメソッド
- * @param array $data POSTデータ
- * @param string $role ロール
- * @param array $urlOptions URLオプション
- * @param string $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderAddExceptionError
- * @return void
- */
- public function testAddExceptionError($mockModel, $mockMethod, $data, $role, $urlOptions,
- $exception = null, $return = 'view') {
- //ログイン
- if (isset($role)) {
- TestAuthGeneral::login($this, $role);
- }
-
- //if ($mockMethod == 'maxtime') {
- // $this->_mockForReturn($mockModel, 'saveReservationPlan', 1, 3);
- //} else {
- $this->_mockForReturn($mockModel, $mockMethod, false, 1);
- //}
-
- //テスト実施
- $this->_testPostAction(
- 'post', $data, Hash::merge(array('action' => 'add'), $urlOptions), $exception, $return
- );
- //ログアウト
- if (isset($role)) {
- TestAuthGeneral::logout($this);
- }
- }
-
-/**
- * addアクションのExceptionErrorテスト用DataProvider
- *
- * ### 戻り値
- * - mockModel: Mockのモデル
- * - mockMethod: Mockのメソッド
- * - data: 登録データ
- * - role: ロール
- * - urlOptions: URLオプション
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderAddExceptionError() {
- $data = $this->__getData();
-
- //繰り返しあり
- $dataRep = $data;
- $dataRep['ReservationAction']['is_repeat'] = 1;
- $dataRep['ReservationAction']['rrule_count'] = 400;
-
- return array(
- array(
- 'mockModel' => 'ReservationActionPlan', 'mockMethod' => 'saveReservationPlan', 'data' => $data,
- 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id']),
- //'exception' => 'BadRequestException' //pending save失敗
- ),
- // array(
- // 'mockModel' => 'ReservationActionPlan', 'mockMethod' => 'maxtime', 'data' => $dataRep,
- // 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- // 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id']),
- // 'exception' => '' //pending save失敗
- // ),
- );
- }
-
-}
diff --git a/Test/Case/Controller/ReservationPlans/DeleteTest.php b/Test/Case/Controller/ReservationPlans/DeleteTest.php
deleted file mode 100644
index 189020d..0000000
--- a/Test/Case/Controller/ReservationPlans/DeleteTest.php
+++ /dev/null
@@ -1,281 +0,0 @@
-
- * @author Shohei Nakajima
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationPlansController', 'Reservations.Controller');
-App::uses('WorkflowControllerDeleteTest', 'Workflow.TestSuite');
-
-/**
- * ReservationPlansController Test Case
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Test\Case\Controller\ReservationPlansController
- */
-class ReservationPlansControllerDeleteTest extends WorkflowControllerDeleteTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- 'plugin.holidays.holiday',
- 'plugin.holidays.holiday_rrule',
- 'plugin.reservations.roles_room4test', //add
- 'plugin.reservations.roles_rooms_user4test', //add
- //'plugin.groups.user_attribute_layout4_groups_test', //add
- 'plugin.user_attributes.user_attribute_layout',
- 'plugin.reservations.block_setting_for_reservation',
- );
-
-/**
- * Plugin name
- *
- * @var array
- */
- public $plugin = 'reservations';
-
-/**
- * Controller name
- *
- * @var string
- */
- protected $_controller = 'reservation_plans';
-
-/**
- * テストDataの取得
- *
- * @param string $originEventId eventID
- * @return array
- */
- private function __getData($originEventId = '1') {
- $frameId = '6';
- $blockId = '2';
-
- $data = array(
- 'delete' => null,
- 'Frame' => array(
- 'id' => $frameId
- ),
- 'Block' => array(
- 'id' => $blockId,
- ),
- 'ReservationDeleteActionPlan' => array(
- //'id' => $faqQuestionId,
- //'key' => $reservationPlanKey,
- 'origin_event_id' => $originEventId,
- 'is_repeat' => 0,
- 'first_sib_event_id' => 0,
- 'is_recurrence' => 0,
- 'edit_rrule' => 0,
- ),
-
- );
-
- return $data;
- }
-
-/**
- * deleteアクションのGETテスト用DataProvider
- *
- * ### 戻り値
- * - role: ロール
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderDeleteGet() {
- $data = $this->__getData();
- $results = array();
- $results[0] = array('role' => null,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'key' => 'reservationplan1'),
- 'assert' => null, 'exception' => 'ForbiddenException'
- );
- $results[1] = array('role' => Role::ROOM_ROLE_KEY_GENERAL_USER,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'key' => 'reservationplan1'),
- 'assert' => null, 'exception' => 'ForbiddenException'
- );
- $results[2] = array('role' => Role::ROOM_ROLE_KEY_EDITOR,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'key' => 'reservationplan1'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- $results[3] = array('role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'key' => 'reservationplan1'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- $results[4] = array('role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'key' => 'reservationplan7', //繰り返しあり
- '?' => array('action' => 'repeatdelete', 'first_sib_event_id' => '1', 'origin_event_id' => '7', 'is_recurrence' => '1') ),
- //'assert' => array('method' => 'assertNotEmpty'),
- 'assert' => array('method' => 'assertContains', 'expected' => __d('reservations', 'only this one')),
- );
-
- return $results;
- }
-
-/**
- * deleteアクションのPOSTテスト
- *
- * @param array $data POSTデータ
- * @param string $role ロール
- * @param array $urlOptions URLオプション
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderDeletePost
- * @return void
- */
- public function testDeletePost($data, $role, $urlOptions, $exception = null, $return = 'view') {
- //ログイン
- if (isset($role)) {
- TestAuthGeneral::login($this, $role);
- }
-
- // 施設予約権限設定情報確保
- /*
- $testRoomInfos = array(
- 'roomInfos' => array(
- '2' => array(
- 'role_key' => 'general_user',
- 'use_workflow' => '1',
- 'content_publishable_value' => 0,
- 'content_editable_value' => 0,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
- */
-
- //テスト実施
- $this->_testPostAction(
- 'delete', $data, Hash::merge(array('action' => 'delete'), $urlOptions), $exception, $return
- );
-
- //正常の場合、リダイレクト
- if (! $exception) {
- $header = $this->controller->response->header();
- $this->assertNotEmpty($header['Location']);
- }
-
- //ログアウト
- if (isset($role)) {
- TestAuthGeneral::logout($this);
- }
- }
-
-/**
- * deleteアクションのPOSTテスト用DataProvider
- *
- * ### 戻り値
- * - data: 登録データ
- * - role: ロール
- * - urlOptions: URLオプション
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderDeletePost() {
- $data1 = $this->__getData(1);
- $data2 = $this->__getData(2);
-
- return array(
- //ログインなし
- array(
- 'data' => $data1, 'role' => null,
- 'urlOptions' => array('frame_id' => $data1['Frame']['id'], 'block_id' => $data1['Block']['id'], 'key' => 'reservationplan1'),
- 'exception' => 'ForbiddenException'
- ),
- //作成権限のみ
- //--他人の予定
- array(
- 'data' => $data2, 'role' => Role::ROOM_ROLE_KEY_GENERAL_USER,
- 'urlOptions' => array('frame_id' => $data2['Frame']['id'], 'block_id' => $data2['Block']['id'], 'key' => 'reservationplan2'),
- //'exception' => 'ForbiddenException'
- ),
- //--自分の予定&一度も公開されていない
- array(
- 'data' => $data2, 'role' => Role::ROOM_ROLE_KEY_GENERAL_USER,
- 'urlOptions' => array('frame_id' => $data2['Frame']['id'], 'block_id' => $data2['Block']['id'], 'key' => 'reservationplan2'),
- ),
- //--自分の予定&一度公開している
- array(
- 'data' => $this->__getData(3), 'role' => Role::ROOM_ROLE_KEY_GENERAL_USER,
- 'urlOptions' => array('frame_id' => $data2['Frame']['id'], 'block_id' => $data2['Block']['id'], 'key' => 'reservationplan3'),
- //'exception' => 'BadRequestException' //pending 一度公開している(getWorkflowContentsでnullを返す方法)
- ),
- //編集権限あり
- //--公開していない
- array(
- 'data' => $this->__getData(4), 'role' => Role::ROOM_ROLE_KEY_EDITOR,
- 'urlOptions' => array('frame_id' => $data2['Frame']['id'], 'block_id' => $data2['Block']['id'], 'key' => 'reservationplan4'),
- ),
- //--公開している
- array(
- 'data' => $this->__getData(5), 'role' => Role::ROOM_ROLE_KEY_EDITOR,
- 'urlOptions' => array('frame_id' => $data2['Frame']['id'], 'block_id' => $data2['Block']['id'], 'key' => 'reservationplan5'),
- //'exception' => 'BadRequestException'
- //'exception' => 'ForbiddenException' //pending 一度公開している(getWorkflowContentsでnullを返す方法)
- ),
- //公開権限あり
- //--削除対象なし
- array(
- 'data' => $data2, 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => $data2['Frame']['id'], 'block_id' => $data2['Block']['id'], 'key' => 'reservationplanxx'),
- 'exception' => 'ForbiddenException',
- ),
- //公開権限あり
- //フレームID指定なしテスト
- array(
- 'data' => $data2, 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => null, 'block_id' => $data2['Block']['id'], 'key' => 'reservationplan2'),
- ),
-
- );
- }
-
-/**
- * deleteアクションのExceptionErrorテスト用DataProvider
- *
- * ### 戻り値
- * - mockModel: Mockのモデル
- * - mockMethod: Mockのメソッド
- * - data: 登録データ
- * - urlOptions: URLオプション
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderDeleteExceptionError() {
- $data = $this->__getData(2);
-
- return array(
- array(
- 'mockModel' => 'Reservations.ReservationDeleteActionPlan', 'mockMethod' => 'deleteReservationPlan', 'data' => $data,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan2'),
- 'exception' => 'BadRequestException' //pending delete失敗時、BadRequestException
- ),
- );
- }
-
-}
diff --git a/Test/Case/Controller/ReservationPlans/EditTest.php b/Test/Case/Controller/ReservationPlans/EditTest.php
deleted file mode 100644
index 3528816..0000000
--- a/Test/Case/Controller/ReservationPlans/EditTest.php
+++ /dev/null
@@ -1,577 +0,0 @@
-
- * @author Allcreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationPlansController', 'Reservations.Controller');
-App::uses('WorkflowControllerEditTest', 'Workflow.TestSuite');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component'); //constを使うため
-
-/**
- * ReservationPlansController Test Case
- *
- * @author Allcreator Co., Ltd.
- * @package NetCommons\Reservations\Test\Case\Controller\ReservationPlansController
- */
-class ReservationPlansControllerEditTest extends WorkflowControllerEditTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- 'plugin.holidays.holiday',
- 'plugin.holidays.holiday_rrule',
- 'plugin.reservations.roles_room4test',
- 'plugin.reservations.roles_rooms_user4test',
- 'plugin.user_attributes.user_attribute_layout',
- //'plugin.reservations.room4test',
- 'plugin.reservations.room4test',
- //'plugin.rooms.room_role', //add 2016.09.30
- //'plugin.rooms.room_role_permission4test', //add 2016.09.30
-
- );
-
-/**
- * Plugin name
- *
- * @var array
- */
- public $plugin = 'reservations';
-
-/**
- * Controller name
- *
- * @var string
- */
- protected $_controller = 'reservation_plans';
-
-/**
- * テストDataの取得
- *
- * @param string $originEventId オリジナルEventId
- * @return array
- */
- private function __getData($originEventId = '0') {
- $blockKey = 'block_1';
- $originalRruleId = $originEventId;
- if ($originEventId == 1) {
- $originEventKey = 'reservationplan1';
- } elseif ($originEventId == 2) {
- $originEventKey = 'reservationplan2';
- } elseif ($originEventId == 4) {
- $originEventKey = 'reservationplan4';
- } elseif ($originEventId == 6) {
- $originEventKey = 'reservationplan6';
- } elseif ($originEventId == 8) {
- $originEventKey = 'reservationplan7';
- $originalRruleId = 8;
- } elseif ($originEventId == 27) {
- $originEventKey = 'reservationplan27';
- }
- $data = array(
- 'save_' . WorkflowComponent::STATUS_PUBLISHED => null,
- 'Frame' => array(
- 'id' => '6',
- ),
- 'Block' => array(
- 'id' => '2',
- 'key' => $blockKey,
- ),
- 'ReservationActionPlan' => array(
- 'origin_event_id' => $originEventId,
- 'origin_event_key' => $originEventKey,
- 'origin_event_recurrence' => '0',
- 'origin_event_exception' => '0',
- 'origin_rrule_id' => $originalRruleId,
- 'origin_rrule_key' => $originEventKey,
- 'origin_num_of_event_siblings' => '0',
- 'is_repeat' => '0',
- 'first_sib_event_id' => '0',
- 'is_recurrence' => '0',
- 'edit_rrule' => '0', //null,
- 'first_sib_event_id' => 0,
- 'first_sib_year' => '2016',
- 'first_sib_month' => '9',
- 'first_sib_day' => '4',
- 'easy_start_date' => '',
- 'easy_hour_minute_from' => '',
- 'easy_hour_minute_to' => '',
- 'is_detail' => 1,
- 'title_icon' => '',
- 'title' => 'add',
- 'enable_time' => '0',
- 'detail_start_datetime' => '2016-09-04',
- 'detail_end_datetime' => '2016-09-04',
- 'is_repeat' => 0,
- 'repeat_freq' => 'DAILY',
- 'rrule_interval' => array(
- 'DAILY' => '1',
- 'WEEKLY' => '1',
- 'MONTHLY' => '1',
- 'YEARLY' => '1',
- ),
- 'rrule_byday' => array(
- 'WEEKLY' => array(
- '0' => 'SU',
- ),
- 'MONTHLY' => '',
- 'YEARLY' => '',
- ),
- 'rrule_byday' => array(
- 'WEEKLY' => array(
- '0' => 'SU'
- ),
- 'MONTHLY' => 0,
- 'YEARLY' => 0,
- ),
- 'rrule_bymonthday' => array(
- 'MONTHLY' => '',
- 'rrule_bymonth' => array(
- 'YEARLY' => array(
- '0' => 9,
- ), ), ),
- 'rrule_bymonth' => array(
- 'YEARLY' => array(
- '0' => 7,
- ), ),
- 'rrule_term' => 'COUNT',
- 'rrule_count' => '3',
- 'rrule_until' => '2016-09-04',
- 'plan_room_id' => '2',
- 'enable_email' => '',
- 'email_send_timing' => '5',
- 'location' => 'locationText',
- 'contact' => '',
- 'description' => '',
- 'timezone' => 'Asia/Tokyo',
- ),
- 'WorkflowComment' => array(
- 'comment' => 'WorkflowComment save test'),
- );
- return $data;
- }
-
-/**
- * editアクションのGETテスト(ログインなし)用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderEditGet() {
- $data = $this->__getData(1);
- $results = array();
-
- //ログインなし
- $results[0] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => $data['ReservationActionPlan']['origin_event_key']),
- 'assert' => null, 'exception' => 'ForbiddenException'
- );
- return $results;
- }
-
-/**
- * editアクションのGETテスト(作成権限のみ)用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderEditGetByCreatable() {
- $data = $this->__getData(1);
- $results = array();
-
- //作成権限のみ
- //--他人の記事
- $results[0] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan1'),
- 'assert' => null,
- //'exception' => 'BadRequestException',
- 'exception' => 'ForbiddenException',
- );
- $results[1] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan4'),
- 'assert' => null,
- //'exception' => 'BadRequestException',
- 'exception' => 'ForbiddenException',
- );
- //--自分の記事
- $results[2] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan2'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- $results[3] = Hash::merge($results[2], array(
- 'assert' => array('method' => 'assertInput', 'type' => 'input', 'name' => 'data[Frame][id]', 'value' => $data['Frame']['id']),
- ));
- $results[4] = Hash::merge($results[2], array(
- 'assert' => array('method' => 'assertInput', 'type' => 'input', 'name' => 'data[Block][id]', 'value' => $data['Block']['id']),
- ));
- $results[5] = Hash::merge($results[2], array(
- //'assert' => array('method' => 'assertInput', 'type' => 'input', 'name' => '_method', 'value' => 'DELETE'),
- 'assert' => array('method' => 'assertInput', 'type' => 'button', 'name' => 'delete', 'value' => null),
- ));
- //--自分の記事(一度公開済み)
- $results[6] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan3'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //フレームID指定なしテスト
- $results[7] = Hash::merge($results[2], array(
- //'urlOptions' => array('frame_id' => null, 'block_id' => $data['Block']['id'], 'key' => 'reservationplan2'),
- //'urlOptions' => array('frame_id' => null, 'block_id' => $data['Block']['id']),
- 'urlOptions' => array('frame_id' => null, 'block_id' => 0),
- 'assert' => array('method' => 'assertNotEmpty'),
- ));
- return $results;
- }
-
-/**
- * editアクションのGETテスト(編集権限、公開権限なし)用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderEditGetByEditable() {
- $data = $this->__getData(4);
- $results = array();
-
- //編集権限あり
- //--コンテンツあり
- $base = 0;
- $results[0] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan4'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- array_push($results, Hash::merge($results[$base], array(
- 'assert' => array('method' => 'assertActionLink', 'action' => 'delete', 'linkExist' => false, 'url' => array()),
- )));
- array_push($results, Hash::merge($results[$base], array(
- 'assert' => array('method' => 'assertInput', 'type' => 'input', 'name' => 'data[Frame][id]', 'value' => $data['Frame']['id']),
- )));
- array_push($results, Hash::merge($results[$base], array(
- 'assert' => array('method' => 'assertInput', 'type' => 'input', 'name' => 'data[Block][id]', 'value' => $data['Block']['id']),
- )));
- array_push($results, Hash::merge($results[$base], array(
- 'assert' => array('method' => 'assertInput', 'type' => 'button', 'name' => 'save_' . WorkflowComponent::STATUS_IN_DRAFT, 'value' => null),
- )));
- array_push($results, Hash::merge($results[$base], array(
- //'assert' => array('method' => 'assertInput', 'type' => 'button', 'name' => 'save_' . WorkflowComponent::STATUS_APPROVAL_WAITING, 'value' => null),
- 'assert' => array('method' => 'assertInput', 'type' => 'button', 'name' => 'save_' . WorkflowComponent::STATUS_PUBLISHED, 'value' => null),
- )));
- //--コンテンツなし
- $results[count($results)] = array(
- 'urlOptions' => array('frame_id' => '14', 'block_id' => null, 'key' => null),
- 'assert' => array('method' => 'assertEquals', 'expected' => 'emptyRender'),
- 'exception' => 'ForbiddenException', 'return' => 'viewFile'
- );
-
- return $results;
- }
-
-/**
- * editアクションのGETテスト(公開権限あり)用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderEditGetByPublishable() {
- $data = $this->__getData(6);
- $results = array();
-
- //--コンテンツあり
- $base = 0;
- $results[0] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan6'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //繰り返しあり(この予定のみ変更)
- $results[1] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan7'),
- //'assert' => array('method' => 'assertNotEmpty'),
- 'assert' => array('method' => 'assertContains', 'expected' => __d('reservations', 'only this one')),
- );
- //繰り返しあり(WEEKLY)
- $results[2] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan10'),
- 'assert' => array('method' => 'assertContains', 'expected' => __d('reservations', 'only this one')), //あとで変更pending
- );
- //繰り返しあり(MONTHLY曜日指定)
- $results[3] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan12'),
- 'assert' => array('method' => 'assertContains', 'expected' => __d('reservations', 'only this one')),
- );
- //繰り返しあり(MONTHLY日指定)
- $results[4] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan17'),
- //'assert' => array('method' => 'assertContains', 'expected' => __d('reservations', 'only this one')),
- 'assert' => array('method' => 'assertNotContains', 'expected' => __d('reservations', 'only this one')), //ReservationEventが1件の場合は、繰り返し編集の設定なし
- );
- //繰り返しあり(YEARLY)(COUNT)
- $results[5] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan14'),
- 'assert' => array('method' => 'assertContains', 'expected' => __d('reservations', 'only this one')),
- );
- //繰り返しあり(YEARLY)(UNTIL)
- $results[6] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan18'),
- 'assert' => array('method' => 'assertNotContains', 'expected' => __d('reservations', 'only this one')), //ReservationEventが1件の場合は、繰り返し編集の設定なし
- );
- array_push($results, Hash::merge($results[$base], array(
- 'assert' => array('method' => 'assertActionLink', 'action' => 'delete', 'linkExist' => false, 'url' => array()),
- )));
- array_push($results, Hash::merge($results[$base], array(
- 'assert' => array('method' => 'assertInput', 'type' => 'input', 'name' => 'data[Frame][id]', 'value' => $data['Frame']['id']),
- )));
- array_push($results, Hash::merge($results[$base], array(
- 'assert' => array('method' => 'assertInput', 'type' => 'input', 'name' => 'data[Block][id]', 'value' => $data['Block']['id']),
- )));
- array_push($results, Hash::merge($results[$base], array(
- 'assert' => array('method' => 'assertInput', 'type' => 'button', 'name' => 'save_' . WorkflowComponent::STATUS_IN_DRAFT, 'value' => null),
- )));
- array_push($results, Hash::merge($results[$base], array(
- //'assert' => array('method' => 'assertInput', 'type' => 'button', 'name' => 'save_' . WorkflowComponent::STATUS_APPROVAL_WAITING, 'value' => null),
- 'assert' => array('method' => 'assertInput', 'type' => 'button', 'name' => 'save_' . WorkflowComponent::STATUS_PUBLISHED, 'value' => null),
- )));
- array_push($results, Hash::merge($results[0], array(
- 'assert' => array('method' => 'assertInput', 'type' => 'button', 'name' => 'delete', 'value' => null),
- )));
- //フレームID指定なしテスト
- array_push($results, Hash::merge($results[$base], array(
- 'urlOptions' => array('frame_id' => null, 'block_id' => $data['Block']['id'], 'key' => 'reservationplan6'),
- 'assert' => array('method' => 'assertNotEmpty'),
- )));
-
- return $results;
- }
-
-/**
- * editアクションのPOSTテスト
- *
- * @param array $data POSTデータ
- * @param string $role ロール
- * @param array $urlOptions URLオプション
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderEditPost
- * @return void
- */
- public function testEditPost($data, $role, $urlOptions, $exception = null, $return = 'view') {
- //ログイン
- if (isset($role)) {
- TestAuthGeneral::login($this, $role);
- }
-
- //テスト設定
- CakeSession::write('Auth.User.UserRoleSetting.use_private_room', true);
-
- //テスト実施
- $this->_testPostAction(
- 'post', $data, Hash::merge(array('action' => 'edit'), $urlOptions), $exception, $return
- );
-
- //正常の場合、リダイレクト
- if (! $exception) {
- $header = $this->controller->response->header();
- $this->assertNotEmpty($header['Location']);
- }
-
- //ログアウト
- if (isset($role)) {
- TestAuthGeneral::logout($this);
- }
- }
-
-/**
- * editアクションのPOSTテスト用DataProvider
- *
- * ### 戻り値
- * - data: 登録データ
- * - role: ロール
- * - urlOptions: URLオプション
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderEditPost() {
- $data = $this->__getData(1);
- $data2 = $this->__getData(2);
- //unset($data2['ReservationActionPlan']['timezone']); //timezoneの設定が無いケース(ReservationActionPlan.php:926行目でおちる)
-
- $data4 = $this->__getData(4);
-
- //$data5 = $data4;
-
- $data6 = $this->__getData(2);
- $data6['ReservationActionPlan']['plan_room_id'] = '8'; //privateroom
-
- $data7 = $this->__getData(27);
- $data7['ReservationActionPlan']['plan_room_id'] = '8'; //privateroom
-
- //$data8 = $this->__getData(8); //この予定のみ変更
- //$data8['ReservationActionPlan']['is_repeat'] = 1; //※この予定のみで繰り返し変更は指定できない(ReservationPlansController.php:472でエラー)
- //$data8['ReservationActionPlan']['edit_rrule'] = 1; //この日以降の予定を変更
-
- //$data5['ReservationActionPlan']['rrule_term'] = 'UNTIL';
- //$data5['ReservationActionPlan']['rrule_until'] = '2018-01-01';
-
- return array(
- //ログインなし
- array(
- 'data' => $data, 'role' => null,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan1'),
- 'exception' => 'ForbiddenException',
- ),
- //作成権限のみ
- //--他人の記事
- array(
- 'data' => $data, 'role' => Role::ROOM_ROLE_KEY_GENERAL_USER,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan1'),
- 'exception' => 'ForbiddenException',
- ),
- //--自分の記事
- array(
- 'data' => $data2, 'role' => Role::ROOM_ROLE_KEY_GENERAL_USER,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan2'),
- ),
- //編集権限あり
- //--コンテンツあり
- array(
- 'data' => $data4, 'role' => Role::ROOM_ROLE_KEY_EDITOR,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan4'),
- ),
- //--共有者ありの予定変更
- array(
- 'data' => $data7, 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan27'),
- ),
-
- //--コンテンツあり(この予定のみ変更)
- //array(
- // 'data' => $data8, 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- // 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan7'),
- //),
- //array(
- // 'data' => $data5, 'role' => Role::ROOM_ROLE_KEY_EDITOR,
- // 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan4'),
- //),
- //フレームID指定なしテスト
- array(
- 'data' => $data2, 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => null, 'block_id' => $data['Block']['id'], 'key' => 'reservationplan2'),
- ), //pending ReservationPlansController.php 304行目のルート($frameIdが0)は通らない?
- //--自分のプライベート記事に変更
- array(
- 'data' => $data6, 'role' => Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR,
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id'], 'key' => 'reservationplan2'),
- ),
-
- );
- }
-
-/**
- * editアクションのValidationErrorテスト用DataProvider
- *
- * ### 戻り値
- * - data: 登録データ
- * - urlOptions: URLオプション
- * - validationError: バリデーションエラー
- *
- * @return array
- */
- public function dataProviderEditValidationError() {
- $data1 = $this->__getData(2);
- $result1 = array(
- 'data' => $data1,
- 'urlOptions' => array('frame_id' => $data1['Frame']['id'], 'block_id' => $data1['Block']['id'], 'key' => 'reservationplan2'),
- );
-
- $data2 = $this->__getData(4);
- $data2['ReservationActionPlan']['is_repeat'] = 1;
- $data2['ReservationActionPlan']['rrule_term'] = 'UNTIL';
- $data2['ReservationActionPlan']['rrule_until'] = '2018-01-01';
-
- $result2 = array(
- 'data' => $data2,
- 'urlOptions' => array('frame_id' => $data2['Frame']['id'], 'block_id' => $data2['Block']['id'], 'key' => 'reservationplan4'),
- );
-
- return array(
- Hash::merge($result1, array(
- 'validationError' => array(
- 'field' => 'ReservationActionPlan.title',
- 'value' => '',
- 'message' => __d('reservations', 'Invalid input. (plan title)'),
- )
- )),
- Hash::merge($result2, array(
- 'validationError' => array(
- 'field' => 'ReservationActionPlan.rrule_until',
- 'value' => '2018-01-01',
- 'message' => __d('reservations',
- 'Cyclic rules using deadline specified exceeds the maximum number of %d',
- intval(ReservationsComponent::CALENDAR_RRULE_COUNT_MAX)),
- )
- )),
- );
- }
-
-/**
- * editアクションのValidateionErrorテスト
- *
- * @param array $data POSTデータ
- * @param array $urlOptions URLオプション
- * @param string|null $validationError ValidationError
- * @dataProvider dataProviderEditValidationError
- * @return void
- */
- public function testEditValidationError($data, $urlOptions, $validationError = null) {
- //ログイン
- TestAuthGeneral::login($this);
-
- //テスト実施
- $this->_testActionOnValidationError(
- 'post', $data, Hash::merge(array('action' => 'edit'), $urlOptions), $validationError
- );
-
- //ログアウト
- TestAuthGeneral::logout($this);
- }
-
-}
diff --git a/Test/Case/Controller/ReservationPlans/ViewTest.php b/Test/Case/Controller/ReservationPlans/ViewTest.php
deleted file mode 100644
index 5bcdd19..0000000
--- a/Test/Case/Controller/ReservationPlans/ViewTest.php
+++ /dev/null
@@ -1,347 +0,0 @@
-
- * @author Shohei Nakajima
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationPlansController', 'ReservationPlans.Controller');
-//App::uses('NetCommonsControllerTestCase', 'NetCommons.TestSuite');
-App::uses('WorkflowControllerViewTest', 'Workflow.TestSuite');
-App::uses('UserAttributeLayoutFixture', 'UserAttributes.Test/Fixture');
-
-/**
- * ReservationPlansController Test Case
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Test\Case\Controller\ReservationPlansController
- */
-class ReservationPlansControllerViewTest extends WorkflowControllerViewTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- 'plugin.holidays.holiday',
- 'plugin.holidays.holiday_rrule',
- 'plugin.reservations.roles_room4test', //add
- 'plugin.reservations.roles_rooms_user4test', //add
- //'plugin.groups.user_attribute_layout4_groups_test', //add
- 'plugin.user_attributes.user_attribute_layout',
- 'plugin.rooms.room_role_permission4test', //test
- 'plugin.reservations.plugins_role4test', //add
- 'plugin.reservations.room4test',
- );
-
-/**
- * Plugin name
- *
- * @var array
- */
- public $plugin = 'reservations';
-
-/**
- * Controller name
- *
- * @var string
- */
- protected $_controller = 'reservation_plans';
-
-/**
- * viewアクションのテスト用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderView() {
- $results = array();
-
- //ログインなし
- //--コンテンツあり
- $results[0] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan1'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- $results[1] = Hash::merge($results[0], array( //編集ボタンなし
- 'assert' => array('method' => 'assertActionLink', 'action' => 'edit', 'linkExist' => false, 'url' => array()),
- ));
- //--コンテンツなし
- $results[2] = array(
- 'urlOptions' => array('frame_id' => '14', 'key' => null),
- //'assert' => array('method' => 'assertEquals', 'expected' => 'emptyRender'),
- //'exception' => null, 'return' => 'viewFile'
- 'assert' => null,
- 'exception' => 'ForbiddenException',
-
- );
-
- return $results;
- }
-
-/**
- * viewアクションのテスト(作成権限のみ)用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderViewByCreatable() {
- $results = array();
- //作成権限のみ(一般が書いた予定&一度公開している)
- $results[0] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan3'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- $results[1] = Hash::merge($results[0], array( //編集ボタンあり
- //'assert' => array('method' => 'assertActionLink', 'action' => 'edit', 'linkExist' => true, 'url' => array()),
- 'assert' => array('method' => 'assertContains', 'expected' => '/reservations/reservation_plans/edit/reservationplan3'),
- ));
- //作成権限のみ(一般が書いた予定&公開前)
- $results[2] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan2'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- $results[3] = Hash::merge($results[2], array( //編集ボタンあり
- //'assert' => array('method' => 'assertActionLink', 'action' => 'edit', 'linkExist' => true, 'url' => array()),
- 'assert' => array('method' => 'assertContains', 'expected' => '/reservations/reservation_plans/edit/reservationplan2'),
- ));
- //作成権限のみ(他人が書いた予定&公開中)
- $results[4] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan5'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- $results[5] = Hash::merge($results[4], array( //編集ボタンなし
- //'assert' => array('method' => 'assertActionLink', 'action' => 'edit', 'linkExist' => false, 'url' => array()),
- 'assert' => array('method' => 'assertNotContains', 'expected' => '/reservations/reservation_plans/edit/reservationplan5'),
- ));
- //作成権限のみ(他人が書いた予定&公開前)
- $results[6] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan4'),
- 'assert' => null,
- 'exception' => 'ForbiddenException',
- );
- //作成権限のみ(承認待ち)
- $results[7] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan25'),
- 'assert' => null,
- );
- //作成権限のみ(差し戻し)
- $results[8] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan26'),
- 'assert' => null,
- );
- //--コンテンツなし
- $results[9] = array(
- 'urlOptions' => array('frame_id' => '14', 'key' => null),
- //'assert' => array('method' => 'assertEquals', 'expected' => 'emptyRender'),
- //'exception' => null, 'return' => 'viewFile'
- 'assert' => null,
- 'exception' => 'ForbiddenException',
- );
- //--パラメータ不正(keyに該当する予定が存在しない)
- $results[10] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan_99'),
- //'assert' => null,
- //'exception' => 'BadRequestException',
- 'assert' => null,
- 'exception' => 'ForbiddenException',
- );
-
- return $results;
- }
-
-/**
- * viewアクションのテスト用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderViewByEditable() {
- $results = array();
- //編集権限あり
- //--コンテンツあり 繰り返し(日/1日ごと/2回)
- $results[0] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan7'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //--コンテンツあり 繰り返し(週/1週/2回)
- $results[1] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan10'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //--コンテンツあり 繰り返し(月/第1週日曜日/2回)
- $results[2] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan12'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //--コンテンツあり 繰り返し(年/2回)
- $results[3] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan14'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //--コンテンツあり 繰り返し(週/2週おき(木)/2016.9.2まで)
- $results[4] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan16'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //--コンテンツあり 繰り返し(月/2か月ごとに2日/2016.10.01まで)
- $results[5] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan17'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //--コンテンツあり 繰り返し(年/2年ごとに,9月 / 開始日と同日 / 2017年09月01日まで)
- $results[6] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan18'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //--コンテンツあり 繰り返し(日/2日ごと/2016.09.02まで)
- $results[7] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan19'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //--コンテンツあり 繰り返し(月/第2週月曜日/1回)
- $results[8] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan20'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //--コンテンツあり 繰り返し(月/第3週火曜日/1回)
- $results[9] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan21'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //--コンテンツあり 繰り返し(月/第4週水曜日/1回)
- $results[10] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan22'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //--コンテンツあり 繰り返し(月/最終週木曜日/1回)
- $results[11] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan23'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //--コンテンツあり 期間
- $results[12] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan9line'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- $results[13] = Hash::merge($results[0], array( //編集ボタンあり
- //'assert' => array('method' => 'assertActionLink', 'action' => 'edit', 'linkExist' => true, 'url' => array()),
- 'assert' => array('method' => 'assertContains', 'expected' => '/reservations/reservation_plans/edit/reservationplan7'),
- ));
- //--コンテンツなし
- $results[14] = array(
- 'urlOptions' => array('frame_id' => '14', 'key' => null),
- //'assert' => array('method' => 'assertEquals', 'expected' => 'emptyRender'),FREQ=MONTHLY;INTERVAL=1;BYDAY=1SU;COUNT=2
- //'exception' => null, 'return' => 'viewFile'
- 'assert' => null,
- 'exception' => 'ForbiddenException',
- );
- //フレームID指定なしテスト
- $results[15] = array(
- 'urlOptions' => array('frame_id' => null, 'key' => 'reservationplan6'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //adminが編集長(chief_editor)と共有(差し込まれた予定)
- $results[16] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan27'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //$results[17] = Hash::merge($results[3], array(
- //'assert' => array('method' => 'assertActionLink', 'action' => 'edit', 'linkExist' => true, 'url' => array()),
- //'assert' => array('method' => 'assertContains', 'expected' => '/reservations/reservation_plans/edit/reservationplan6'),
- //)); //frame_idを省略すると編集不可(3.0.0では編集をOFFにする動き)
- return $results;
- }
-
-/**
- * viewアクションのテスト(編集権限、公開権限あり)
- *
- * @param array $urlOptions URLオプション
- * @param array $assert テストの期待値
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderViewByPublishable
- * @return void
- */
- public function testViewByPublishable($urlOptions, $assert, $exception = null, $return = 'view') {
- //ログイン
- TestAuthGeneral::login($this, Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR);
-
- //テスト設定
- CakeSession::write('Auth.User.UserRoleSetting.use_private_room', true);
-
- //テスト実施
- $url = Hash::merge(array(
- 'plugin' => $this->plugin,
- 'controller' => $this->_controller,
- 'action' => 'view',
- ), $urlOptions);
-
- $this->_testGetAction($url, $assert, $exception, $return);
-
- //ログアウト
- TestAuthGeneral::logout($this);
- }
-
-/**
- * viewアクションのテスト用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderViewByPublishable() {
- $results = array();
-
- //共有者あり
- //adminが編集長と共有した
- $results[0] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan27'),
- //'assert' => array('method' => 'assertNotEmpty'),
- 'assert' => array('method' => 'assertContains', 'expected' => 'reservationplan27'),
- );
- //全会員
- $results[1] = array(
- 'urlOptions' => array('frame_id' => '6', 'key' => 'reservationplan24'),
- //'assert' => array('method' => 'assertNotEmpty'),
- 'assert' => array('method' => 'assertContains', 'expected' => 'reservationplan24'),
- );
-
- return $results;
- }
-
-}
diff --git a/Test/Case/Controller/Reservations/IndexTest.php b/Test/Case/Controller/Reservations/IndexTest.php
deleted file mode 100644
index 17472a0..0000000
--- a/Test/Case/Controller/Reservations/IndexTest.php
+++ /dev/null
@@ -1,479 +0,0 @@
-
- * @author AllCreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsController', 'Reservations.Controller');
-App::uses('WorkflowControllerIndexTest', 'Workflow.TestSuite');
-App::uses('NetCommonsControllerTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component');
-App::uses('ReservationFrameSetting', 'Reservations.Model');
-App::uses('ReservationFrameSettingSelectRoom', 'Reservations.Model');
-
-/**
- * ReservationsController Test Case
- *
- * @author Allcreator
- * @package NetCommons\Reservations\Test\Case\Controller\ReservationsController
- */
-class ReservationsControllerIndexTest extends NetCommonsControllerTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.reservations.room4test',
- 'plugin.rooms.rooms_language4test',
- 'plugin.rooms.room_role_permission4test', //test
- 'plugin.reservations.roles_room4test', //add
- 'plugin.reservations.roles_rooms_user4test', //add
- 'plugin.reservations.plugins_role4test', //add1
- 'plugin.holidays.holiday',
- 'plugin.holidays.holiday_rrule',
- );
-
-/**
- * Plugin name
- *
- * @var array
- */
- public $plugin = 'reservations';
-
-/**
- * Controller name
- *
- * @var string
- */
- protected $_controller = 'reservations';
-
-/**
- * テストDataの取得
- *
- * @return array
- */
- private function __getData() {
- $frameId = '6';
- $blockId = '2';
- $blockKey = 'block_1';
-
- $data = array(
- 'Frame' => array(
- 'id' => $frameId
- ),
- 'Block' => array(
- 'id' => $blockId,
- 'key' => $blockKey,
- 'language_id' => '2',
- 'room_id' => '1',
- 'plugin_key' => $this->plugin,
- ),
- );
-
- return $data;
- }
-
-/**
- * indexアクションのテスト
- *
- * @param array $urlOptions URLオプション
- * @param array $assert テストの期待値
- * @param string $defStyle 表示設定(スタイル)
- * @param string $startPos 開始位置(昨日/今日)
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderIndex
- * @return void
- */
- public function testIndex($urlOptions, $assert, $defStyle = '', $startPos = '', $exception = null, $return = 'view') {
- //スタイル Fixture書き換え
- //Current::$current['ReservationFrameSetting']['display_type'] = $style;
- $data['ReservationFrameSetting'] = (new ReservationFrameSettingFixture())->records[0];
- $data['ReservationFrameSetting']['display_type'] = $defStyle;
-
- if ($startPos == ReservationsComponent::CALENDAR_START_POS_WEEKLY_YESTERDAY) {
- $data['ReservationFrameSetting']['start_pos'] = ReservationsComponent::CALENDAR_START_POS_WEEKLY_YESTERDAY;
- } elseif ($startPos == ReservationsComponent::CALENDAR_START_POS_WEEKLY_TODAY) {
- $data['ReservationFrameSetting']['start_pos'] = ReservationsComponent::CALENDAR_START_POS_WEEKLY_TODAY;
- }
-
- $this->controller->ReservationFrameSetting->save($data);
-
- //テスト実施
- $url = Hash::merge(array(
- 'plugin' => $this->plugin,
- 'controller' => $this->_controller,
- 'action' => 'index',
- ), $urlOptions);
- $this->_testGetAction($url, $assert, $exception, $return);
- }
-
-/**
- * indexアクションのテスト(ログインなし)用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderIndex() {
- $results = array();
- //ログインなし(月縮小)
- $results[0] = array(
- 'urlOptions' => array('frame_id' => '6'),
- 'assert' => array('method' => 'assertNotEmpty'),
- );
- //ログインなし(月拡大)
- $results[1] = array( //(年月日指定なし)
- 'urlOptions' => array('frame_id' => '6'),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_LARGE_MONTHLY,
- );
- $results[2] = array( //(年が不正 最小値(CALENDAR_RRULE_TERM_UNTIL_YEAR_MIN以下)2001)
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2000', 'month' => '9', 'day' => '9')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_LARGE_MONTHLY,
- );
- $results[3] = array( //(年が不正 最大値(CALENDAR_RRULE_TERM_UNTIL_YEAR_MAX以上)2033)
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2034', 'month' => '9', 'day' => '9')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_LARGE_MONTHLY,
- );
- //ログインなし(週表示)
- $results[4] = array( //(年月日指定あり)
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2016', 'month' => '9', 'day' => '9')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_WEEKLY,
- );
- $results[5] = array( // (week指定あり)
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2016', 'month' => '9', 'week' => '1')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_WEEKLY,
- );
- $results[6] = array( // (指定なし)
- 'urlOptions' => array('frame_id' => '6'),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_WEEKLY,
- );
- $results[7] = array( // (初期表示は週表示、style(パラメータ)で日表示:daily、リスト表示)
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2016', 'month' => '9', 'day' => '9', 'style' => 'daily', 'tab' => 'list')),
- //'assert' => array('method' => 'assertNotEmpty'),
- 'assert' => array('method' => 'assertContains', 'expected' => 'reservationplan1'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_WEEKLY,
- );
- $results[8] = array( // (初期表示は週表示、style(パラメータ)で日表示:daily、タイムライン表示)
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2016', 'month' => '9', 'day' => '9', 'style' => 'daily', 'tab' => 'timeline')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_WEEKLY,
- );
- $results[9] = array( // (初期表示は週表示、style(パラメータ)不正(不正時は月縮小表示))
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2016', 'month' => '9', 'day' => '9', 'style' => 'aaaa')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_WEEKLY,
- );
- $results[10] = array( //ログインなし(日表示)(タイムライン)
- 'urlOptions' => array('frame_id' => '6', '?' => array('tab' => 'timeline', 'year' => '2016', 'month' => '9', 'day' => '1')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_DAILY,
- );
- $results[11] = array( //ログインなし(スケジュール(時間順)表示)(今日から表示)
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2016', 'month' => '9', 'day' => '7')),
- 'assert' => array('method' => 'assertNotContains', 'expected' => __d('reservations', 'yesterday')),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_TSCHEDULE,
- );
- $results[12] = array( //ログインなし(スケジュール(時間順)表示)(昨日から表示)
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2016', 'month' => '9', 'day' => '9')),
- 'assert' => array('method' => 'assertContains', 'expected' => __d('reservations', 'yesterday')),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_TSCHEDULE,
- 'startPos' => ReservationsComponent::CALENDAR_START_POS_WEEKLY_YESTERDAY,
- );
- $results[13] = array( //ログインなし(スケジュール(会員順)表示)(今日から表示)
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2016', 'month' => '9', 'day' => '1')),
- 'assert' => array('method' => 'assertNotContains', 'expected' => __d('reservations', 'yesterday')),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_MSCHEDULE,
- 'startPos' => ReservationsComponent::CALENDAR_START_POS_WEEKLY_TODAY,
- );
- $results[14] = array( //ログインなし(スケジュール(会員順)表示)(昨日から表示)
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2016', 'month' => '9', 'day' => '9')),
- 'assert' => array('method' => 'assertContains', 'expected' => __d('reservations', 'yesterday')),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_MSCHEDULE,
- 'startPos' => ReservationsComponent::CALENDAR_START_POS_WEEKLY_YESTERDAY,
- );
- $results[15] = array( //チェック--追加ボタンチェック(なし)
- 'urlOptions' => array('frame_id' => '6', 'block_id' => '2'),
- 'assert' => array('method' => 'assertActionLink', 'action' => 'add', 'linkExist' => false, 'url' => array()),
- );
- return $results;
- }
-
-/**
- * indexアクションのテスト(編集権限あり)
- *
- * @param array $urlOptions URLオプション
- * @param array $assert テストの期待値
- * @param string $defStyle スタイル
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderIndexByEditable
- * @return void
- */
- public function testIndexByEditable($urlOptions, $assert, $defStyle = '', $exception = null, $return = 'view') {
- //ログイン
- TestAuthGeneral::login($this, Role::ROOM_ROLE_KEY_EDITOR);
-
- //スタイル Fixture書き換え
- $data['ReservationFrameSetting'] = (new ReservationFrameSettingFixture())->records[0];
- $data['ReservationFrameSetting']['display_type'] = $defStyle;
- $this->controller->ReservationFrameSetting->save($data);
-
- //テスト実施
- $url = Hash::merge(array(
- 'plugin' => $this->plugin,
- 'controller' => $this->_controller,
- 'action' => 'index',
- ), $urlOptions);
-
- $this->_testGetAction($url, $assert, $exception, $return);
-
- //ログアウト
- TestAuthGeneral::logout($this);
- }
-
-/**
- * indexアクションのテスト(編集権限あり)用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderIndexByEditable() {
- $results = array();
-
- //編集権限あり
- $base = 0;
- $results[0] = array(
- 'urlOptions' => array('frame_id' => '6', 'block_id' => '2', '?' => array('year' => '2016', 'month' => '9', 'day' => '9')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_DAILY,
- );
- $results[1] = array(
- 'urlOptions' => array('frame_id' => '6', 'block_id' => '2', '?' => array('year' => '2016', 'month' => '9', 'day' => '9')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_LARGE_MONTHLY,
- );
- $results[2] = array( //祝日あり
- 'urlOptions' => array('frame_id' => '6', 'block_id' => '2', '?' => array('year' => '2015', 'month' => '1', 'day' => '1')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_LARGE_MONTHLY,
- );
- //チェック
- //--追加ボタンチェック 日表示
- array_push($results, Hash::merge($results[$base], array(
- //'assert' => array('method' => 'assertActionLink', 'action' => 'add', 'linkExist' => true, 'url' => array('controller' => 'reservation_plans')),
- 'assert' => array('method' => 'assertContains', 'expected' => '/reservations/reservation_plans/add?'),
- )));
- //フレームあり(ブロックなし)
- array_push($results, Hash::merge($results[$base], array(
- 'urlOptions' => array('frame_id' => '14', 'block_id' => null),
- 'assert' => array('method' => 'assertEquals', 'expected' => 'index'),
- 'exception' => null, 'return' => 'viewFile'
- )));
- //フレームID指定なしテスト
- array_push($results, Hash::merge($results[$base], array(
- 'urlOptions' => array('frame_id' => null, 'block_id' => '2'),
- 'assert' => array('method' => 'assertContains', 'expected' => 'index'),
- )));
- // pending 120行目の表示形式が不明の場合の最後のelse「月縮小とみなす」のルートは通せない??
- //(スケジュール(defStyleが不正)
- //array_push($results, Hash::merge($results[$base], array(
- // 'urlOptions' => array('frame_id' => '6'),
- // 'assert' => array('method' => 'assertNotEmpty'), 'defStyle' => '99',
- //)));
-
- return $results;
- }
-
-/**
- * indexアクションのテスト(作成権限あり)
- *
- * @param array $urlOptions URLオプション
- * @param array $assert テストの期待値
- * @param string $defStyle スタイル
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderIndexByCreatable
- * @return void
- */
- public function testIndexByCreatable($urlOptions, $assert, $defStyle = '', $exception = null, $return = 'view') {
- //ログイン
- TestAuthGeneral::login($this, Role::ROOM_ROLE_KEY_GENERAL_USER);
-
- //スタイル Fixture書き換え
- $data['ReservationFrameSetting'] = (new ReservationFrameSettingFixture())->records[0];
- $data['ReservationFrameSetting']['display_type'] = $defStyle;
- $this->controller->ReservationFrameSetting->save($data);
-
- //テスト実施
- $url = Hash::merge(array(
- 'plugin' => $this->plugin,
- 'controller' => $this->_controller,
- 'action' => 'index',
- ), $urlOptions);
-
- $this->_testGetAction($url, $assert, $exception, $return);
-
- //ログアウト
- TestAuthGeneral::logout($this);
- }
-
-/**
- * indexアクションのテスト(作成権限のみ)用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderIndexByCreatable() {
- $data = $this->__getData();
- $results = array();
-
- //作成権限あり(2015.1.1祝日設定あり)
- $base = 0;
- $results[0] = array(
- 'urlOptions' => array('frame_id' => $data['Frame']['id'], 'block_id' => $data['Block']['id']),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_LARGE_MONTHLY,
- );
- $results[1] = array(
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2016', 'month' => '9', 'day' => '9')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_LARGE_MONTHLY,
- );
- $results[2] = array(
- 'urlOptions' => array('frame_id' => '6', 'block_id' => '2', '?' => array('year' => '2016', 'month' => '7', 'day' => '28')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_LARGE_MONTHLY,
- );
- //チェック
- //--追加ボタンチェック
- array_push($results, Hash::merge($results[$base], array(
- //'assert' => array('method' => 'assertActionLink', 'action' => 'add', 'linkExist' => true, 'url' => array()),
- 'assert' => array('method' => 'assertContains', 'expected' => '/reservations/reservation_plans/add?'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_LARGE_MONTHLY,
- )));
- //フレームID指定なしテスト
- array_push($results, Hash::merge($results[$base], array(
- 'urlOptions' => array('frame_id' => null, 'block_id' => $data['Block']['id']),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_LARGE_MONTHLY,
- )));
-
- return $results;
- }
-
-/**
- * indexアクションのテスト(公開権限あり)
- *
- * @param array $urlOptions URLオプション
- * @param array $assert テストの期待値
- * @param string $defStyle スタイル
- * @param string|null $exception Exception
- * @param string $return testActionの実行後の結果
- * @dataProvider dataProviderIndexByPublishable
- * @return void
- */
- public function testIndexByPublishable($urlOptions, $assert, $defStyle = '', $exception = null, $return = 'view') {
- //ログイン
- TestAuthGeneral::login($this, Role::ROOM_ROLE_KEY_ROOM_ADMINISTRATOR);
- //TestAuthGeneral::login($this, UserRole::USER_ROLE_KEY_SYSTEM_ADMINISTRATOR);
-
- //スタイル Fixture書き換え
- $data['ReservationFrameSetting'] = (new ReservationFrameSettingFixture())->records[0];
- $data['ReservationFrameSetting']['display_type'] = $defStyle;
-
- if ($defStyle == ReservationsComponent::CALENDAR_DISP_TYPE_LARGE_MONTHLY) {
- $data['ReservationFrameSetting']['is_myroom'] = false; //プライベートルームを表示するかどうか(表示しない)
- //$data['ReservationFrameSetting']['is_myroom'] = true;
- $data['ReservationFrameSetting']['is_select_room'] = false; //指定したルームのみを表示するかどうか(指定なし)
- } else {
- $data['ReservationFrameSetting']['is_myroom'] = true; //プライベートルームを表示するかどうか(表示する)
- $data['ReservationFrameSetting']['is_select_room'] = false; //指定したルームのみを表示するかどうか(指定なし)
- }
-
- //テスト設定
- CakeSession::write('Auth.User.UserRoleSetting.use_private_room', true);
-
- $this->controller->ReservationFrameSetting->save($data);
-
- //テスト実施
- $url = Hash::merge(array(
- 'plugin' => $this->plugin,
- 'controller' => $this->_controller,
- 'action' => 'index',
- ), $urlOptions);
-
- $this->_testGetAction($url, $assert, $exception, $return);
-
- //ログアウト
- TestAuthGeneral::logout($this);
- }
-
-/**
- * indexアクションのテスト(公開権限あり)用DataProvider
- *
- * ### 戻り値
- * - urlOptions: URLオプション
- * - assert: テストの期待値
- * - exception: Exception
- * - return: testActionの実行後の結果
- *
- * @return array
- */
- public function dataProviderIndexByPublishable() {
- $results = array();
-
- //公開権限あり
- $results[0] = array(
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2016', 'month' => '9', 'day' => '9')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_LARGE_MONTHLY,
- );
- //(週表示)
- // (年月日指定あり)
- $results[1] = array(
- 'urlOptions' => array('frame_id' => '6', '?' => array('year' => '2016', 'month' => '9', 'day' => '9')),
- 'assert' => array('method' => 'assertNotEmpty'),
- 'defStyle' => ReservationsComponent::CALENDAR_DISP_TYPE_WEEKLY,
- );
-
- return $results;
- }
-
-}
diff --git a/Test/Case/Controller/ReservationsControllerTest.php b/Test/Case/Controller/ReservationsControllerTest.php
new file mode 100644
index 0000000..996e505
--- /dev/null
+++ b/Test/Case/Controller/ReservationsControllerTest.php
@@ -0,0 +1,33 @@
+
+* @author Your Name
+* @link http://www.netcommons.org NetCommons Project
+* @license http://www.netcommons.org/license.txt NetCommons License
+* @copyright Copyright 2014, NetCommons Project
+ */
+
+App::uses('ReservationsController', 'Reservations.Controller');
+
+/**
+ * Summary for ReservationsController Test Case
+ */
+class ReservationsControllerTest extends ControllerTestCase {
+
+/**
+ * Fixtures
+ *
+ * @var array
+ */
+ public $fixtures = array(
+ 'plugin.reservations.reservation',
+ 'plugin.reservations.language',
+ 'plugin.reservations.user',
+ 'plugin.reservations.role',
+ 'plugin.reservations.user_role_setting',
+ 'plugin.reservations.users_language'
+ );
+
+}
diff --git a/Test/Case/Lib/empty b/Test/Case/Lib/empty
new file mode 100644
index 0000000..e69de29
diff --git a/Test/Case/Model/Datasource/empty b/Test/Case/Model/Datasource/empty
new file mode 100644
index 0000000..e69de29
diff --git a/Test/Case/Model/Reservation/AfterFrameSaveTest.php b/Test/Case/Model/Reservation/AfterFrameSaveTest.php
deleted file mode 100644
index c72f118..0000000
--- a/Test/Case/Model/Reservation/AfterFrameSaveTest.php
+++ /dev/null
@@ -1,233 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsModelTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationFixture', 'Reservations.Test/Fixture');
-App::uses('ReservationFrameSettingFixture', 'Reservations.Test/Fixture');
-App::uses('ReservationFrameSetting', 'Reservations.Model');
-
-/**
- * Reservation::afterFrameSave()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\Reservation
- */
-class ReservationAfterFrameSaveTest extends NetCommonsModelTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'Reservation';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'afterFrameSave';
-
-/**
- * afterFrameSave()のテスト
- *
- * @param mix $data FrameSettingデータ
- * @param mix $expect 期待値
- * @param string $exception 例外
- * @dataProvider dataProviderAfterFrameSave
- * @return void
- */
- public function testAfterFrameSave($data, $expect, $exception = null) {
- $model = $this->_modelName;
- $methodName = $this->_methodName;
-
- if ($exception != null) {
- $this->setExpectedException($exception);
- }
-
- if (isset($data['FramesLanguage']['name'])) {
- if ($data['FramesLanguage']['name'] == 'testdata4') {
- $this->_mockForReturnFalse($model, 'Frames.Frame', 'save', 1);
- } elseif ($data['FramesLanguage']['name'] == 'testdata5') {
- $this->_mockForReturnTrue($model, 'Reservations.Reservation', '_saveFrameChangeAppearance', 1);
- } elseif ($data['FramesLanguage']['name'] == 'testdata6') {
- $this->_mockForReturnTrue($model, 'Reservations.Reservation', '_saveFrameChangeAppearance', 1);
- } elseif ($data['FramesLanguage']['name'] == 'testdata7') {
- //$this->_mockForReturnTrue($model, 'Reservations.Reservation', '_saveFrameChangeAppearance', 1);
- $this->_mockForReturnTrue($model, 'Reservations.ReservationFrameSetting', 'saveFrameSetting', 1);
- //$this->_mockForReturnFalse($model, 'Reservations.Reservation', '_saveReservation', 1);
- $mock = $this->getMockForModel('Reservations.Reservation', array('save'));
- $this->$model = $mock;
- $mock->expects($this->once())
- ->method('save')
- ->will($this->returnValue(array()));
- } elseif ($data['FramesLanguage']['name'] == 'testdata8') {
- //$this->_mockForReturnTrue($model, 'Reservations.ReservationFrameSetting', 'saveFrameSetting', 1);
- $mock = $this->getMockForModel('Blocks.Block', array('save'));
- $mock->expects($this->once())
- ->method('save')
- ->will($this->returnValue(array()));
- }
- unset($data['FramesLanguage']);
- }
-
- //テスト実施
- $this->$model->$methodName($data);
-
- //チェック
- $this->assertEquals($data, $expect);
- }
-
-/**
- * AfterFrameSaveのDataProvider
- * ε( v ゚ω゚) '2',
- // 'plugin_key' => 'reservations',
- // 'key' => 'key_1'
- //);
- //$data3['FramesLanguage'] = array(
- // 'language_id' => 2,
- //);
- //
- ////4.Frameあり/Blockなし
- //$data4 = array();
- //$expect4 = array();
- //$data4['Frame'] = array(
- // 'room_id' => '17',
- // 'plugin_key' => 'reservations',
- // 'key' => 'frame_3',
- // //'bix_id' => 3,
- // //'is_myroom' => 0,
- // //'display_type' => 2,
- // //'is_select_room' => 0,
- // //'start_pos' => 0,
- // //'display_count' => 3,
- // //'timeline_base_time' => 8,
- //);
- //$data4['FramesLanguage'] = array(
- // 'language_id' => 2,
- // 'name' => 'testdata4'
- //);
- //
- ////5.Frameあり/Blockあり(_saveFrameChangeAppearanceでtrue)
- //$data5 = array();
- //$expect5 = array();
- //$data5['Frame'] = array(
- // 'room_id' => '2',
- // 'plugin_key' => 'reservations',
- // 'key' => 'key_1',
- //);
- //$data5['FramesLanguage'] = array(
- // 'language_id' => 2,
- // 'name' => 'testdata5'
- //);
- //$expect5['Frame'] = $data5['Frame'];
- //
- ////6.Frameあり/Blockあり(_saveReservationで施設予約を生成)
- //$data6 = array();
- //$expect6 = array();
- //$data6['Frame'] = array(
- // 'room_id' => '17',
- // 'plugin_key' => 'reservations',
- // 'key' => 'key_2',
- //);
- //$data6['FramesLanguage'] = array(
- // 'language_id' => 2,
- // 'name' => 'testdata6'
- //);
- //$expect6['Frame'] = $data6['Frame'];
- //
- ////7.Frameあり/Blockあり(_saveReservationで施設予約生成失敗)
- //$data7 = array();
- //$expect7 = array();
- //$data7['Frame'] = array(
- // 'room_id' => '17',
- // 'plugin_key' => 'reservations',
- // 'key' => 'key_3',
- //);
- //$data7['FramesLanguage'] = array(
- // 'language_id' => 2,
- // 'name' => 'testdata7'
- //);
- //$expect7['Frame'] = $data7['Frame'];
- //
- ////8 Blockのsaveでエラー
- //$data8 = array();
- //$expect8 = array();
- //$data8['Frame'] = array(
- // 'room_id' => 17,
- // 'plugin_key' => 'reservations',
- // 'key' => 'key_4',
- //);
- //$data8['FramesLanguage'] = array(
- // 'language_id' => 2,
- // 'name' => 'testdata8'
- //);
- //$expect8['Frame'] = $data8['Frame'];
-
- return array(
- array($data1, $expect1),
- array($data2, $expect2, 'BadRequestException'),
- //array($data3, $expect3, 'InternalErrorException'),
- //array($data4, $expect4, 'InternalErrorException'),
- //array($data5, $expect5),
- //array($data6, $expect6),
- //array($data7, $expect7, 'InternalErrorException'),
- //array($data8, $expect8, 'InternalErrorException'),
- );
- }
-
-}
diff --git a/Test/Case/Model/Reservation/PrepareBlockTest.php b/Test/Case/Model/Reservation/PrepareBlockTest.php
deleted file mode 100644
index 18e5cb5..0000000
--- a/Test/Case/Model/Reservation/PrepareBlockTest.php
+++ /dev/null
@@ -1,127 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsModelTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationFixture', 'Reservations.Test/Fixture');
-App::uses('ReservationFrameSettingFixture', 'Reservations.Test/Fixture');
-App::uses('ReservationFrameSetting', 'Reservations.Model');
-
-/**
- * Reservation::prepareBlock()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\Reservation
- */
-class ReservationPrepareBlockTest extends NetCommonsModelTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.blocks.block',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'Reservation';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'prepareBlock';
-
-/**
- * prepareBlock()のテスト
- *
- * @param int $roomId ルームID
- * @param int $langId languageID
- * @param string $pluginKey プラグインキー
- * @param mix $expect 期待値
- * @param string $exception 例外
- * @dataProvider dataProviderPrepareBlock
- * @return void
- */
- public function testPrepareBlock($roomId, $langId, $pluginKey, $expect, $exception = null) {
- // ε( v ゚ω゚) <ブロック存在しちゃってる状態でテストしているのでこのテストは通らない
- $model = $this->_modelName;
- $methodName = $this->_methodName;
-
- if ($exception != null) {
- $this->setExpectedException($exception);
- }
-
- if ($expect == 'blockSaveErr') {
- $this->_mockForReturnFalse($model, 'Blocks.Block', 'save', 1);
- $expect = null;
- //テスト実施
- $return = $this->$model->$methodName($roomId, $langId, $pluginKey);
- }
- if ($expect == 'saveErr') {
- //$this->_mockForReturnFalse($model, 'Blocks.Block', 'save', 1);
- $mock = $this->getMockForModel('Reservations.Reservation', array('_saveReservation'));
- $this->$model = $mock;
- $mock->expects($this->once())
- ->method('_saveReservation')
- ->will($this->returnValue(array()));
- $expect = array();
- //テスト実施
- $return = $this->$model->$methodName($roomId, $langId, $pluginKey);
- //チェック
- $this->assertEquals($return, $expect);
- }
- }
-
-/**
- * prepareBlockのDataProvider
- *
- * ### 戻り値
- * - data 登録データ
- *
- * @return array
- */
- public function dataProviderPrepareBlock() {
- //
- $roomId = 16;
- $languageId = 2;
- $pluginKey = 'reservations';
-
- $expect1 = 'blockSaveErr';
- $expect2 = 'saveErr';
-
- return array(
- array($roomId, 0, $pluginKey, $expect1, 'InternalErrorException'), //Blockがない
- array(1, $languageId, $pluginKey, $expect2, 'InternalErrorException'),
- );
- }
-}
diff --git a/Test/Case/Model/Reservation/ValidateTest.php b/Test/Case/Model/Reservation/ValidateTest.php
deleted file mode 100644
index 1241f8e..0000000
--- a/Test/Case/Model/Reservation/ValidateTest.php
+++ /dev/null
@@ -1,82 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsValidateTest', 'NetCommons.TestSuite');
-App::uses('ReservationFixture', 'Reservations.Test/Fixture');
-
-/**
- * ReservationFrameSetting::validate()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\Reservation
- */
-class ReservationValidateTest extends NetCommonsValidateTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'Reservation';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'validates';
-
-/**
- * ValidationErrorのDataProvider
- *
- * ### 戻り値
- * - data 登録データ
- * - field フィールド名
- * - value セットする値
- * - message エラーメッセージ
- * - overwrite 上書きするデータ(省略可)
- *
- * @return array テストデータ
- */
- public function dataProviderValidationError() {
- $data['Reservation'] = (new ReservationFixture())->records[0];
-
- return array(
- array('data' => $data, 'field' => 'block_key', 'value' => '',
- 'message' => __d('net_commons', 'Invalid request.')),
- );
- }
-
-}
diff --git a/Test/Case/Model/ReservationActionPlan/GetProcModeOriginRepeatAndModTypeTest.php b/Test/Case/Model/ReservationActionPlan/GetProcModeOriginRepeatAndModTypeTest.php
deleted file mode 100644
index 761c923..0000000
--- a/Test/Case/Model/ReservationActionPlan/GetProcModeOriginRepeatAndModTypeTest.php
+++ /dev/null
@@ -1,299 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsGetTest', 'NetCommons.TestSuite');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component'); //constを使うため
-//App::uses('ReservationEventFixture', 'Reservations.Test/Fixture');
-
-/**
- * ReservationActionPlan::getProcModeOriginRepeatAndModType()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationActionPlan
- */
-class ReservationActionPlanGetProcModeOriginRepeatAndModTypeTest extends NetCommonsGetTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationActionPlan';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'getProcModeOriginRepeatAndModType';
-
-/**
- * テストDataの取得
- *
- * @param string $key key
- * @return array
- */
- private function __getData($key = 'key_1') {
- $frameId = '6';
- $blockId = '2';
- $blockKey = 'block_1';
-
- $data = array(
- 'save_1' => '',
- 'Frame' => array(
- 'id' => $frameId,
- 'room_id' => '2', //?
- 'language_id' => 2, //?
- 'plugin_key' => 'reservations', //?
- ),
- 'Block' => array(
- 'id' => $blockId,
- 'key' => $blockKey,
- //'language_id' => '2',
- //'room_id' => '1',
- //'plugin_key' => $this->plugin,
- ),
- 'ReservationActionPlan' => array(
- //'key' => 'aaa',
- 'status' => 2,
- 'origin_event_id' => 0,
- 'origin_event_key' => '',
- 'origin_event_recurrence' => 0,
- 'origin_event_exception' => 0,
- 'origin_rrule_id' => 1,
- 'origin_rrule_key' => 'aaa',
- 'origin_num_of_event_siblings' => 0,
- 'first_sib_event_id' => 0,
- 'first_sib_year' => 2016,
- 'first_sib_month' => 7,
- 'first_sib_day' => 28,
- 'easy_start_date' => '',
- 'easy_hour_minute_from' => '',
- 'easy_hour_minute_to' => '',
- 'is_detail' => 1,
- 'title_icon' => '',
- 'title' => 'test3',
- 'enable_time' => 0,
- 'detail_start_datetime' => '2016-07-28',
- 'detail_end_datetime' => '2016-07-28',
- 'is_repeat' => 0,
- 'repeat_freq' => 'DAILY',
- 'rrule_interval' => array(
- 'DAILY' => 1,
- 'WEEKLY' => 1,
- 'MONTHLY' => 1,
- 'YEARLY' => 1,
- ),
- 'rrule_byday' => array(
- 'WEEKLY' => array(
- '0' => 'TH',
- ),
- 'MONTHLY' => '',
- 'YEARLY' => '',
- ),
- 'rrule_bymonthday' => array(
- 'MONTHLY' => '',
- ),
- 'rrule_bymonth' => array(
- 'YEARLY' => array(
- '0' => 7,
- ),
- ),
- 'rrule_term' => 'COUNT',
- 'rrule_count' => 3,
- 'rrule_until' => '2016-07-28',
- 'plan_room_id' => '2',
- 'enable_email' => 0,
- 'email_send_timing' => 5,
- 'location' => '',
- 'contact' => '',
- 'description' => '',
- 'timezone' => 'Asia/Tokyo',
- ),
- 'ReservationActionPlanForDisp' => array(
- 'detail_start_datetime' => '2016-07-28 11:00',
- 'detail_end_datetime' => '2016-07-28',
- ),
- 'WorkflowComment' => array(
- //'comment' => 'WorkflowComment save test'
- 'comment' => '',
- ),
- );
-
- return $data;
- }
-
-/**
- * テストEventDataの取得
- *
- * @param string $key key
- * @return array
- */
- private function __getEventData($key = 'key_1') {
- $eventData = array(
- 'ReservationEvent' => array(
- 'id' => 49,
- 'timezone' => 9.0,
- 'enable_time' => 0,
- 'dtstart' => '20160630150000',
- 'dtend' => '20160701150000',
- ),
- 'ReservationRrule' => array(
- 'id' => 1,
- 'rrule' => 'FREQ=DAILY;INTERVAL=1;COUNT=3',
- ),
- );
- return $eventData;
- }
-
-/**
- * getProcModeOriginRepeatAndModType()のテスト
- *
- * @param array $data data
- * @param array $originEvent
- * @param int $userId ユーザーID
- * @param mix $expect 期待値
- * @dataProvider dataProviderGet
- * @return void
- */
- public function testGetProcModeOriginRepeatAndModType($data, $originEvent, $userId, $expect) {
- $model = $this->_modelName;
- $methodName = $this->_methodName;
- $testCurrentData = array(
- 'Frame' => array(
- 'key' => 'frame_3',
- 'room_id' => '2',
- 'language_id' => 2,
- 'plugin_key' => 'reservations',
- ),
- 'Language' => array(
- 'id' => 1,
- ),
- 'Room' => array(
- 'id' => '2',
- ),
- 'User' => array(
- 'id' => $userId,
- ),
- 'Permission' => array(
- ),
- );
- Current::$current = Hash::merge(Current::$current, $testCurrentData);
-
- // 施設予約権限設定情報確保
- $testRoomInfos = array(
- 'roomInfos' => array(
- '2' => array(
- 'role_key' => 'room_administrator',
- 'use_workflow' => '',
- 'content_publishable_value' => 0,
- 'content_editable_value' => 0,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
-
- //テスト実施
- $result = $this->$model->$methodName($data, $originEvent);
-
- //チェック
- $this->assertEqual($result, $expect);
- }
-
-/**
- * GetのDataProvider
- *
- * ### 戻り値
- * - data 登録データ
- *
- * @return void
- */
- public function dataProviderGet() {
- $data1 = $this->__getData();
- $data2 = $this->__getData();
-
- $data3 = $this->__getData();
- $data3['ReservationActionPlan']['origin_num_of_event_siblings'] = 2;
-
- $data4 = $this->__getData();
- $data4['ReservationActionPlan']['origin_event_id'] = 1;
-
- $data5 = $this->__getData();
- $data5['ReservationActionPlan']['origin_event_id'] = 1;
- $data5['ReservationActionPlan']['timezone'] = 'Asia/Bangkok'; //timezoneの変更
-
- $data6 = $this->__getData();
- $data6['ReservationActionPlan']['origin_event_id'] = 1;
- $data6['ReservationActionPlan']['enable_time'] = 1; //期間・時間の指定(編集)
- $data6['ReservationActionPlan']['detail_start_datetime'] = '2016-07-01 00:00';
- $data6['ReservationActionPlan']['detail_end_datetime'] = '2016-07-12 00:00';
-
- $data7 = $this->__getData();
- $data7['ReservationActionPlan']['repeat_freq'] = 'WEEKYL';
- $data7['ReservationActionPlan']['is_repeat'] = 1;
- $data7['ReservationActionPlan']['origin_event_id'] = 10;
- $data7['ReservationActionPlan']['rrule_term'] = 'UNTIL';
- $data7['ReservationActionPlan']['rrule_until'] = '2018-01-01';
-
- $originEvent1 = array();
- $originEvent2 = $this->__getEventData();
- $originEvent3 = $this->__getEventData();
- $originEvent4 = $this->__getEventData();
- $originEvent5 = $this->__getEventData();
- $originEvent6 = $this->__getEventData();
- $originEvent7 = $this->__getEventData();
-
- //list($procMode, $isOriginRepeat, $isTimeMod, $isRepeatMod)
- $expect1 = array(0 => ReservationsComponent::PLAN_ADD, 1 => false, 2 => false, 3 => false);
- $expect2 = array(0 => ReservationsComponent::PLAN_ADD, 1 => false, 2 => true, 3 => true);
- $expect3 = array(0 => ReservationsComponent::PLAN_ADD, 1 => true, 2 => true, 3 => true);
- $expect4 = array(0 => ReservationsComponent::PLAN_EDIT, 1 => false, 2 => true, 3 => true);
- $expect5 = array(0 => ReservationsComponent::PLAN_EDIT, 1 => false, 2 => true, 3 => true);
- $expect6 = array(0 => ReservationsComponent::PLAN_EDIT, 1 => false, 2 => true, 3 => true);
- $expect7 = array(0 => ReservationsComponent::PLAN_EDIT, 1 => false, 2 => true, 3 => true);
-
- return array(
- array($data1, $originEvent1, 1, $expect1), //originEventがEmpty
- array($data2, $originEvent2, 1, $expect2), //時間変更あり、繰り返し変更あり
- array($data3, $originEvent3, 1, $expect3), //元データが繰り返し
- array($data4, $originEvent4, 1, $expect4), //EDIT
- array($data5, $originEvent5, 1, $expect5), //EDIT(time zoneが変更されている)
- array($data6, $originEvent6, 1, $expect6), //EDIT(時間の指定)
- array($data7, $originEvent7, 1, $expect7), //EDIT
- );
- }
-
-}
diff --git a/Test/Case/Model/ReservationActionPlan/SaveReservationPlanTest.php b/Test/Case/Model/ReservationActionPlan/SaveReservationPlanTest.php
deleted file mode 100644
index 0500e7b..0000000
--- a/Test/Case/Model/ReservationActionPlan/SaveReservationPlanTest.php
+++ /dev/null
@@ -1,542 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-//App::uses('NetCommonsSaveTest', 'NetCommons.TestSuite');
-App::uses('NetCommonsModelTestCase', 'NetCommons.TestSuite');
-//App::uses('ReservationFrameSettingFixture', 'Reservations.Test/Fixture');
-//App::uses('ReservationFrameSettingSelectRoomFixture', 'Reservations.Test/Fixture');
-
-/**
- * ReservationActionPlan::saveReservationPlan()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationActionPlan
- */
-class ReservationActionPlanSaveReservationPlanTest extends NetCommonsModelTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationActionPlan';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'saveReservationPlan';
-
-/**
- * テストDataの取得
- *
- * @param string $blockKey key
- * @return array
- */
- private function __getData($blockKey = 'block_1') {
- $frameId = '6';
- $blockId = '2';
-
- $data = array(
- 'save_1' => '',
- 'Frame' => array(
- 'id' => $frameId,
- 'room_id' => '2', //?
- //'language_id' => 2, //?
- 'plugin_key' => 'reservations', //?
- ),
- 'Block' => array(
- 'id' => $blockId,
- 'key' => $blockKey,
- //'language_id' => '2',
- //'room_id' => '1',
- //'plugin_key' => $this->plugin,
- ),
- 'ReservationActionPlan' => array(
- //'key' => 'aaa',
- 'status' => 1,
- 'origin_event_id' => 0,
- 'origin_event_key' => '',
- 'origin_event_recurrence' => 0,
- 'origin_event_exception' => 0,
- 'origin_rrule_id' => 1,
- 'origin_rrule_key' => 'aaa',
- 'origin_num_of_event_siblings' => 0,
- 'first_sib_event_id' => 0,
- 'first_sib_year' => 2016,
- 'first_sib_month' => 7,
- 'first_sib_day' => 28,
- 'easy_start_date' => '',
- 'easy_hour_minute_from' => '',
- 'easy_hour_minute_to' => '',
- 'is_detail' => 1,
- 'title_icon' => '',
- 'title' => 'test3',
- 'enable_time' => 0,
- 'detail_start_datetime' => '2016-07-28',
- 'detail_end_datetime' => '2016-07-28',
- 'is_repeat' => 0,
- 'repeat_freq' => 'DAILY',
- 'rrule_interval' => array(
- 'DAILY' => 1,
- 'WEEKLY' => 1,
- 'MONTHLY' => 1,
- 'YEARLY' => 1,
- ),
- 'rrule_byday' => array(
- 'WEEKLY' => array(
- '0' => 'TH',
- ),
- 'MONTHLY' => '',
- 'YEARLY' => '',
- ),
- 'rrule_bymonthday' => array(
- 'MONTHLY' => '',
- ),
- 'rrule_bymonth' => array(
- 'YEARLY' => array(
- '0' => 7,
- ),
- ),
- 'rrule_term' => 'COUNT',
- 'rrule_count' => 3,
- 'rrule_until' => '2016-07-28',
- 'plan_room_id' => '2',
- 'enable_email' => 0,
- 'email_send_timing' => 5,
- 'location' => '',
- 'contact' => '',
- 'description' => '',
- 'timezone' => 'Asia/Tokyo',
- ),
- 'ReservationActionPlanForDisp' => array(
- 'detail_start_datetime' => '2016-07-28 11:00',
- 'detail_end_datetime' => '2016-07-28',
- ),
- 'WorkflowComment' => array(
- //'comment' => 'WorkflowComment save test'
- 'comment' => '',
- ),
- );
-
- return $data;
- }
-
-/**
- * Save用DataProvider
- *
- * ### 戻り値
- * - data 登録データ
- *
- * @return array テストデータ
- */
- public function dataProviderSave() {
- $data1 = $this->__getData();
- $data1['ReservationActionPlan']['detail_end_datetime'] = '2016-07-29'; //終了が翌日の場合
-
- $data2 = $this->__getData(); //期限指定
- $data2['ReservationActionPlan']['is_repeat'] = 1;
- $data2['ReservationActionPlan']['rrule_term'] = 'UNTIL';
-
- $data2Edit = $data2;
- $data2Edit['ReservationActionPlan']['origin_event_id'] = 1;
- $data2Edit['ReservationActionPlan']['origin_event_key'] = 'reservationplan1';
- $data2Edit['ReservationActionPlan']['plan_room_id'] = 2;
-
- $data3 = $this->__getData();
- $data3['ReservationActionPlan']['is_repeat'] = 1;
- $data3['ReservationActionPlan']['repeat_freq'] = 'WEEKLY';
-
- $data4 = $this->__getData(); //繰り返し月(曜日指定)
- $data4['ReservationActionPlan']['is_repeat'] = 1;
- $data4['ReservationActionPlan']['repeat_freq'] = 'MONTHLY';
- $data4['ReservationActionPlan']['rrule_byday']['MONTHLY'] = '-1WE'; //
-
- $data4p = $this->__getData(); //繰り返し月(曜日指定)
- $data4p['ReservationActionPlan']['is_repeat'] = 1;
- $data4p['ReservationActionPlan']['repeat_freq'] = 'MONTHLY';
- $data4p['ReservationActionPlan']['rrule_byday']['MONTHLY'] = '1WE'; //
-
- $data5 = $this->__getData(); //繰り返し月(日付指定)
- $data5['ReservationActionPlan']['is_repeat'] = 1;
- $data5['ReservationActionPlan']['repeat_freq'] = 'MONTHLY';
- $data5['ReservationActionPlan']['rrule_bymonthday']['MONTHLY'] = 20; //
-
- $data6 = $this->__getData(); //繰り返し年
- $data6['ReservationActionPlan']['is_repeat'] = 1;
- $data6['ReservationActionPlan']['repeat_freq'] = 'YEARLY';
-
- $data7 = $this->__getData(); //繰り返し年(開始日と同日)
- $data7['ReservationActionPlan']['is_repeat'] = 1;
- $data7['ReservationActionPlan']['repeat_freq'] = 'YEARLY';
- $data7['ReservationActionPlan']['rrule_byday']['WEEKLY']['0'] = 'MO';
-
- $data8 = $this->__getData(); //時刻指定あり
- $data8['ReservationActionPlan']['enable_time'] = 1;
- $data8['ReservationActionPlan']['detail_start_datetime'] = '2016-07-28 11:10';
- $data8['ReservationActionPlan']['detail_end_datetime'] = '2016-07-30 11:12';
-
- //$data9 = $this->__getData(); //繰り返し(不明)
- //$data9['ReservationActionPlan']['is_repeat'] = 1;
- //$data9['ReservationActionPlan']['repeat_freq'] = 'NONE';
-
- //$data10 = $this->__getData(); //期限指定
- //$data10['ReservationActionPlan']['is_repeat'] = 1;
- //$data10['ReservationActionPlan']['rrule_term'] = 'UNTIL';
- //$data10['ReservationActionPlan']['rrule_until'] = '2018-01-01';
-
- $data10 = $this->__getData(); //期限指定
- $data10['ReservationActionPlan']['is_repeat'] = 1;
- $data10['ReservationActionPlan']['rrule_term'] = 'UNTIL';
- $data10['ReservationActionPlan']['rrule_until'] = '20180101'; //フォーマット不正
- $results = array();
- // * 編集の登録処理
- $results[0] = array($data1, 'add'); //リピートなし
- //$results[1] = array($data1, 'edit'); //リピートなし(edit)
- //$results[1] = array($data2Edit, 'edit'); //リピートあり(edit)
-
- $results[2] = array($data2, 'add'); //リピートあり DAILY
- $results[3] = array($data3, 'add'); //リピートあり WEEKLY
- $results[4] = array($data4, 'add'); //リピートあり MONTHLY(BYDAY)
- $results[5] = array($data4, 'add'); //リピートあり MONTHLY(BYDAY)
-
- $results[5] = array($data5, 'add'); //リピートあり MONTHLY(BYDAY)
- $results[6] = array($data6, 'add'); //リピートあり YEARLY
- $results[7] = array($data7, 'add'); //リピートあり YEARLY(開始日と同日)
- $results[8] = array($data8, 'add'); //時刻指定あり
- $results[9] = array($data4p, 'add');//リピートあり MONTHLY(BYDAY)(WEEKがプラス)
-
- $results[10] = array($data10, 'add'); //時刻フォーマット不正
- //$results[9] = array($data9, 'add'); //リピートあり NONE
- //pending Error Undefined index: FREQ
- //var/www/app/app/Plugin/Reservations/Model/Behavior/ReservationRruleEntryBehavior.php:127
- //$results[10] = array($data10, 'add'); //リピートあり DAILY(MAX OVER) (coverate report作成されない、Controller側から試験)
-
- return $results;
- }
-
-/**
- * SaveのExceptionError用DataProvider
- *
- * ### 戻り値
- * - data 登録データ
- * - mockModel Mockのモデル
- * - mockMethod Mockのメソッド
- *
- * @return array テストデータ
- */
- public function dataProviderSaveOnExceptionError() {
- $data = $this->__getData();
-
- $editKey = array(
- 'ReservationActionPlan' => array(
- 'key' => 'reservationplan1',
- ),
- );
-
- $editData = Hash::merge($data, $editKey);
-
- return array(
- array($data, 'Reservations.ReservationEvent', 'save', 'add'),
- array($editData, 'Reservations.ReservationEvent', 'save', 'edit'),
- array($data, 'Reservations.ReservationRrule', 'save', 'edit'),
-
- );
- }
-
-/**
- * SaveのValidationError用DataProvider
- *
- * ### 戻り値
- * - data 登録データ
- * - mockModel Mockのモデル
- * - mockMethod Mockのメソッド(省略可:デフォルト validates)
- *
- * @return array テストデータ
- */
- public function dataProviderSaveOnValidationError() {
- $data = $this->__getData();
-
- $data2 = $this->__getData();
- $data2['ReservationActionPlan']['timezone'] = 'aaa/bbb';
-
- $data3 = $this->__getData();
- unset($data3['save_1']);
- $data3['ReservationActionPlan']['origin_event_id'] = 1;
- $data3['ReservationActionPlan']['origin_event_key'] = 'reservationplan1';
-
- $data4 = $this->__getData();
- unset($data4['save_1']);
- $data4['save_0'] = '';
-
- $data5 = $this->__getData('xxx');
-
- $data6 = $this->__getData();
- $data6['ReservationActionPlan']['is_repeat'] = 1;
- $data6['ReservationActionPlan']['rrule_term'] = 'UNTIL';
-
- $editKey = array(
- 'ReservationActionPlan' => array(
- 'key' => 'reservationplan1',
- ),
- );
-
- $editData = Hash::merge($data, $editKey);
-
- return array(
- array($editData, 'Reservations.ReservationEvent', 'validates', 'InternalErrorException', 'edit'),
- array($data, 'Reservations.ReservationEvent', 'validates', 'InternalErrorException', 'add'),
- array($data, 'Reservations.ReservationRrule', 'validates', 'InternalErrorException', 'edit'),
- array($data2, 'Reservations.ReservationActionPlan', '', 'InternalErrorException', 'edit'), //timezoneでエラー
- //array($data3, 'Reservations.ReservationActionPlan', '', 'InternalErrorException', 'add'), //save_でエラー(add) pending 2016.08.04
- array($data3, 'Reservations.ReservationActionPlan', '', 'InternalErrorException', 'edit'), //save_でエラー(edit)
- //array($data4, 'Reservations.ReservationActionPlan', '', 'InternalErrorException', 'add'), //save_でエラー(add) pending 2016.08.04
- array($data5, 'Reservations.ReservationActionPlan', '', 'InternalErrorException', 'edit'), //block_keyに対応するblockなしでエラー
- array($data6, 'Reservations.ReservationRrule', 'validates', 'InternalErrorException', 'add'),
- array($data6, 'Reservations.ReservationRrule', 'save', 'InternalErrorException', 'add'),
- );
- }
-
-/**
- * Saveのテスト
- *
- * @param array $data 登録データ
- * @param string $procMode モード
- * @dataProvider dataProviderSave
- * @return void
- */
- public function testSave($data, $procMode) {
- $model = $this->_modelName;
- $method = $this->_methodName;
-
- $testCurrentData = array(
- 'Frame' => array(
- 'key' => 'frame_3',
- 'room_id' => '2',
- 'language_id' => 2,
- 'plugin_key' => 'reservations',
- ),
- 'Language' => array(
- 'id' => 2,
- ),
- 'Room' => array(
- 'id' => '2',
- ),
- 'User' => array(
- 'id' => 1, //システム管理者
- ),
- 'Permission' => array(
- ),
- );
- Current::$current = Hash::merge(Current::$current, $testCurrentData);
-
- // 施設予約権限設定情報確保
- $testRoomInfos = array(
- 'roomInfos' => array(
- '2' => array(
- 'role_key' => 'room_administrator',
- 'use_workflow' => '',
- 'content_publishable_value' => 1,
- 'content_editable_value' => 1,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
-
- //チェック用データ取得
- //$procMode = 'add';
- $isOriginRepeat = '';
- $isTimeMod = '';
- $isRepeatMod = '';
- $createdUserWhenUpd = 1;
- $myself = 1;
-
- //モック設定
- $this->_mockForReturnTrue($model, 'Reservations.ReservationActionPlan', 'saveReservationTopics', 1);
- if ($data['ReservationActionPlan']['title'] == 'testdata7') {
- //$this->setExpectedException('InternalErrorException');
- $this->_mockForReturnFalse($model, 'Reservations.ReservationRrule', 'find', 1);
- }
-
- //CalenarActionPlanモデルの繰返し回数超過フラグをoffにしておく。
- $this->$model->isOverMaxRruleIndex = false;
-
- //テスト実行
- $result = $this->$model->$method($data, $procMode, $isOriginRepeat, $isTimeMod, $isRepeatMod, $createdUserWhenUpd, $myself);
- //print_r($this->$model->validationErrors);
-
- $this->assertNotEmpty($result);
- }
-
-/**
- * SaveのValidationErrorテスト
- *
- * @param array $data 登録データ
- * @param string $mockModel Mockのモデル
- * @param string $mockMethod Mockのメソッド
- * @param string $exception exceptionエラー
- * @param string $procMode モード
- * @dataProvider dataProviderSaveOnValidationError
- * @return void
- */
- public function testSaveOnValidationError($data, $mockModel, $mockMethod = 'validates', $exception = null, $procMode = 'edit') {
- $model = $this->_modelName;
- $method = $this->_methodName;
-
- $testCurrentData = array(
- 'Frame' => array(
- 'key' => 'frame_3',
- 'room_id' => '2',
- 'language_id' => 2,
- 'plugin_key' => 'reservations',
- ),
- 'Language' => array(
- 'id' => 2,
- ),
- 'Room' => array(
- 'id' => '2',
- ),
- 'User' => array(
- 'id' => 1,
- ),
- 'Permission' => array(
- ),
- );
- Current::$current = Hash::merge(Current::$current, $testCurrentData);
-
- // 施設予約権限設定情報確保
- $testRoomInfos = array(
- 'roomInfos' => array(
- '2' => array(
- 'role_key' => 'room_administrator',
- 'use_workflow' => '',
- 'content_publishable_value' => 1,
- 'content_editable_value' => 1,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
-
- if ($exception != null) {
- $this->setExpectedException($exception);
- }
-
- if ($mockMethod != null) {
- $this->_mockForReturnFalse($model, $mockModel, $mockMethod);
- }
-
- //$procMode = $procMode;
- $isOriginRepeat = '';
- $isTimeMod = '';
- $isRepeatMod = '';
- $createdUserWhenUpd = 1;
- $myself = 1;
-
- //テスト実行
- $result = $this->$model->$method($data, $procMode, $isOriginRepeat, $isTimeMod, $isRepeatMod, $createdUserWhenUpd, $myself);
- $this->assertFalse($result);
- }
-
-/**
- * SaveのExceptionErrorテスト
- *
- * @param array $data 登録データ
- * @param string $mockModel Mockのモデル
- * @param string $mockMethod Mockのメソッド
- * @param string $procMode モード
- * @dataProvider dataProviderSaveOnExceptionError
- * @return void
- */
- public function testSaveOnExceptionError($data, $mockModel, $mockMethod, $procMode) {
- $model = $this->_modelName;
- $method = $this->_methodName;
-
- $testCurrentData = array(
- 'Frame' => array(
- 'key' => 'frame_3',
- 'room_id' => '2',
- 'language_id' => 2,
- 'plugin_key' => 'reservations',
- ),
- 'Language' => array(
- 'id' => 2,
- ),
- 'Room' => array(
- 'id' => '2',
- ),
- 'User' => array(
- 'id' => 1,
- ),
- 'Permission' => array(
- ),
- );
- Current::$current = Hash::merge(Current::$current, $testCurrentData);
-
- // 施設予約権限設定情報確保
- $testRoomInfos = array(
- 'roomInfos' => array(
- '2' => array(
- 'role_key' => 'room_administrator',
- 'use_workflow' => '',
- 'content_publishable_value' => 1,
- 'content_editable_value' => 1,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
-
- $this->_mockForReturnFalse($model, $mockModel, $mockMethod);
-
- $this->setExpectedException('InternalErrorException');
-
- //$procMode = $procMode;
- $isOriginRepeat = '';
- $isTimeMod = '';
- $isRepeatMod = '';
- $createdUserWhenUpd = 1;
- $myself = 1;
-
- //テスト実行
- $result = $this->$model->$method($data, $procMode, $isOriginRepeat, $isTimeMod, $isRepeatMod, $createdUserWhenUpd, $myself);
- //print_r($this->$model->ReservationEvent->validationErrors);
- $this->assertFalse($result);
- }
-
-}
diff --git a/Test/Case/Model/ReservationActionPlan/ValidateTest.php b/Test/Case/Model/ReservationActionPlan/ValidateTest.php
deleted file mode 100644
index 770e4fa..0000000
--- a/Test/Case/Model/ReservationActionPlan/ValidateTest.php
+++ /dev/null
@@ -1,351 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsValidateTest', 'NetCommons.TestSuite');
-//App::uses('ReservationFrameSettingFixture', 'Reservations.Test/Fixture');
-//App::uses('ReservationFrameSettingSelectRoomFixture', 'Reservations.Test/Fixture');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component'); //constを使うため
-
-/**
- * ReservationActionPlan::validate()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationActionPlan
- */
-class ReservationActionPlanValidateTest extends NetCommonsValidateTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationActionPlan';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'validates';
-
-/**
- * テストDataの取得
- *
- * @param string $key key
- * @return array
- */
- private function __getData($key = 'key_1') {
- $frameId = '6';
- $blockId = '2';
- $blockKey = 'block_1';
-
- $data = array(
- 'Frame' => array(
- 'id' => $frameId,
- ),
- 'Block' => array(
- 'id' => $blockId,
- 'key' => $blockKey,
- ),
- 'ReservationActionPlan' => array(
- 'origin_event_id' => 0,
- 'origin_event_key' => '',
- 'origin_event_recurrence' => 0,
- 'origin_event_exception' => 0,
- 'origin_rrule_id' => 0,
- 'origin_rrule_key' => '',
- 'origin_num_of_event_siblings' => 0,
- 'first_sib_event_id' => 0,
- 'first_sib_year' => 2016,
- 'first_sib_month' => 7,
- 'first_sib_day' => 28,
- 'easy_start_date' => '',
- 'easy_hour_minute_from' => '',
- 'easy_hour_minute_to' => '',
- 'is_detail' => 1,
- 'title_icon' => '',
- 'title' => 'test3',
- 'enable_time' => 0,
- 'detail_start_datetime' => '2016-07-28',
- 'detail_end_datetime' => '2016-07-28',
- 'is_repeat' => 0,
- 'repeat_freq' => 'DAILY',
- 'rrule_interval' => array(
- 'DAILY' => 1,
- 'WEEKLY' => 1,
- 'MONTHLY' => 1,
- 'YEARLY' => 1,
- ),
- 'rrule_byday' => array(
- 'WEEKLY' => array(
- '0' => 'TH',
- ),
- 'MONTHLY' => '',
- 'YEARLY' => '',
- ),
- 'rrule_bymonthday' => array(
- 'MONTHLY' => '',
- ),
- 'rrule_bymonth' => array(
- 'YEARLY' => array(
- '0' => 7,
- ),
- ),
- 'rrule_term' => 'COUNT',
- 'rrule_count' => 3,
- 'rrule_until' => '2016-07-28',
- 'plan_room_id' => '2',
- 'enable_email' => 0,
- 'email_send_timing]' => 5,
- 'location' => '',
- 'contact' => '',
- 'description' => '',
- 'timezone' => 'Asia/Tokyo',
- ),
- 'ReservationActionPlanForDisp' => array(
- 'detail_start_datetime' => '2016-07-28 11:00',
- 'detail_end_datetime' => '2016-07-28',
- ),
- 'WorkflowComment' => array(
- 'comment' => 'WorkflowComment save test'
- ),
- );
-
- return $data;
- }
-
-/**
- * Validatesのテスト
- *
- * @param array $data 登録データ
- * @param string $field フィールド名
- * @param string $value セットする値
- * @param string $message エラーメッセージ
- * @param array $overwrite 上書きするデータ
- * @dataProvider dataProviderValidationError
- * @return void
- */
- public function testValidationError($data, $field, $value, $message, $overwrite = array()) {
- $model = $this->_modelName;
-
- $testCurrentData = array(
- 'Frame' => array(
- 'key' => 'frame_3',
- 'room_id' => '2',
- 'language_id' => 2,
- 'plugin_key' => 'reservations',
- ),
- 'Language' => array(
- 'id' => 2
- ),
- );
- Current::$current = Hash::merge(Current::$current, $testCurrentData);
- // 施設予約権限設定情報確保
- $testRoomInfos = array(
- 'roomInfos' => array(
- '1' => array(
- 'role_key' => 'room_administrator',
- 'use_workflow' => '',
- 'content_publishable_value' => 1,
- 'content_editable_value' => 1,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
- if (is_null($value)) {
- unset($data[$model][$field]);
- } else {
- $data[$model][$field] = $value;
- }
- $data = Hash::merge($data, $overwrite);
-
- //validate処理実行
- $this->$model->set($data);
- $result = $this->$model->validates();
- $this->assertFalse($result);
-
- if ($message) {
- $this->assertEquals($this->$model->validationErrors[$field][0], $message);
- }
- }
-
-/**
- * ValidationErrorのDataProvider
- *
- * ### 戻り値
- * - data 登録データ
- * - field フィールド名
- * - value セットする値
- * - message エラーメッセージ
- * - overwrite 上書きするデータ(省略可)
- *
- * @return array テストデータ
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function dataProviderValidationError() {
- $data = $this->__getData();
- $data2 = $data;
- $data2['ReservationActionPlan']['detail_start_datetime'] = '2016-07-28';
- $data2['ReservationActionPlan']['detail_start_datetime'] = '2016-07-28';
- $data3 = $data;
- $data3['ReservationActionPlan']['is_repeat'] = true;
- $data4 = $data;
- $data4['ReservationActionPlan']['detail_start_datetime'] = '2016-07-28 12:12';
- $data4['ReservationActionPlan']['detail_start_datetime'] = '2016-07-28 22:22';
- $data5 = $data;
- $data5['ReservationActionPlan']['is_detail'] = false;
- $data5['ReservationActionPlan']['enable_time'] = true;
- $data5['ReservationActionPlan']['easy_start_date'] = '2017-01-01';
- $data5['ReservationActionPlan']['easy_hour_minute_to'] = '2017-02-02 22:22:00';
- $data5['ReservationActionPlan']['easy_hour_minute_from'] = '2017-02-02 22:23:12';
- $data6 = $data5;
- $data6['ReservationActionPlan']['is_detail'] = true;
- $data7 = $data5;
- $data7['ReservationActionPlan']['enable_time'] = 0;
- $data8 = $data5;
- $data8['ReservationActionPlan']['easy_hour_minute_to'] = '2017-02-02 22:23:20';
- $data8['ReservationActionPlan']['easy_hour_minute_from'] = '2017-02-02 22:23:12';
- $data9 = $data5;
- $data9['ReservationActionPlan']['easy_hour_minute_to'] = '2017-02-02 22:22';
- $data9['ReservationActionPlan']['easy_hour_minute_from'] = '2017-02-02 22:23';
- $data10 = $data5;
- $data10['ReservationActionPlan']['easy_hour_minute_to'] = '2017-01-01 12:22:20';
- $data10['ReservationActionPlan']['easy_hour_minute_from'] = '2017-01-01 12:22:12';
- //週単位
- $data11 = $data;
- $data11['ReservationActionPlan']['is_repeat'] = true;
- $data11['ReservationActionPlan']['repeat_freq'] = 'WEEKLY';
- //月単位
- $data12 = $data;
- $data12['ReservationActionPlan']['is_repeat'] = true;
- $data12['ReservationActionPlan']['rrule_interval']['MONTHLY'] = 1;
- $data12['ReservationActionPlan']['repeat_freq'] = 'MONTHLY';
- $data12['ReservationActionPlan']['rrule_byday']['MONTHLY'] = 1;
- //年単位
- $data13 = $data;
- $data13['ReservationActionPlan']['is_repeat'] = true;
- $data13['ReservationActionPlan']['repeat_freq'] = 'YEARLY';
- $text101 = 'a123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789a';
- $text60000 = ''; //詳細文字制限60000字確認用
- for ($i = 0; $i <= 595; $i++) {
- $text60000 .= $text101;
- }
- return array(
- //beforeValidate
- array('data' => $data, 'field' => 'plan_room_id', 'value' => 'aaa',
- 'message' => __d('reservations', 'Invalid input. (authority)')),
- array('data' => $data, 'field' => 'timezone', 'value' => 'aaa',
- 'message' => __d('reservations', 'Invalid input. (timezone)')),
- array('data' => $data, 'field' => 'is_detail', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (detail)')),
- array('data' => $data, 'field' => 'location', 'value' => $text101,
- 'message' => sprintf(__d('reservations',
- '%d character limited. (location)'), ReservationsComponent::CALENDAR_VALIDATOR_TITLE_LEN)),
- array('data' => $data, 'field' => 'contact', 'value' => $text101,
- 'message' => sprintf(__d('reservations', '%d character limited. (contact)'),
- ReservationsComponent::CALENDAR_VALIDATOR_TITLE_LEN)),
- array('data' => $data, 'field' => 'description', 'value' => $text60000,
- 'message' => sprintf(__d('reservations', '%d character limited. (detail)'),
- ReservationsComponent::CALENDAR_VALIDATOR_TEXTAREA_LEN)),
- //タイトル関連(_doMergeTitleValidat)
- array('data' => $data, 'field' => 'title', 'value' => '',
- 'message' => __d('reservations', 'Invalid input. (plan title)')),
- array('data' => $data, 'field' => 'title', 'value' => $text101,
- 'message' => sprintf(__d('reservations',
- '%d character limited. (plan title)'), ReservationsComponent::CALENDAR_VALIDATOR_TITLE_LEN)),
- array('data' => $data, 'field' => 'title_icon', 'value' => $text101 . $text101 . $text101,
- 'message' => sprintf(__d('reservations',
- '%d character limited. (title icon)'),
- ReservationsComponent::CALENDAR_VALIDATOR_GENERAL_VCHAR_LEN)),
- //日付時刻関連バリデーション
- array('data' => $data4, 'field' => 'enable_time', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (time)')),
- //---(easy指定)-- pending 本ルートは不要
- array('data' => $data5, 'field' => 'enable_time', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (time)')),
- array('data' => $data6, 'field' => 'enable_time', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (time)')),
- array('data' => $data7, 'field' => 'easy_start_date', 'value' => '0',
- 'message' => __d('reservations', 'Invalid input. (year/month/day)')),
- array('data' => $data8, 'field' => 'enable_time', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (time)')),
- array('data' => $data9, 'field' => 'enable_time', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (time)')),
- array('data' => $data10, 'field' => 'enable_time', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (time)')),
- //--(easy end)
- //array('data' => $data, 'field' => 'easy_start_date', 'value' => 'a', //pending不要?
- // 'message' => __d('reservations', 'Invalid input. (time)')),
- //array('data' => $data, 'field' => 'easy_hour_minute_from', 'value' => 'a', //pending不要?
- // 'message' => __d('reservations', 'Invalid input. (start time)(easy edit mode)')),
- //array('data' => $data, 'field' => 'easy_hour_minute_from', 'value' => 'a', //pending不要?
- // 'message' => __d('reservations', 'Invalid input. (start time and end time)(easy edit mode)')),
- //array('data' => $data, 'field' => 'easy_hour_minute_to', 'value' => 'a', //pending不要?
- // 'message' => __d('reservations', 'Invalid input. (end time)')),
- array('data' => $data, 'field' => 'detail_start_datetime', 'value' => '',
- 'message' => __d('reservations', 'Invalid input. (start time)')),
- array('data' => $data2, 'field' => 'detail_start_datetime', 'value' => '2016-07-29',
- 'message' => __d('reservations', 'Invalid input. (start day (time) and end day (time))')),
- array('data' => $data, 'field' => 'detail_end_datetime', 'value' => 'll',
- 'message' => __d('reservations', 'Invalid input. (end date)')),
- //繰返し関連
- array('data' => $data, 'field' => 'edit_rrule', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (change of repetition)')),
- array('data' => $data, 'field' => 'is_repeat', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (repetition)')),
- array('data' => $data11, 'field' => 'is_repeat', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (repetition)')),
- array('data' => $data12, 'field' => 'is_repeat', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (repetition)')),
- //月単位 pending エラーになる
- //↑Indirect modification of overloaded property ReservationActionPlan::$reservationProofreadValidationErrors has no effect
- //var/www/app/app/Plugin/Reservations/Model/Behavior/ReservationValidateAppBehavior.php:178
- array('data' => $data13, 'field' => 'is_repeat', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (repetition)')),
- //array('data' => $data3, 'field' => 'rrule_count', 'value' => '',
- // 'message' => __d('reservations', 'Invalid input. (repetition)')),
- //↑pending errorになる Indirect modification of overloaded property ReservationActionPlan::$reservationProofreadValidationErrors has no effect
- //var/www/app/app/Plugin/Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:42
- //var/www/app/app/Plugin/Reservations/Model/Behavior/ReservationPlanRruleValidateBehavior.php:102
- //array('data' => $data3, 'field' => 'repeat_freq', 'value' => 'a',
- // 'message' => ReservationsComponent::CALENDAR_RRULE_ERROR_HAPPEND), //pending1 ここは__d定義ではないですがよいでしょうか
- //↑pending errorになる⇒Indirect modification of overloaded property ReservationActionPlan::$reservationProofreadValidationErrors has no effect
- ///var/www/app/app/Plugin/Reservations/Model/Behavior/ReservationValidateAppBehavior.php:56
- );
- }
-
-}
diff --git a/Test/Case/Model/ReservationAppModelTest.php b/Test/Case/Model/ReservationAppModelTest.php
deleted file mode 100644
index 046c1ca..0000000
--- a/Test/Case/Model/ReservationAppModelTest.php
+++ /dev/null
@@ -1,141 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsModelTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationLocationReservable', 'Reservations.Model');
-
-/**
- * Summary for ReservationLocationReservable Test Case
- *
- * @property ReservationLocationReservable $ReservationLocationReservable
- */
-final class ReservationAppModelTest extends NetCommonsModelTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.reservation_location_reservable',
- 'plugin.reservations.room4test',
- 'plugin.reservations.roles_room4test',
- 'plugin.reservations.roles_rooms_user4test',
- //'plugin.reservations.user',
- //'plugin.reservations.role',
- 'plugin.reservations.user_role_setting4test',
- //'plugin.reservations.users_language',
- //'plugin.reservations.language'
- );
-
-/**
- * setUp method
- *
- * @return void
- */
- public function setUp() {
- parent::setUp();
- $this->ReservationLocationReservable = ClassRegistry::init('Reservations.ReservationLocationReservable');
- }
-
-/**
- * tearDown method
- *
- * @return void
- */
- public function tearDown() {
- unset($this->ReservationLocationReservable);
-
- parent::tearDown();
- }
-
-/**
- * getReadableRoomIds では参加している全ルームIDが取得される
- *
- * @return void
- */
- public function testGetReadableRoomIds() {
- $userId = 40;
- Current::write('User.id', $userId);
- Current::write('User.role_key', 'general_user');
- Current::write('User.UserRoleSetting.use_private_room', true);
-
- $roomIds = $this->ReservationLocationReservable->getReadableRoomIds();
-
- $expected = [
- '40',
- '41',
- '42',
- ];
- self::assertSame($expected, $roomIds);
- }
-
-/**
- * getReadableRoomIds ではプライベートルームのIDも含まれる
- *
- * @return void
- */
- public function testGetReadableRoomIdsIncludePrivateRoomId() {
- $userId = 40;
- Current::write('User.id', $userId);
- Current::write('User.role_key', 'general_user');
- Current::write('User.UserRoleSetting.use_private_room', true);
-
- $roomIds = $this->ReservationLocationReservable->getReadableRoomIds();
- // room_id:42はプライベートルーム
- self::assertContains('42', $roomIds);
- }
-
-/**
- * getReadableRoomIdsWithOutPrivate ではプライベートルームのIDは含まれない
- *
- * @return void
- */
- public function testGetReadableRoomIdsWithOutPrivateNotIncludePrivateRoomId() {
- $userId = 40;
- Current::write('User.id', $userId);
- Current::write('User.role_key', 'general_user');
- Current::write('User.UserRoleSetting.use_private_room', true);
-
- $roomIds = $this->ReservationLocationReservable->getReadableRoomIdsWithOutPrivate();
-
- $expected = [
- '40',
- '41',
- ];
- self::assertSame($expected, $roomIds);
- }
-
-/**
- * getReadableRoomIds 実行時にプライベートルーム以外のルームIDに対応したロールキーが_roleKeysWithRoomIdに保持される
- *
- * @return void
- * @throws ReflectionException
- */
- public function testRoleKeysWithRoomId() {
- $userId = 40;
- Current::write('User.id', $userId);
- Current::write('User.role_key', 'general_user');
- Current::write('User.UserRoleSetting.use_private_room', true);
-
- $this->ReservationLocationReservable->getReadableRoomIds();
-
- $property = new ReflectionProperty($this->ReservationLocationReservable, '_roleKeysWithRoomId');
- $property->setAccessible(true);
- $value = $property->getValue($this->ReservationLocationReservable);
-
- $expected = [
- '40' => 'chief_editor',
- '41' => 'general_user',
- ];
- self::assertSame($expected, $value);
- }
-}
diff --git a/Test/Case/Model/ReservationDeleteActionPlan/DeleteReservationPlanTest.php b/Test/Case/Model/ReservationDeleteActionPlan/DeleteReservationPlanTest.php
deleted file mode 100644
index 2b77b8e..0000000
--- a/Test/Case/Model/ReservationDeleteActionPlan/DeleteReservationPlanTest.php
+++ /dev/null
@@ -1,277 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsModelTestCase', 'NetCommons.TestSuite');
-
-
-/**
- * ReservationDeleteActionPlan::deleteReservationPlan()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationDeleteActionPlan
- */
-class ReservationDeleteActionPlanDeleteReservationPlanTest extends NetCommonsModelTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationDeleteActionPlan';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'deleteReservationPlan';
-
-/**
- * テストDataの取得
- *
- * @return array
- */
- private function __getData() {
- $data = array(
- 'ReservationDeleteActionPlan' => array(
- 'is_repeat' => 0,
- 'first_sib_event_id' => 1,
- 'origin_event_id' => 1,
- 'is_recurrence' => 0,
- 'edit_rrule' => 0,
- ),
- '_NetCommonsTime' => array(
- 'user_timezone' => 'Asia/Tokyo',
- 'convert_fields' => '',
- ),
- );
-
- return $data;
- }
-
-/**
- * Delete用DataProvider
- *
- * ### 戻り値
- * - data 登録データ
- *
- * @return array テストデータ
- */
- public function dataProviderDelete() {
- $data1 = $this->__getData();
-
- $data2 = $data1;
- $data2['ReservationDeleteActionPlan']['edit_rrule'] = 1; //この日以降の予定を変更(削除)
-
- $data3 = $data1;
- $data3['ReservationDeleteActionPlan']['edit_rrule'] = 2; //この日を含むすべての予定を変更(削除)
-
- $data4 = $data1;
- $data4['ReservationDeleteActionPlan']['edit_rrule'] = 3; //エラー
-
- $results = array();
- // * 編集の登録処理
- $results[0] = array($data1, 1, 'reservationplan1', 1, 0, 'reservationplan1');
- $results[1] = array($data2, 1, 'reservationplan1', 1, 0, 'reservationplan1');
- $results[2] = array($data3, 1, 'reservationplan1', 1, 0, 'reservationplan1');
- $results[3] = array($data4, 1, 'reservationplan1', 1, 0, 'reservationplan1', 'InternalErrorException');
-
- return $results;
- }
-
-/**
- * SaveのExceptionError用DataProvider
- *
- * ### 戻り値
- * - data 登録データ
- * - mockModel Mockのモデル
- * - mockMethod Mockのメソッド
- * - originEventId
- * - originEventKye
- * - originRruleId
- * - isOriginRepeat
- * - expect 期待値
- *
- * @return array テストデータ
- */
- public function dataProviderDeleteOnExceptionError() {
- $data = $this->__getData();
-
- $dataForAll = $data;
- $dataForAll['ReservationDeleteActionPlan']['edit_rrule'] = 2; //この日を含むすべての予定を変更(削除)
-
- $dataAfter = $data;
- $dataAfter['ReservationDeleteActionPlan']['edit_rrule'] = 1; //この日以降の予定を変更(削除)
-
- return array(
- array($data, 'Reservations.ReservationEvent', 'deleteAll', 1, 'reservationplan1', 1, 0),
- array($data, 'Reservations.ReservationRrule', 'delete', 1, 'reservationplan1', 1, 0),
- array($dataForAll, 'Reservations.ReservationEvent', 'deleteAll', 1, 'reservationplan1', 1, 0),
- array($dataForAll, 'Reservations.ReservationRrule', 'delete', 1, 'reservationplan1', 1, 0),
- array($dataAfter, 'Reservations.ReservationEvent', 'deleteAll', 1, 'reservationplan1', 1, 0),
-
- //array($dataForAll, 'Reservations.ReservationRrule', 'delete', 999, 'reservationplanx', 1,0, 1), //存在しない
- //↑pending 存在しないデータを渡すと、ReservationDeletePlanBehavior.phpの関数setCurEventDataAndRruleDataの中で処理が中断されるようです。
-
- );
- }
-
-/**
- * Deleteのテスト
- *
- * @param array $data 登録データ
- * @param int $originEventId
- * @param string $originEventKey
- * @param int $originRruleId
- * @param bool $isOriginRepeat
- * @param int $expect
- * @param string $exception
- * @dataProvider dataProviderDelete
- * @return void
- */
- public function testDelete($data, $originEventId, $originEventKey, $originRruleId, $isOriginRepeat, $expect, $exception = '') {
- $model = $this->_modelName;
- $method = $this->_methodName;
-
- if ($exception != null) {
- $this->setExpectedException($exception);
- }
-
- $testCurrentData = array(
- 'Frame' => array(
- 'key' => 'frame_3',
- 'room_id' => '2',
- 'language_id' => 2,
- 'plugin_key' => 'reservations',
- ),
- 'Language' => array(
- 'id' => 2,
- ),
- 'Room' => array(
- 'id' => '2',
- ),
- 'User' => array(
- 'id' => 1, //システム管理者
- ),
- 'Permission' => array(
- ),
- );
- Current::$current = Hash::merge(Current::$current, $testCurrentData);
-
- // 施設予約権限設定情報確保
- $testRoomInfos = array(
- 'roomInfos' => array(
- '2' => array(
- 'role_key' => 'room_administrator',
- 'use_workflow' => '',
- 'content_publishable_value' => 1,
- 'content_editable_value' => 1,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
-
- //テスト実行
- $result = $this->$model->$method($data, $originEventId, $originEventKey, $originRruleId, $isOriginRepeat);
- //print_r($this->$model->validationErrors);
-
- //$this->assertNotEmpty($result);
- $this->assertEquals($result, $expect);
- }
-
-/**
- * SaveのExceptionErrorテスト
- *
- * @param array $data 登録データ
- * @param string $mockModel Mockのモデル
- * @param string $mockMethod Mockのメソッド
- * @param int $originEventId
- * @param string $originEventKey
- * @param int $originRruleId
- * @param bool $isOriginRepeat
- * @dataProvider dataProviderDeleteOnExceptionError
- * @return void
- */
- public function testDeleteOnExceptionError($data, $mockModel, $mockMethod, $originEventId, $originEventKey, $originRruleId, $isOriginRepeat) {
- $model = $this->_modelName;
- $method = $this->_methodName;
-
- $testCurrentData = array(
- 'Frame' => array(
- 'key' => 'frame_3',
- 'room_id' => '2',
- 'language_id' => 2,
- 'plugin_key' => 'reservations',
- ),
- 'Language' => array(
- 'id' => 2,
- ),
- 'Room' => array(
- 'id' => '2',
- ),
- 'User' => array(
- 'id' => 1,
- ),
- 'Permission' => array(
- ),
- );
- Current::$current = Hash::merge(Current::$current, $testCurrentData);
-
- // 施設予約権限設定情報確保
- $testRoomInfos = array(
- 'roomInfos' => array(
- '2' => array(
- 'role_key' => 'room_administrator',
- 'use_workflow' => '',
- 'content_publishable_value' => 1,
- 'content_editable_value' => 1,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
-
- $this->_mockForReturnFalse($model, $mockModel, $mockMethod);
-
- $this->setExpectedException('InternalErrorException');
-
- //テスト実行
- $result = $this->$model->$method($data, $originEventId, $originEventKey, $originRruleId, $isOriginRepeat);
- $this->assertFalse($result);
- }
-
-}
diff --git a/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php b/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php
deleted file mode 100644
index 0a51840..0000000
--- a/Test/Case/Model/ReservationDeleteActionPlan/ValidateTest.php
+++ /dev/null
@@ -1,115 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsValidateTest', 'NetCommons.TestSuite');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component'); //constを使うため
-
-/**
- * ReservationActionPlan::validate()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationDeleteActionPlan
- */
-class ReservationDeleteActionPlanValidateTest extends NetCommonsValidateTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationDeleteActionPlan';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'validates';
-
-/**
- * テストDataの取得
- *
- * @return array
- */
- private function __getData() {
- $data = array(
- 'ReservationDeleteActionPlan' => array(
- 'is_repeat' => 0,
- 'first_sib_event_id' => 48,
- 'origin_event_id' => 48,
- 'is_recurrence' => 0,
- 'edit_rrule' => 0,
- ),
- '_NetCommonsTime' => array(
- 'user_timezone' => 'Asia/Tokyo',
- 'convert_fields' => '',
- ),
- );
-
- return $data;
- }
-
-/**
- * ValidationErrorのDataProvider
- *
- * ### 戻り値
- * - data 登録データ
- * - field フィールド名
- * - value セットする値
- * - message エラーメッセージ
- * - overwrite 上書きするデータ(省略可)
- *
- * @return array テストデータ
- */
- public function dataProviderValidationError() {
- $data = $this->__getData();
-
- return array(
- //beforeValidate
- array('data' => $data, 'field' => 'edit_rrule', 'value' => 'aaa',
- 'message' => __d('reservations', 'Invalid input. (edit rrule)')),
- array('data' => $data, 'field' => 'is_repeat', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (repeat flag)')),
- array('data' => $data, 'field' => 'first_sib_event_id', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (first sib ebent id)')),
- array('data' => $data, 'field' => 'origin_event_id', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (origin event id)')),
- array('data' => $data, 'field' => 'is_recurrence', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid input. (recurrence flag)')),
- );
- }
-
-}
diff --git a/Test/Case/Model/ReservationEvent/GetEventByIdTest.php b/Test/Case/Model/ReservationEvent/GetEventByIdTest.php
deleted file mode 100644
index cf1600f..0000000
--- a/Test/Case/Model/ReservationEvent/GetEventByIdTest.php
+++ /dev/null
@@ -1,150 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('WorkflowGetTest', 'Workflow.TestSuite');
-App::uses('ReservationEventFixture', 'Reservations.Test/Fixture');
-
-/**
- * ReservationEvent::getEventById()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationEvent
- */
-class ReservationEventGetEventByIdTest extends WorkflowGetTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationEvent';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'getEventById';
-
-/**
- * getEventById()のテスト
- *
- * @param int $id ReservationEventレコードのID
- * @param int $userId ユーザーID
- * @param mix $expect 期待値
- * @dataProvider dataProviderGet
- * @return void
- */
- public function testGetEventById($id, $userId, $expect) {
- $model = $this->_modelName;
- $methodName = $this->_methodName;
- $testCurrentData = array(
- 'Frame' => array(
- 'key' => 'frame_3',
- 'room_id' => '2',
- 'language_id' => 2,
- 'plugin_key' => 'reservations',
- ),
- 'Language' => array(
- 'id' => 1,
- ),
- 'Room' => array(
- 'id' => '2',
- ),
- 'User' => array(
- 'id' => $userId,
- ),
- 'Permission' => array(
- ),
- );
- Current::$current = Hash::merge(Current::$current, $testCurrentData);
-
- // 施設予約権限設定情報確保
- $testRoomInfos = array(
- 'roomInfos' => array(
- '2' => array(
- 'role_key' => 'room_administrator',
- 'use_workflow' => '',
- 'content_publishable_value' => 0,
- 'content_editable_value' => 0,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
-
- //テスト実施
- $result = $this->$model->$methodName($id);
- //チェック
- if ($result == array()) {
- $this->assertEqual($result, $expect);
- } else {
- $expect['is_origin'] = true;
- $expect['is_translation'] = false;
- $expect['is_original_copy'] = false;
- $this->assertEqual($result['ReservationEvent'], $expect);
- }
- }
-
-/**
- * GetのDataProvider
- *
- * ### 戻り値
- * - data 登録データ
- *
- * @return void
- */
- public function dataProviderGet() {
- $expectNotExist = array();
- $expectExist = (new ReservationEventFixture())->records[0];
- $expectExist2 = Hash::merge($expectExist,
- array('pseudo_friend_share_plan' => true, 'is_share' => false));
- $expectExist3 = Hash::merge($expectExist,
- array('pseudo_friend_share_plan' => false, 'is_share' => false));
- $expectExist4 = Hash::merge($expectExist,
- array('pseudo_friend_share_plan' => false, 'is_share' => true));
-
- return array(
- array(999, 1, $expectNotExist), //存在しない
- array(0, 1, $expectNotExist), //存在しない
- array(1, 1, $expectExist2), //存在する(userId = 1)
- array(1, 0, $expectExist3), //存在する(userId = 0)
- array(1, 2, $expectExist4), //存在する(userId = 0)
-
- );
- }
-
-}
diff --git a/Test/Case/Model/ReservationEvent/GetEventByKeyTest.php b/Test/Case/Model/ReservationEvent/GetEventByKeyTest.php
deleted file mode 100644
index f4e3765..0000000
--- a/Test/Case/Model/ReservationEvent/GetEventByKeyTest.php
+++ /dev/null
@@ -1,150 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('WorkflowGetTest', 'Workflow.TestSuite');
-App::uses('ReservationEventFixture', 'Reservations.Test/Fixture');
-
-/**
- * ReservationEvent::getEventById()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationEvent
- */
-class ReservationEventGetEventByKeyTest extends WorkflowGetTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationEvent';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'getEventByKey';
-
-/**
- * getEventByKey()のテスト
- *
- * @param int $key ReservationEventレコードのkey
- * @param int $userId ユーザーID
- * @param mix $expect 期待値
- * @dataProvider dataProviderGet
- * @return void
- */
- public function testGetEventByKey($key, $userId, $expect) {
- $model = $this->_modelName;
- $methodName = $this->_methodName;
- $testCurrentData = array(
- 'Frame' => array(
- 'key' => 'frame_3',
- 'room_id' => '2',
- 'language_id' => 2,
- 'plugin_key' => 'reservations',
- ),
- 'Language' => array(
- 'id' => 1,
- ),
- 'Room' => array(
- 'id' => '2',
- ),
- 'User' => array(
- 'id' => $userId,
- ),
- 'Permission' => array(
- ),
- );
- Current::$current = Hash::merge(Current::$current, $testCurrentData);
-
- // 施設予約権限設定情報確保
- $testRoomInfos = array(
- 'roomInfos' => array(
- '2' => array(
- 'role_key' => 'room_administrator',
- 'use_workflow' => '',
- 'content_publishable_value' => 0,
- 'content_editable_value' => 0,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
-
- //テスト実施
- $result = $this->$model->$methodName($key);
- //チェック
- if ($result == array()) {
- $this->assertEqual($result, $expect);
- } else {
- $expect['is_origin'] = true;
- $expect['is_translation'] = false;
- $expect['is_original_copy'] = false;
- $this->assertEqual($result['ReservationEvent'], $expect);
- }
- }
-
-/**
- * GetのDataProvider
- *
- * ### 戻り値
- * - data 登録データ
- *
- * @return void
- */
- public function dataProviderGet() {
- $expectNotExist = array();
- $expectExist = (new ReservationEventFixture())->records[0];
- $expectExist['is_published'] = true;
- $expectExist2 = Hash::merge($expectExist,
- array('pseudo_friend_share_plan' => true, 'is_share' => false));
- $expectExist3 = Hash::merge($expectExist,
- array('pseudo_friend_share_plan' => false, 'is_share' => false));
- $expectExist4 = Hash::merge($expectExist,
- array('pseudo_friend_share_plan' => false, 'is_share' => true));
- return array(
- array('non', 1, $expectNotExist), //存在しない
- array('', 1, $expectNotExist), //存在しない
- array('reservationplan1', 1, $expectExist2), //存在する(userId = 1)
- array('reservationplan1', 0, $expectExist3), //存在する(userId = 0)
- array('reservationplan1', 2, $expectExist4), //存在する(userId = 2)
-
- );
- }
-
-}
diff --git a/Test/Case/Model/ReservationEvent/GetSiblingsTest.php b/Test/Case/Model/ReservationEvent/GetSiblingsTest.php
deleted file mode 100644
index 9787855..0000000
--- a/Test/Case/Model/ReservationEvent/GetSiblingsTest.php
+++ /dev/null
@@ -1,130 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('WorkflowGetTest', 'Workflow.TestSuite');
-App::uses('ReservationEventFixture', 'Reservations.Test/Fixture');
-
-/**
- * ReservationEvent::getSiblings()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationEvent
- */
-class ReservationEventGetSiblingsTest extends WorkflowGetTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationEvent';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'getSiblings';
-
-/**
- * getSiblings()のテスト
- *
- * @param int $rruleId 最新に限定するかどうか。0:最新に限定しない。1:最新に限定する
- * @param int $needLatest needLatest 最新に限定するかどうか。0:最新に限定しない。1:最新に限定する
- * @param int $languageId 言語ID
- * @param mix $expect 期待値
- * @dataProvider dataProviderGet
- * @return void
- */
- public function testGetSiblings($rruleId, $needLatest, $languageId, $expect) {
- $model = $this->_modelName;
- $methodName = $this->_methodName;
- $testCurrentData = array(
- 'Frame' => array(
- 'key' => 'frame_3',
- 'room_id' => '2',
- 'language_id' => 2,
- 'plugin_key' => 'reservations',
- ),
- 'Language' => array(
- 'id' => 1,
- ),
- 'Room' => array(
- 'id' => '2',
- ),
- 'User' => array(
- 'id' => 1,
- ),
- 'Permission' => array(
- ),
- );
- Current::$current = Hash::merge(Current::$current, $testCurrentData);
-
- //テスト実施
- $eventSiblings = $this->$model->$methodName($rruleId, $needLatest, $languageId);
-
- //チェック
- if ($eventSiblings == array()) {
- $this->assertEqual($eventSiblings, $expect);
- } else {
- $expect['is_origin'] = true;
- $expect['is_translation'] = false;
- $expect['is_original_copy'] = false;
- $this->assertEqual($eventSiblings[0]['ReservationEvent'], $expect);
- }
- }
-
-/**
- * GetのDataProvider
- *
- * ### 戻り値
- * - data 登録データ
- *
- * @return void
- */
- public function dataProviderGet() {
- $expectNotExist = array();
- $expectExist = (new ReservationEventFixture())->records[0];
-
- return array(
- //array(1, true, 22, $expectNotExist), //存在しない
- array(99, true, null, $expectNotExist), //存在しない
- array(1, 0, 2, $expectExist), //存在する
-
- );
- }
-
-}
diff --git a/Test/Case/Model/ReservationEvent/ValidateTest.php b/Test/Case/Model/ReservationEvent/ValidateTest.php
deleted file mode 100644
index 0d1d857..0000000
--- a/Test/Case/Model/ReservationEvent/ValidateTest.php
+++ /dev/null
@@ -1,190 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsValidateTest', 'NetCommons.TestSuite');
-App::uses('ReservationEventFixture', 'Reservations.Test/Fixture');
-
-/**
- * ReservationEvent::validate()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationEvent
- */
-class ReservationEventValidateTest extends NetCommonsValidateTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- 'plugin.rooms.rooms_language4test',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationEvent';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'validates';
-
-/**
- * ValidationErrorのDataProvider
- *
- * ### 戻り値
- * - data 登録データ
- * - field フィールド名
- * - value セットする値
- * - message エラーメッセージ
- * - overwrite 上書きするデータ(省略可)
- *
- * @return array テストデータ
- */
- public function dataProviderValidationError() {
- $data['ReservationEvent'] = (new ReservationEventFixture())->records[0];
-
- return array(
- //beforeValidate
- array('data' => $data, 'field' => 'reservation_rrule_id', 'value' => 'a',
- 'message' => __d('net_commons', 'Invalid request.')),
- //array('data' => $data, 'field' => 'room_id', 'value' => 'a', //pending エラーになりました⇒Undefined index: a /var/www/app/app/Plugin/Reservations/Utility/ReservationPermissiveRooms.php:144
- // 'message' => __d('net_commons', 'Invalid request.')),
- //array('data' => $data, 'field' => 'room_id', 'value' => 'a', //pending エラーになりました⇒Undefined index: a /var/www/app/app/Plugin/Reservations/Utility/ReservationPermissiveRooms.php:144
- // 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'target_user', 'value' => 'a',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'title', 'value' => '',
- 'message' => __d('reservations', 'Please input title text.')),
- array('data' => $data, 'field' => 'is_allday', 'value' => '',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'start_date', 'value' => '1234',
- 'message' => __d('reservations', 'Invalid value.')),
- array('data' => $data, 'field' => 'start_date', 'value' => '11110101',
- 'message' => __d('reservations', 'Out of range value.')),
- array('data' => $data, 'field' => 'start_time', 'value' => '1',
- 'message' => __d('reservations', 'Invalid value.')),
- array('data' => $data, 'field' => 'end_date', 'value' => '1',
- 'message' => __d('reservations', 'Invalid value.')),
- array('data' => $data, 'field' => 'end_date', 'value' => '99990101',
- 'message' => __d('reservations', 'Out of range value.')),
- array('data' => $data, 'field' => 'end_time', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid value.')),
- array('data' => $data, 'field' => 'timezone', 'value' => 'a',
- 'message' => __d('reservations', 'Invalid value.')),
- array('data' => $data, 'field' => 'timezone', 'value' => '-13', //範囲外
- 'message' => __d('reservations', 'Invalid value.')),
- array('data' => $data, 'field' => 'recurrence_event_id', 'value' => 'a',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'exception_event_id', 'value' => 'a',
- 'message' => __d('net_commons', 'Invalid request.')),
-
- // Workflowパラメータ関連バリデーション(_doMergeWorkflowParamValidate)
- array('data' => $data, 'field' => 'language_id', 'value' => 'a',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'status', 'value' => 'a',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'is_active', 'value' => 'a',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'is_latest', 'value' => 'a',
- 'message' => __d('net_commons', 'Invalid request.')),
- );
- }
-
-/**
- * Validatesのテスト
- *
- * @param array $data 登録データ
- * @param string $field フィールド名
- * @param string $value セットする値
- * @param string $message エラーメッセージ
- * @param array $overwrite 上書きするデータ
- * @dataProvider dataProviderValidationError
- * @return void
- */
- public function testValidationError($data, $field, $value, $message, $overwrite = array()) {
- $model = $this->_modelName;
-
- $testCurrentData = array(
- 'Frame' => array(
- 'key' => 'frame_3',
- 'room_id' => '2',
- 'language_id' => 2,
- 'plugin_key' => 'reservations',
- ),
- 'Language' => array(
- 'id' => 2,
- ),
- 'Room' => array(
- 'id' => '2',
- ),
- 'User' => array(
- 'id' => 1,
- ),
- 'Permission' => array(
- ),
- );
- Current::$current = Hash::merge(Current::$current, $testCurrentData);
-
- // 施設予約権限設定情報確保
- $testRoomInfos = array(
- 'roomInfos' => array(
- '2' => array(
- 'role_key' => 'room_administrator',
- 'use_workflow' => '',
- 'content_publishable_value' => 1,
- 'content_editable_value' => 1,
- 'content_creatable_value' => 1,
- ),
- ),
- );
- ReservationPermissiveRooms::$roomPermRoles = Hash::merge(ReservationPermissiveRooms::$roomPermRoles, $testRoomInfos);
-
- if (is_null($value)) {
- unset($data[$model][$field]);
- } else {
- $data[$model][$field] = $value;
- }
- $data = Hash::merge($data, $overwrite);
-
- //validate処理実行
- $this->$model->set($data);
- $result = $this->$model->validates();
- $this->assertFalse($result);
-
- if ($message) {
- $this->assertEquals($this->$model->validationErrors[$field][0], $message);
- }
- }
-
-}
diff --git a/Test/Case/Model/ReservationEventShareUser/ValidateTest.php b/Test/Case/Model/ReservationEventShareUser/ValidateTest.php
deleted file mode 100644
index 30b55c4..0000000
--- a/Test/Case/Model/ReservationEventShareUser/ValidateTest.php
+++ /dev/null
@@ -1,83 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsValidateTest', 'NetCommons.TestSuite');
-//App::uses('ReservationFixture', 'Reservations.Test/Fixture');
-
-/**
- * ReservationEventShareUser::validate()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationEventShareUser
- */
-class ReservationEventShareUserValidateTest extends NetCommonsValidateTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationEventShareUser';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'validates';
-
-/**
- * ValidationErrorのDataProvider
- *
- * ### 戻り値
- * - data 登録データ
- * - field フィールド名
- * - value セットする値
- * - message エラーメッセージ
- * - overwrite 上書きするデータ(省略可)
- *
- * @return array テストデータ
- */
- public function dataProviderValidationError() {
- //$data['ReservationMailSetting'] = (new ReservationMailSettingFixture())->records[0];
- $data = array();
- return array(
- array('data' => $data, 'field' => 'reservation_event_id', 'value' => 'a',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'share_user', 'value' => 'a',
- 'message' => __d('net_commons', 'Invalid request.')),
- );
- }
-
-}
diff --git a/Test/Case/Model/ReservationFrameSetting/GetSelectRoomsTest.php b/Test/Case/Model/ReservationFrameSetting/GetSelectRoomsTest.php
deleted file mode 100644
index 3b70fbf..0000000
--- a/Test/Case/Model/ReservationFrameSetting/GetSelectRoomsTest.php
+++ /dev/null
@@ -1,131 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('WorkflowGetTest', 'Workflow.TestSuite');
-
-/**
- * ReservationFrameSetting::getSelectRooms()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationFrameSetting
- */
-class ReservationFrameSettingGetSelectRoomsTest extends WorkflowGetTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationFrameSetting';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'getSelectRooms';
-
-/**
- * GetのDataProvider
- *
- * #### 戻り値
- * - data 登録データ
- *
- * @return void
- */
- public function dataProviderGet() {
- $rooms = array(
- '2' => array(
- 'reservation_frame_setting_id' => 1,
- 'room_id' => '2',
- ),
- //'3' => 2,
- //'4' => 3,
- '5' => array(
- 'reservation_frame_setting_id' => 1,
- 'room_id' => '5',
- ),
- '6' => array(
- 'reservation_frame_setting_id' => null,
- 'room_id' => null,
- )
- );
- $errRooms = array(
- '2' => array(
- 'reservation_frame_setting_id' => null,
- 'room_id' => null,
- ),
- //'3' => null,
- //'4' => null,
- '5' => array(
- 'reservation_frame_setting_id' => null,
- 'room_id' => null,
- ),
- '6' => array(
- 'reservation_frame_setting_id' => null,
- 'room_id' => null,
- )
- );
- return array(
- array(1, 'frame_3', $rooms),
- array(100, 'frame_3', $errRooms),
- array(null, 'frame_3', $rooms),
- array(null, null, array()),
- );
- }
-
-/**
- * getSelectRooms()のテスト
- *
- * @param int $settingId FrameSettingレコードのID
- * @param string $frameKey frame key
- * @param mix $expect 期待値
- * @dataProvider dataProviderGet
- * @return void
- */
- public function testGetSelectRooms($settingId, $frameKey, $expect) {
- $model = $this->_modelName;
- $methodName = $this->_methodName;
-
- Current::$current['Frame']['key'] = $frameKey;
-
- //テスト実施
- $result = $this->$model->$methodName($settingId);
-
- //チェック
- $this->assertEqual($result, $expect);
- }
-
-}
diff --git a/Test/Case/Model/ReservationFrameSetting/SaveFrameSettingTest.php b/Test/Case/Model/ReservationFrameSetting/SaveFrameSettingTest.php
deleted file mode 100644
index c825ed2..0000000
--- a/Test/Case/Model/ReservationFrameSetting/SaveFrameSettingTest.php
+++ /dev/null
@@ -1,134 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsSaveTest', 'NetCommons.TestSuite');
-App::uses('ReservationFrameSettingFixture', 'Reservations.Test/Fixture');
-
-/**
- * ReservationFrameSetting::saveFrameSetting()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationFrameSetting
- */
-class ReservationFrameSettingSaveFrameSettingTest extends NetCommonsSaveTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationFrameSetting';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'saveFrameSetting';
-
-/**
- * Save用DataProvider
- *
- * ### 戻り値
- * - data 登録データ
- *
- * @return array テストデータ
- */
- public function dataProviderSave() {
- $data['ReservationFrameSetting'] = (new ReservationFrameSettingFixture())->records[0];
- $data['ReservationFrameSetting']['is_select_room'] = '1';
- $data['ReservationFrameSetting']['is_myroom'] = false;
-
- $data['ReservationFrameSettingSelectRoom'] = array();
- $selectRoomFixture = new ReservationFrameSettingSelectRoomFixture();
- // Modelの試験のときはパブリックデータしか操作できない....ログイン状態を作れない
- $data['ReservationFrameSettingSelectRoom'][1] = $selectRoomFixture->records[0];
- $data['ReservationFrameSettingSelectRoom'][4] = $selectRoomFixture->records[3];
- $data['ReservationFrameSettingSelectRoom'][5] = array(
- 'reservation_frame_setting_id' => 1,
- 'room_id' => '6'
- );
-
- $results = array();
- // * 編集の登録処理
- $results[0] = array($data);
- // * 新規の登録処理
- $results[1] = array($data);
- $results[1] = Hash::insert($results[1], '0.ReservationFrameSetting.id', null);
- $results[1] = Hash::remove($results[1], '0.ReservationFrameSetting.created');
- $results[1] = Hash::remove($results[1], '0.ReservationFrameSetting.created_user');
-
- return $results;
- }
-
-/**
- * SaveのExceptionError用DataProvider
- *
- * ### 戻り値
- * - data 登録データ
- * - mockModel Mockのモデル
- * - mockMethod Mockのメソッド
- *
- * @return array テストデータ
- */
- public function dataProviderSaveOnExceptionError() {
- $data = $this->dataProviderSave()[0][0];
-
- return array(
- array($data, 'Reservations.ReservationFrameSetting', 'save'),
- array($data, 'Reservations.ReservationFrameSettingSelectRoom', 'save'),
- );
- }
-
-/**
- * SaveのValidationError用DataProvider
- *
- * ### 戻り値
- * - data 登録データ
- * - mockModel Mockのモデル
- * - mockMethod Mockのメソッド(省略可:デフォルト validates)
- *
- * @return array テストデータ
- */
- public function dataProviderSaveOnValidationError() {
- $data = $this->dataProviderSave()[0][0];
-
- return array(
- array($data, 'Reservations.ReservationFrameSetting'),
- array($data, 'Reservations.ReservationFrameSettingSelectRoom'),
- );
- }
-
-}
diff --git a/Test/Case/Model/ReservationFrameSetting/SetDefaultValueTest.php b/Test/Case/Model/ReservationFrameSetting/SetDefaultValueTest.php
deleted file mode 100644
index 22cc6af..0000000
--- a/Test/Case/Model/ReservationFrameSetting/SetDefaultValueTest.php
+++ /dev/null
@@ -1,116 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsModelTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationsComponent', 'Reservations.Controller/Component'); //constを使うため
-
-/**
- * ReservationFrameSetting::setDefaultValue()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationFrameSetting
- */
-class ReservationFrameSettingSetDefaultValueTest extends NetCommonsModelTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationFrameSetting';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'setDefaultValue';
-
-/**
- * setDefaultValue()のテスト
- *
- * @param mix $data FrameSettingデータ
- * @param mix $expect 期待値
- * @dataProvider dataProviderSetDefaultValue
- * @return void
- */
- public function testSetDefaultValue($data, $expect) {
- $model = $this->_modelName;
- $methodName = $this->_methodName;
-
- //Current::$current['Frame']['key'] = $frameKey;
-
- //テスト実施
- $this->$model->$methodName($data);
-
- //チェック
- $this->assertEqual($data, $expect);
- }
-
-/**
- * SetDefaultValueのDataProvider
- *
- * ### 戻り値
- * - data 登録データ
- *
- * @return void
- */
- public function dataProviderSetDefaultValue() {
- $data = array();
- $expect = array();
-
- $expect = array(
- 'ReservationFrameSetting' => array(
- 'display_type' => ReservationsComponent::CALENDAR_DISP_TYPE_SMALL_MONTHLY,
- 'display_count' => ReservationsComponent::CALENDAR_STANDARD_DISPLAY_DAY_COUNT,
- 'timeline_base_time' => ReservationsComponent::CALENDAR_TIMELINE_DEFAULT_BASE_TIME,
- 'is_select_room' => false,
- 'is_myroom' => true,
- 'start_pos' => '0',
- 'frame_key' => '',
- 'room_id' => '',
- 'created_user' => null,
- 'created' => null,
- 'modified_user' => null,
- 'modified' => null,
- 'id' => null,
- )
- );
- return array(
- array($data, $expect),
- );
- }
-
-}
diff --git a/Test/Case/Model/ReservationFrameSetting/ValidateTest.php b/Test/Case/Model/ReservationFrameSetting/ValidateTest.php
deleted file mode 100644
index e991d9a..0000000
--- a/Test/Case/Model/ReservationFrameSetting/ValidateTest.php
+++ /dev/null
@@ -1,104 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsValidateTest', 'NetCommons.TestSuite');
-App::uses('ReservationFrameSettingFixture', 'Reservations.Test/Fixture');
-
-/**
- * ReservationFrameSetting::validate()のテスト
- *
- * @author AllCreator
- * @package NetCommons\Reservations\Test\Case\Model\ReservationFrameSetting
- */
-class ReservationFrameSettingValidateTest extends NetCommonsValidateTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.block_setting_for_reservation',
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
-
- 'plugin.reservations.reservation_rrule',
- 'plugin.workflow.workflow_comment',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationFrameSetting';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'validates';
-
-/**
- * ValidationErrorのDataProvider
- *
- * ### 戻り値
- * - data 登録データ
- * - field フィールド名
- * - value セットする値
- * - message エラーメッセージ
- * - overwrite 上書きするデータ(省略可)
- *
- * @return array テストデータ
- */
- public function dataProviderValidationError() {
- $data['ReservationFrameSetting'] = (new ReservationFrameSettingFixture())->records[0];
-
- return array(
- array('data' => $data, 'field' => 'display_type', 'value' => 'aaa',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'display_type', 'value' => '100',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'start_pos', 'value' => 'aa',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'start_pos', 'value' => '8',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'display_count', 'value' => 'aa',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'display_count', 'value' => '50',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'is_myroom', 'value' => '5',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'is_select_room', 'value' => '5',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'room_id', 'value' => 'aa',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'room_id', 'value' => '7',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'timeline_base_time', 'value' => 'aa',
- 'message' => __d('net_commons', 'Invalid request.')),
- array('data' => $data, 'field' => 'timeline_base_time', 'value' => '50',
- 'message' => __d('net_commons', 'Invalid request.')),
- );
- }
-
-}
diff --git a/Test/Case/Model/ReservationLocation/GetLocationsTest.php b/Test/Case/Model/ReservationLocation/GetLocationsTest.php
deleted file mode 100644
index b499568..0000000
--- a/Test/Case/Model/ReservationLocation/GetLocationsTest.php
+++ /dev/null
@@ -1,91 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsGetTest', 'Reservations.TestSuite');
-
-/**
- * ReservationLocation::getLocations()のテスト
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\Test\Case\Model\ReservationLocation
- */
-class ReservationLocationGetLocationsTest extends ReservationsGetTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
- 'plugin.reservations.reservation_location',
- 'plugin.reservations.reservation_location_reservable',
- 'plugin.reservations.reservation_locations_approval_user',
- 'plugin.reservations.reservation_locations_room',
- 'plugin.reservations.reservation_rrule',
- 'plugin.reservations.reservation_timeframe',
- 'plugin.workflow.workflow_comment',
- 'plugin.categories.category',
- 'plugin.categories.categories_language',
- 'plugin.categories.category_order',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationLocation';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'getLocations';
-
-/**
- * getLocations()のテスト
- *
- * @return void
- */
- public function testGetLocations() {
- $model = $this->_modelName;
- $methodName = $this->_methodName;
-
- //データ生成
- $categoryId = null;
-
- Current::write('User', [
- 'id' => 1,
- 'timezone' => 'Asia/Tokyo',
- ]);
-
- //テスト実施
- $result = $this->$model->$methodName($categoryId);
-
- //チェック
- // ε( v ゚ω゚) < ひとまず件数だけチェック
- $this->assertEquals(4, count($result));
- }
-
-}
diff --git a/Test/Case/Model/ReservationLocation/GetReservableLocationsTest.php b/Test/Case/Model/ReservationLocation/GetReservableLocationsTest.php
deleted file mode 100644
index 888f543..0000000
--- a/Test/Case/Model/ReservationLocation/GetReservableLocationsTest.php
+++ /dev/null
@@ -1,215 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationsGetTest', 'Reservations.TestSuite');
-//App::uses('TestAuthGeneral', 'AuthGeneral.TestSuite');
-
-/**
- * ReservationLocation::getReservableLocations()のテスト
- *
- * @property ReservationLocation $ReservationLocation
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\Test\Case\Model\ReservationLocation
- */
-class ReservationLocationGetReservableLocationsTest extends ReservationsGetTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.reservation',
- 'plugin.reservations.reservation_event',
- //'plugin.reservations.reservation_event_content',,
- 'plugin.reservations.reservation_event_share_user',
- 'plugin.reservations.reservation_frame_setting',
- 'plugin.reservations.reservation_location',
- 'plugin.reservations.reservation_location_reservable',
- 'plugin.reservations.reservation_locations_approval_user',
- 'plugin.reservations.reservation_locations_room',
- 'plugin.reservations.reservation_rrule',
- 'plugin.reservations.reservation_timeframe',
- 'plugin.workflow.workflow_comment',
- 'plugin.categories.category',
- 'plugin.categories.categories_language',
- 'plugin.categories.category_order',
- 'plugin.user_roles.user_role_setting',
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- protected $_modelName = 'ReservationLocation';
-
-/**
- * Method name
- *
- * @var string
- */
- protected $_methodName = 'getReservableLocations';
-
-/**
- * setUp
- *
- * @return void
- */
- public function setUp() {
- parent::setUp();
- /** @var ReservationLocationReservable $locationReservable */
- $locationReservable = ClassRegistry::init('Reservations.ReservationLocationReservable');
- $locationReservable->clearCache();
- }
-
-/**
- * getReservableLocations()のテスト
- *
- * @return void
- */
- public function testGetReservableLocations() {
- $model = $this->_modelName;
- $methodName = $this->_methodName;
-
- //データ生成
- $categoryId = null;
- $userId = 1;
-
- //TestAuthGeneral::login($this);
-
- Current::write('User', [
- 'id' => 1,
- 'timezone' => 'Asia/Tokyo',
- 'role_key' => 'system_administrator',
- ]);
-
- //テスト実施
- $result = $this->$model->$methodName($categoryId, $userId);
- //TestAuthGeneral::logout($this);
-
- //チェック
- //:Assertを書く
- // ε( v ゚ω゚) < ひとまず件数だけチェック
- $this->assertEquals(4, count($result));
- //debug($result);
- }
-
-/**
- * 最後の施設が表示されず、その手前の施設が2回繰り返して表示されるバグの修正
- *
- * @see https://github.com/NetCommons3/NetCommons3/issues/897
- * @return void
- */
- public function testNC3Issue897duplicateLocations() {
- $model = $this->_modelName;
- $methodName = $this->_methodName;
-
- //データ生成
- $categoryId = null;
- $userId = 1;
-
- //TestAuthGeneral::login($this);
-
- Current::write('User', [
- 'id' => 1,
- 'timezone' => 'Asia/Tokyo',
- 'role_key' => 'system_administrator',
- ]);
-
- //テスト実施
- $result = $this->$model->$methodName($categoryId, $userId);
- //TestAuthGeneral::logout($this);
-
- //チェック
- //:Assertを書く
- // ひとまず件数だけチェック
- $this->assertEquals(4, count($result));
-
- // 取得される施設のキーが重複してないことを確認する(Issue897発生時はこれがFailedになる)
- $keys = [];
- foreach ($result as $location) {
- $this->assertNotContains($location['ReservationLocation']['key'], $keys);
- $keys[] = $location['ReservationLocation']['key'];
- }
- }
-
-/**
- * 承認が必要な施設は承認者情報つきで取得される
- *
- * @return void
- */
- public function testWithApprovalUser() {
- $categoryId = null;
- $userId = 1;
- Current::write('User', [
- 'id' => 1,
- 'timezone' => 'Asia/Tokyo',
- 'role_key' => 'system_administrator',
- ]);
- $locations = $this->ReservationLocation->getReservableLocations($categoryId, $userId);
- $idIndexes = array_column(array_column($locations, 'ReservationLocation'), 'id');
- $id4index = array_search('4', $idIndexes);
- // 配列のキーもUserIdになる(JavaScriptで利用しているので)
- $expected = [
- 1 => '1'
- ];
- self::assertSame($expected, $locations[$id4index]['approvalUserIds']);
- }
-
-/**
- * いずれかのルームで予約可能なロール以上であれば予約可能な施設として取得される
- *
- * @return void
- */
- public function testGetReservableWhenMoreThanRollInAnyRoom() {
- $categoryId = null;
- $userId = 2; // room.id:2で chief_editor
- Current::write('User', [
- 'id' => 2,
- 'timezone' => 'Asia/Tokyo',
- 'role_key' => 'general_user',
- 'UserRoleSetting' => ['use_private_room' => false]
- ]);
- $locations = $this->ReservationLocation->getReservableLocations($categoryId, $userId);
- $ids = array_column(array_column($locations, 'ReservationLocation'), 'id');
- self::assertContains('1', $ids);
- }
-
-/**
- * いずれのルームでも施設の予約可能なロールを満たしてない施設は取得されない
- *
- * @return void
- */
- public function testNotGetReservableWhenLessRollInEveryRoom() {
- $categoryId = null;
- $userId = 3; // room.id:2で editor
- Current::write('User', [
- 'id' => 3,
- 'timezone' => 'Asia/Tokyo',
- 'role_key' => 'general_user',
- 'UserRoleSetting' => ['use_private_room' => false]
- ]);
- $locations = $this->ReservationLocation->getReservableLocations($categoryId, $userId);
- $ids = array_column(array_column($locations, 'ReservationLocation'), 'id');
-
- // location.id:1はchief_editor以上でないと予約できないので取得されない
- self::assertNotContains('1', $ids);
- }
-}
diff --git a/Test/Case/Model/ReservationLocationReservableTest.php b/Test/Case/Model/ReservationLocationReservableTest.php
deleted file mode 100644
index c0b9666..0000000
--- a/Test/Case/Model/ReservationLocationReservableTest.php
+++ /dev/null
@@ -1,199 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsModelTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationLocationReservable', 'Reservations.Model');
-
-/**
- * Summary for ReservationLocationReservable Test Case
- *
- * @property ReservationLocationReservable $ReservationLocationReservable
- */
-final class ReservationLocationReservableTest extends NetCommonsModelTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.reservation_location_reservable',
- 'plugin.reservations.room4test',
- 'plugin.reservations.roles_room4test',
- 'plugin.reservations.roles_rooms_user4test',
- //'plugin.reservations.user',
- //'plugin.reservations.role',
- 'plugin.reservations.user_role_setting4test',
- //'plugin.reservations.users_language',
- //'plugin.reservations.language'
- );
-
-/**
- * setUp method
- *
- * @return void
- */
- public function setUp() {
- parent::setUp();
- $this->ReservationLocationReservable = ClassRegistry::init('Reservations.ReservationLocationReservable');
- }
-
-/**
- * tearDown method
- *
- * @return void
- */
- public function tearDown() {
- unset($this->ReservationLocationReservable);
-
- parent::tearDown();
- }
-
-/**
- * 個人的な予約を受け付けてる施設はプライベートルームが使えるユーザならルームでの権限がなくても予約可能
- *
- * @return void
- */
- public function testReservableWhenUsePrivateRoom() {
- $userId = 10;
- Current::write('User.id', $userId);
- Current::write('User.role_key', 'general_user');
- Current::write('User.UserRoleSetting.use_private_room', true);
-
- $location = [
- 'ReservationLocation' => [
- 'id' => '3',
- 'key' => 'KEY_3',
- 'use_private' => true,
- 'use_all_rooms' => true,
- ]
- ];
- $result = $this->ReservationLocationReservable->isReservableByLocation($location);
- self::assertTrue($result);
- }
-
-/**
- * 個人的な予約を受け付けてる施設でプライベートルームが使えないユーザならルーム権限もなければ予約不可
- *
- * @return void
- */
- public function testNotReservableWhenNotUsePrivateRoom() {
- $userId = 11;
- Current::write('User.id', $userId);
- Current::write('User.role_key', 'custom_user');
- Current::write('User.UserRoleSetting.use_private_room', false);
-
- $location = [
- 'ReservationLocation' => [
- 'id' => '3',
- 'key' => 'KEY_3',
- 'use_private' => true,
- 'use_all_rooms' => true,
- ]
- ];
- $result = $this->ReservationLocationReservable->isReservableByLocation($location);
- self::assertFalse($result);
- }
-
-/**
- * 全てのルームから予約を受け付けている施設はいずれかのルームで権限あれば予約可能
- *
- * @return void
- */
- public function testReservableWhenHasAnyRoomPermission() {
- $userId = 10;
- Current::write('User.id', $userId);
- Current::write('User.role_key', 'general_user');
- Current::write('User.UserRoleSetting.use_private_room', true);
-
- $location = [
- 'ReservationLocation' => [
- 'id' => '1',
- 'key' => 'KEY_1',
- 'use_private' => false,
- 'use_all_rooms' => true,
- ]
- ];
- $result = $this->ReservationLocationReservable->isReservableByLocation($location);
- self::assertTrue($result);
- }
-
-/**
- * 特定のルームのみ予約を受け付けている施設はいずれかのそのルームで権限あれば予約可能
- *
- * @return void
- */
- public function testReservableWhenHasRoomPermission() {
- $userId = 10;
- Current::write('User.id', $userId);
- Current::write('User.role_key', 'general_user');
- Current::write('User.UserRoleSetting.use_private_room', true);
-
- $location = [
- 'ReservationLocation' => [
- 'id' => '2',
- 'key' => 'KEY_2',
- 'use_private' => false,
- 'use_all_rooms' => false,
- ]
- ];
- $result = $this->ReservationLocationReservable->isReservableByLocation($location);
- self::assertTrue($result);
- }
-
-/**
- * 全てのルームから予約を受け付けている施設でいずれのルーム権限もなければ予約不可
- *
- * @return void
- */
- public function testNotReservableWhenHasNotAnyRoomPermission() {
- $userId = 11;
- Current::write('User.id', $userId);
- Current::write('User.role_key', 'custom_user');
- Current::write('User.UserRoleSetting.use_private_room', false);
-
- $location = [
- 'ReservationLocation' => [
- 'id' => '1',
- 'key' => 'KEY_1',
- 'use_private' => false,
- 'use_all_rooms' => true,
- ]
- ];
- $result = $this->ReservationLocationReservable->isReservableByLocation($location);
-
- self::assertFalse($result);
- }
-
-/**
- * 特定のルームのみ予約を受け付けている施設でそのルームの権限がなければ予約不可
- *
- * @return void
- */
- public function testNotReservableWhenHasNotRoomPermision() {
- $userId = 11;
- Current::write('User.id', $userId);
- Current::write('User.role_key', 'custom_user');
- Current::write('User.UserRoleSetting.use_private_room', false);
-
- $location = [
- 'ReservationLocation' => [
- 'id' => '2',
- 'key' => 'KEY_2',
- 'use_private' => false,
- 'use_all_rooms' => false,
- ]
- ];
- $result = $this->ReservationLocationReservable->isReservableByLocation($location);
-
- self::assertFalse($result);
- }
-}
diff --git a/Test/Case/Model/ReservationLocationsApprovalUserTest.php b/Test/Case/Model/ReservationLocationsApprovalUserTest.php
deleted file mode 100644
index 1411eca..0000000
--- a/Test/Case/Model/ReservationLocationsApprovalUserTest.php
+++ /dev/null
@@ -1,159 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationLocationsApprovalUser', 'Reservations.Model');
-
-/**
- * Summary for ReservationLocationsApprovalUser Test Case
- *
- * @property ReservationLocationsApprovalUser $ReservationLocationsApprovalUser
- */
-class ReservationLocationsApprovalUserTest extends CakeTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.reservation_locations_approval_user',
- //'plugin.reservations.user'
- );
-
-/**
- * setUp method
- *
- * @return void
- */
- public function setUp() {
- parent::setUp();
- $this->ReservationLocationsApprovalUser = ClassRegistry::init('Reservations.ReservationLocationsApprovalUser');
- }
-
-/**
- * tearDown method
- *
- * @return void
- */
- public function tearDown() {
- unset($this->ReservationLocationsApprovalUser);
-
- parent::tearDown();
- }
-
-/**
- * test findApprovalUserIdsByLocations で施設keyをキーとした連想配列に施設の承認ユーザIDリストが取得できる
- *
- * @return void
- */
- public function testFindApprovalUserIdsByLocations() {
- $locations = [
- [
- 'ReservationLocation' => [
- 'key' => 'location_4',
- 'use_workflow' => 1,
- ]
- ],
- [
- // use_workflow:0 なので承認不要の施設
- 'ReservationLocation' => [
- 'key' => 'location_5',
- 'use_workflow' => 0,
- ]
- ],
- [
- 'ReservationLocation' => [
- 'key' => 'location_6',
- 'use_workflow' => 1,
- ]
- ],
- ];
-
- $userIds = $this->ReservationLocationsApprovalUser->findApprovalUserIdsByLocations($locations);
- // 配列のキーもUserIdが入る(JavaScriptで利用しているので)
- $expected = [
- 'location_4' => [
- 1 => '1'
- ],
- 'location_6' => [
- 2 => '2'
- ]
- ];
- self::assertSame($expected, $userIds);
- }
-
-/**
- * 取得結果がキャッシュされる
- *
- * @return void
- * @throws ReflectionException
- */
- public function testResultCache() {
- $locations = [
- [
- 'ReservationLocation' => [
- 'key' => 'location_4',
- 'use_workflow' => 1,
- ]
- ],
- ];
-
- $userIds = $this->ReservationLocationsApprovalUser->findApprovalUserIdsByLocations($locations);
- $cacheProperty = new ReflectionProperty($this->ReservationLocationsApprovalUser, '_approvalUserIds');
- $cacheProperty->setAccessible(true);
-
- self::assertSame($userIds, $cacheProperty->getValue($this->ReservationLocationsApprovalUser));
- }
-
-/**
- * キャッシュがあればキャッシュから結果が返される
- *
- * @return void
- * @throws ReflectionException
- */
- public function testUseCache() {
- // キャッシュが使われることの確認のためキャッシュ済み状態にしておく
- $cache = [
- 'location_key_a' => [
- '1',
- '2'
- ],
- 'location_key_b' => [
- '3',
- '4'
- ]
- ];
- $cacheProperty = new ReflectionProperty($this->ReservationLocationsApprovalUser, '_approvalUserIds');
- $cacheProperty->setAccessible(true);
- $cacheProperty->setValue($this->ReservationLocationsApprovalUser, $cache);
-
- $locations = [
- [
- 'ReservationLocation' => [
- 'key' => 'location_key_a',
- 'use_workflow' => 1,
- ]
- ],
- [
- // use_workflow:0 なので承認不要の施設
- 'ReservationLocation' => [
- 'key' => 'location_key_b',
- 'use_workflow' => 1,
- ]
- ],
- ];
-
- $result = $this->ReservationLocationsApprovalUser->findApprovalUserIdsByLocations($locations);
-
- self::assertSame($cache, $result);
- }
-
-}
diff --git a/Test/Case/Model/ReservationLocationsRoomTest.php b/Test/Case/Model/ReservationLocationsRoomTest.php
deleted file mode 100644
index 320d7b4..0000000
--- a/Test/Case/Model/ReservationLocationsRoomTest.php
+++ /dev/null
@@ -1,116 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsModelTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationLocationsRoom', 'Reservations.Model');
-
-/**
- * Summary for ReservationLocationsRoom Test Case
- *
- * @property ReservationLocationsRoom $ReservationLocationsRoom
- */
-class ReservationLocationsRoomTest extends NetCommonsModelTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.reservation_locations_room',
- 'plugin.reservations.reservation_location',
- 'plugin.reservations.room4test',
- 'plugin.reservations.roles_rooms_user4test',
- 'plugin.reservations.roles_room4test',
- //'plugin.reservations.user',
- //'plugin.reservations.role',
- 'plugin.reservations.user_role_setting4test',
- //'plugin.reservations.users_language',
- //'plugin.reservations.language'
- 'plugin.categories.category',
- 'plugin.categories.categories_language',
- 'plugin.categories.category_order',
-
- );
-
-/**
- * setUp method
- *
- * @return void
- */
- public function setUp() {
- parent::setUp();
- $this->ReservationLocationsRoom = ClassRegistry::init('Reservations.ReservationLocationsRoom');
- }
-
-/**
- * tearDown method
- *
- * @return void
- */
- public function tearDown() {
- unset($this->ReservationLocationsRoom);
-
- parent::tearDown();
- }
-
-/**
- * test全てのルームから予約を受け付けている施設はユーザが参加している全てのルームで予約可能
- *
- * @return void
- */
- public function testGetReservableRoomsByLocationKeyWithAllRoomReservableLocation() {
- $locationKey = 'location_1';
- $userId = '10';
- $result = $this->ReservationLocationsRoom->getReservableRoomsByLocationKey($locationKey, $userId);
-
- $roomIds = array_column(array_column($result, 'Room'), 'id');
-
- $expectedIds = [
- '11', '12'
- ];
- sort($expectedIds);
- sort($roomIds);
- self::assertSame($expectedIds, $roomIds);
- }
-
-/**
- * test特定のルームのみから予約を受け付けている施設はユーザが参加しているルームのうち施設予約可能としているルームのみ予約可能
- *
- * @return void
- */
- public function testGetReservableRoomsByLocationKeyWithSpecifyRoomsReservableLocation() {
- $locationKey = 'location_5';
- $userId = '10';
- $result = $this->ReservationLocationsRoom->getReservableRoomsByLocationKey($locationKey, $userId);
-
- $roomIds = array_column(array_column($result, 'Room'), 'id');
-
- $expectedIds = [
- '11',
- ];
- self::assertSame($expectedIds, $roomIds);
- }
-
-/**
- * getReservableRoomsByLocationKeyで施設がみつからなければ空配列を返す
- *
- * @return void
- */
- public function testGetReservableRoomsByLocationKeyWhenNotFoundResultIsEmptyArray() {
- $locationKey = 'not_found_location_key';
- $userId = '10';
- $result = $this->ReservationLocationsRoom->getReservableRoomsByLocationKey($locationKey, $userId);
-
- self::assertSame([], $result);
- }
-
-}
diff --git a/Test/Case/Model/ReservationTest.php b/Test/Case/Model/ReservationTest.php
new file mode 100644
index 0000000..561c649
--- /dev/null
+++ b/Test/Case/Model/ReservationTest.php
@@ -0,0 +1,57 @@
+
+* @author Your Name
+* @link http://www.netcommons.org NetCommons Project
+* @license http://www.netcommons.org/license.txt NetCommons License
+* @copyright Copyright 2014, NetCommons Project
+ */
+
+App::uses('Reservation', 'Reservations.Model');
+
+/**
+ * Summary for Reservation Test Case
+ */
+class ReservationTest extends CakeTestCase {
+
+/**
+ * Fixtures
+ *
+ * @var array
+ */
+ public $fixtures = array(
+ 'plugin.reservations.reservation',
+ 'plugin.reservations.room',
+ 'plugin.reservations.user',
+ 'plugin.reservations.role',
+ 'plugin.reservations.user_role_setting',
+ 'plugin.reservations.users_language',
+ 'plugin.reservations.language',
+ 'plugin.reservations.location',
+ 'plugin.reservations.calendar'
+ );
+
+/**
+ * setUp method
+ *
+ * @return void
+ */
+ public function setUp() {
+ parent::setUp();
+ $this->Reservation = ClassRegistry::init('Reservations.Reservation');
+ }
+
+/**
+ * tearDown method
+ *
+ * @return void
+ */
+ public function tearDown() {
+ unset($this->Reservation);
+
+ parent::tearDown();
+ }
+
+}
diff --git a/Test/Case/Model/ReservationTimeframeTest.php b/Test/Case/Model/ReservationTimeframeTest.php
deleted file mode 100644
index 99c84f9..0000000
--- a/Test/Case/Model/ReservationTimeframeTest.php
+++ /dev/null
@@ -1,54 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('ReservationTimeframe', 'Reservations.Model');
-
-/**
- * Summary for ReservationTimeframe Test Case
- */
-class ReservationTimeframeTest extends CakeTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- 'plugin.reservations.reservation_timeframe',
- 'plugin.reservations.language',
- 'plugin.reservations.user',
- 'plugin.reservations.role',
- 'plugin.reservations.user_role_setting',
- 'plugin.reservations.users_language'
- );
-
-/**
- * setUp method
- *
- * @return void
- */
- public function setUp() {
- parent::setUp();
- $this->ReservationTimeframe = ClassRegistry::init('Reservations.ReservationTimeframe');
- }
-
-/**
- * tearDown method
- *
- * @return void
- */
- public function tearDown() {
- unset($this->ReservationTimeframe);
-
- parent::tearDown();
- }
-
-}
diff --git a/Test/Case/Service/ReservationRepeatServiceTest.php b/Test/Case/Service/ReservationRepeatServiceTest.php
deleted file mode 100644
index 5bfbede..0000000
--- a/Test/Case/Service/ReservationRepeatServiceTest.php
+++ /dev/null
@@ -1,427 +0,0 @@
-
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- */
-
-App::uses('ReservationRepeatService', 'Reservations.Service');
-
-/**
- * Class ReservationRepeatServiceTest
- *
- * @property ReservationRepeatService $ReservationRepeatService
- */
-class ReservationRepeatServiceTest extends CakeTestCase {
-
-/**
- * setUp method
- *
- * @return void
- */
- public function setUp() {
- parent::setUp();
- $this->ReservationRepeatService = new ReservationRepeatService();
- }
-
-/**
- * 日ごとの繰り返し日付の取得 回数指定の場合
- *
- * @return void
- */
- public function testDailyCount() {
- $startDate = '2017-05-01';
-
- $rrule = [
- 'FREQ' => 'DAILY',
- 'INTERVAL' => 1,
- 'COUNT' => 3
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- $this->assertCount(3, $result);
- $lastDay = array_pop($result);
- $this->assertEquals('2017-05-03', $lastDay);
-
- $rrule = [
- 'FREQ' => 'DAILY',
- 'INTERVAL' => 2,
- 'COUNT' => 3
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- $this->assertCount(3, $result);
- $lastDay = array_pop($result);
- $this->assertEquals('2017-05-05', $lastDay);
- }
-
-/**
- * 日ごとの繰り返し日付の取得 回数指定の場合
- *
- * @return void
- */
- public function testDailyUntil() {
- $startDate = '2017-05-01';
-
- $rrule = [
- 'FREQ' => 'DAILY',
- 'INTERVAL' => 1,
- 'UNTIL' => '2017-05-10'
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- $this->assertCount(10, $result);
- $lastDay = array_pop($result);
- $this->assertEquals('2017-05-10', $lastDay);
-
- $rrule = [
- 'FREQ' => 'DAILY',
- 'INTERVAL' => 2,
- 'UNTIL' => '2017-05-10'
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- $this->assertCount(5, $result);
- $lastDay = array_pop($result);
- $this->assertEquals('2017-05-09', $lastDay);
- }
-
-/**
- * strtotimeのテスト
- *
- * @return void
- */
- public function testStrtotimeWeekday() {
- // strtotimeで曜日を指定すると、現在時刻以降の曜日の日時を返す。
- // よって月曜に月曜を指定すると今日の日時。
- // 火曜に月曜を指定すると次の週の月曜
- // 土曜を求めると今週の土曜。
- //debug(date('Y-m-d', strtotime('MON'))); // 次の月曜日
- //debug(date('Y-m-d', strtotime('TUE')));
- //debug(date('Y-m-d', strtotime('WED')));
- //debug(date('Y-m-d', strtotime('+0 week', strtotime('2017-05-20'))));
- //debug(date('Y-m-d', strtotime('first WED of 2017-05')));
- //debug(date('Y-m-d', strtotime('last WED of 2017-05')));
- }
-
-/**
- * 週繰り返しのテスト かいすうしてい
- *
- * @return void
- */
- public function testWeeklyCount() {
- $startDate = '2017-05-01';
-
- $rrule = [
- 'FREQ' => 'WEEKLY',
- 'INTERVAL' => 1,
- 'BYDAY' => [
- 'MO',
- 'WE'
- ],
- 'COUNT' => 3
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- $this->assertCount(3, $result);
- $lastDay = array_pop($result);
- $this->assertEquals('2017-05-08', $lastDay);
-
- $rrule = [
- 'FREQ' => 'WEEKLY',
- 'INTERVAL' => 2,
- 'BYDAY' => [
- 'MO',
- 'WE'
- ],
- 'COUNT' => 3
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- $this->assertCount(3, $result);
- $lastDay = array_pop($result);
- $this->assertEquals('2017-05-15', $lastDay);
- }
-
-/**
- * 週繰り返しのテスト 日付指定
- *
- * @return void
- */
- public function testWeeklyUnitl() {
- $startDate = '2017-05-01';
-
- $rrule = [
- 'FREQ' => 'WEEKLY',
- 'INTERVAL' => 1,
- 'BYDAY' => [
- 'MO',
- 'WE'
- ],
- 'UNTIL' => '2017-05-31'
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- $this->assertCount(10, $result);
- $lastDay = array_pop($result);
- $this->assertEquals('2017-05-31', $lastDay);
-
- $rrule = [
- 'FREQ' => 'WEEKLY',
- 'INTERVAL' => 2,
- 'BYDAY' => [
- 'MO',
- 'WE'
- ],
- 'UNTIL' => '2017-05-31'
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- $this->assertCount(6, $result);
- $lastDay = array_pop($result);
- $this->assertEquals('2017-05-31', $lastDay);
- }
-
-/**
- * 月繰り返しのテスト(回数指定)
- *
- * @return void
- */
- public function testMonthlyCount() {
- $startDate = '2017-05-01';
-
- $rrule = [
- 'FREQ' => 'MONTHLY',
- 'INTERVAL' => 2,
- 'BYDAY' => '2SU', // 第2日曜
- 'COUNT' => 3
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- //debug($result);
- $this->assertCount(3, $result);
- $lastDay = array_pop($result);
- $this->assertEquals('2017-07-09', $lastDay);
-
- $startDate = '2017-05-30';
-
- $rrule = [
- 'FREQ' => 'MONTHLY',
- 'INTERVAL' => 2,
- 'BYDAY' => '2SU', // 第2日曜
- 'COUNT' => 3
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- //debug($result);
- $this->assertCount(3, $result);
- $lastDay = array_pop($result);
- $this->assertEquals('2017-09-10', $lastDay);
-
- // 9/10
-
- $rrule = [
- 'FREQ' => 'MONTHLY',
- 'INTERVAL' => 2,
- 'BYMONTHDAY' => 15, //毎月15日
- 'COUNT' => 3
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- //debug($result);
- $this->assertEquals(
- [
- '2017-05-30',
- '2017-07-15',
- '2017-09-15'
- ],
- $result
- );
- $this->assertCount(3, $result);
- }
-
-/**
- * 月繰り返しのテスト
- *
- * @return void
- */
- public function testMonthlyUntil() {
- $startDate = '2017-05-01';
-
- $rrule = [
- 'FREQ' => 'MONTHLY',
- 'INTERVAL' => 2,
- 'BYDAY' => '2SU', // 第2日曜
- 'UNTIL' => '2017-12-31'
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- $this->assertEquals(
- [
- '2017-05-01',
- '2017-05-14',
- '2017-07-09',
- '2017-09-10',
- '2017-11-12',
-
- ],
- $result
- );
-
- $startDate = '2017-05-30';
-
- $rrule = [
- 'FREQ' => 'MONTHLY',
- 'INTERVAL' => 2,
- 'BYDAY' => '2SU', // 第2日曜
- 'UNTIL' => '2017-12-31'
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- $this->assertEquals(
- [
- '2017-05-30',
- '2017-07-09',
- '2017-09-10',
- '2017-11-12',
-
- ],
- $result
- );
-
- // 9/10
-
- $rrule = [
- 'FREQ' => 'MONTHLY',
- 'INTERVAL' => 2,
- 'BYMONTHDAY' => 15, //毎月15日
- 'UNTIL' => '2017-12-31'
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- //debug($result);
- $this->assertEquals(
- [
- '2017-05-30',
- '2017-07-15',
- '2017-09-15',
- '2017-11-15'
- ],
- $result
- );
- }
-
-/**
- * 年繰り返しのテスト
- *
- * @return void
- */
- public function testYearlyByDay() {
- $startDate = '2017-05-01';
-
- $rrule = [
- 'FREQ' => 'YEARLY',
- 'INTERVAL' => 2,
- 'BYMONTH' => [
- 4,
- 8
- ],
- 'BYDAY' => '2SU', // 第2日曜
- 'COUNT' => 5
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- //debug($result);
-
- $this->assertEquals(
- [
- '2017-05-01',
- '2017-08-13',
- '2019-04-14',
- '2019-08-11',
- '2021-04-11'
- ],
- $result
- );
-
- // until
- $rrule = [
- 'FREQ' => 'YEARLY',
- 'INTERVAL' => 2,
- 'BYMONTH' => [
- 4,
- 8
- ],
- 'BYDAY' => '2SU', // 第2日曜
- 'UNTIL' => '2022-05-31'
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- //debug($result);
-
- $this->assertEquals(
- [
- '2017-05-01',
- '2017-08-13',
- '2019-04-14',
- '2019-08-11',
- '2021-04-11',
- '2021-08-08'
- ],
- $result
- );
- }
-
-/**
- * 年繰り返しのテスト 開始日での繰り返し
- *
- * @return void
- */
- public function testYearlyByStartDay() {
- $startDate = '2017-05-01';
-
- $rrule = [
- 'FREQ' => 'YEARLY',
- 'INTERVAL' => 2,
- 'BYMONTH' => [
- 4,
- 8
- ],
- //'BYDAY' => '2SU', // 第2日曜
- 'COUNT' => 5
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- $this->assertEquals(
- [
- '2017-05-01',
- '2017-08-01',
- '2019-04-01',
- '2019-08-01',
- '2021-04-01',
- ],
- $result
- );
-
- // until
- $rrule = [
- 'FREQ' => 'YEARLY',
- 'INTERVAL' => 2,
- 'BYMONTH' => [
- 4,
- 8
- ],
- //'BYDAY' => '2SU', // 第2日曜
- 'UNTIL' => '2022-05-31'
- ];
- $result = $this->ReservationRepeatService->getRepeatDateSet($rrule, $startDate);
- $this->assertEquals(
- [
- '2017-05-01',
- '2017-08-01',
- '2019-04-01',
- '2019-08-01',
- '2021-04-01',
- '2021-08-01',
- ],
- $result
- );
- }
-
-/**
- * tearDown method
- *
- * @return void
- */
- public function tearDown() {
- unset($this->ReservationTimeframe);
-
- parent::tearDown();
- }
-
-}
\ No newline at end of file
diff --git a/Test/Case/Utility/ReservationSupport/SetDateFormatWithTimezoneoffsetTest.php b/Test/Case/Utility/ReservationSupport/SetDateFormatWithTimezoneoffsetTest.php
deleted file mode 100644
index 632d425..0000000
--- a/Test/Case/Utility/ReservationSupport/SetDateFormatWithTimezoneoffsetTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-
- * @author Allcreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsCakeTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationSupport', 'Reservations.Utility');
-
-/**
- * ReservationSupport::setDateFormatWithTimezoneoffset()のテスト
- *
- * @author Allcreator Co., Ltd.
- * @package NetCommons\Reservations\Test\Case\Utility\ReservationSupport
- */
-class ReservationsUtilityReservationSupportSetDateFormatWithTimezoneoffsetTest extends NetCommonsCakeTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * setDateFormatWithTimezoneoffset()のテスト
- *
- * @param string $timezoneOffset timezoneOffset
- * @param string $insertFlag ユーザー系/サーバー系
- * @param string $time time
- * @param string $expect 期待値
- * @dataProvider dataProviderSetDateFormatWithTimezoneoffset
- *
- * @return void
- */
- public function testSetDateFormatWithTimezoneoffset($timezoneOffset, $insertFlag, $time, $expect) {
- //テスト実施
- $result = ReservationSupport::setDateFormatWithTimezoneoffset($timezoneOffset, $insertFlag, $time);
- //チェック
- $this->assertEquals($result, $expect);
- }
-
-/**
- * SetDateFormatWithTimezoneoffsetのDataProvider
- *
- * #### 戻り値
- * - string 年
- * - string 月
- * - string 期待値
- *
- * @return array
- */
- public function dataProviderSetDateFormatWithTimezoneoffset() {
- return array(
- array('12', 1, 20, '20191129123000'),
- //array('2011', '1', array('2010', '12')),
- );
- }
-
-}
diff --git a/Test/Case/Utility/ReservationTime/AddDashColonAndSpTest.php b/Test/Case/Utility/ReservationTime/AddDashColonAndSpTest.php
deleted file mode 100644
index c06abf0..0000000
--- a/Test/Case/Utility/ReservationTime/AddDashColonAndSpTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-
- * @author Allcreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsCakeTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationTime', 'Reservations.Utility');
-
-/**
- * ReservationTime::addDashColonAndSp()のテスト
- *
- * @author Allcreator Co., Ltd.
- * @package NetCommons\Reservations\Test\Case\Utility\ReservationTime\
- */
-class ReservationsUtilityReservationTimeAddDashColonAndSpTest extends NetCommonsCakeTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * addDashColonAndSp()のテスト
- *
- * @param string $data データ
- * @param string $expect 期待値
- * @dataProvider dataProviderAddDashColonAndSp
- *
- * @return void
- */
- public function testAddDashColonAndSp($data, $expect) {
- //YYYYMMDD
- //$data = '20161109';
-
- //テスト実施
- $result = ReservationTime::addDashColonAndSp($data);
- //チェック
- //$this->assertTrue(true);
- $this->assertEquals($result, $expect);
- }
-
-/**
- * AddDashColonAndSpのDataProvider
- *
- * #### 戻り値
- * - string データ値
- * - string 期待値
- *
- * @return array
- */
- public function dataProviderAddDashColonAndSp() {
- return array(
- array('20161109', '2016-11-09'),
- array('121200', '12:12:00'),
- array('data', 'data'),
-
- );
- }
-
-}
diff --git a/Test/Case/Utility/ReservationTime/DateFormatTest.php b/Test/Case/Utility/ReservationTime/DateFormatTest.php
deleted file mode 100644
index 974ceda..0000000
--- a/Test/Case/Utility/ReservationTime/DateFormatTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-
- * @author Allcreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsCakeTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationTime', 'Reservations.Utility');
-
-/**
- * ReservationTime::dateFormat()のテスト
- *
- * @author Allcreator Co., Ltd.
- * @package NetCommons\Reservations\Test\Case\Utility\ReservationTime
- */
-class ReservationsUtilityReservationTimeDateFormatTest extends NetCommonsCakeTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * dateFormat()のテスト
- *
- * @param string $time time YmdHis形式の文字列. insertFlag=1の時ユーザー系.insertFlag=0の時サーバー系であることを想定している。
- * @param mixed $timezoneOffset 値(-12.0 - 12.0)が入っていればその時差を使う。nullならtimezoneOffsetはつかわず、insertFlagだけで処理
- * @param bool $insertFlag 1はユーザー系、0はサーバー系
- * @param string $expect 期待値
- * @dataProvider dataProviderDateFormat
- *
- * @return void
- */
- public function testDateFormat($time, $timezoneOffset, $insertFlag, $expect) {
- //テスト実施
- $reservationTime = new ReservationTime();
- $result = $reservationTime->dateFormat($time, $timezoneOffset, $insertFlag);
- //チェック
- $this->assertEquals($result, $expect);
- }
-
-/**
- * dateFormatのDataProvider
- *
- * #### 戻り値
- * - string 年
- * - string 月
- * - string 期待値
- *
- * @return array
- */
- public function dataProviderDateFormat() {
- return array(
- array('20111212', '-12.5', 1, '20111212113000'),
- array('20111212', '0', 1, '20111212000000'),
- array('20111212122200', null, 1, '20111212032200'),
- //array('2011', '1',1, array('2010', '12')),
- );
- }
-
-}
diff --git a/Test/Case/Utility/ReservationTime/GetPrevMonthTest.php b/Test/Case/Utility/ReservationTime/GetPrevMonthTest.php
deleted file mode 100644
index bc1033c..0000000
--- a/Test/Case/Utility/ReservationTime/GetPrevMonthTest.php
+++ /dev/null
@@ -1,72 +0,0 @@
-
- * @author Allcreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsCakeTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationTime', 'Reservations.Utility');
-
-/**
- * ReservationTime::getPrevMonth()のテスト
- *
- * @author Allcreator Co., Ltd.
- * @package NetCommons\Reservations\Test\Case\Utility\ReservationTime
- */
-class ReservationsUtilityReservationTimeGetPrevMonthTest extends NetCommonsCakeTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * getPrevMonth()のテスト
- *
- * @param string $year 年
- * @param string $month 月
- * @param string $expect 期待値
- * @dataProvider dataProviderGetPrevMonth
- *
- * @return void
- */
- public function testGetPrevMonth($year, $month, $expect) {
- //テスト実施
- $result = ReservationTime::getPrevMonth($year, $month);
- //チェック
- $this->assertEquals($result, $expect);
- }
-
-/**
- * GetPrevMonthのDataProvider
- *
- * #### 戻り値
- * - string 年
- * - string 月
- * - string 期待値
- *
- * @return array
- */
- public function dataProviderGetPrevMonth() {
- return array(
- array('2011', '12', array('2011', '11')),
- array('2011', '1', array('2010', '12')),
- );
- }
-
-}
diff --git a/Test/Case/Utility/ReservationTime/GetTheTimeInTheLastHourTest.php b/Test/Case/Utility/ReservationTime/GetTheTimeInTheLastHourTest.php
deleted file mode 100644
index a17b67e..0000000
--- a/Test/Case/Utility/ReservationTime/GetTheTimeInTheLastHourTest.php
+++ /dev/null
@@ -1,82 +0,0 @@
-
- * @author Allcreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsCakeTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationTime', 'Reservations.Utility');
-
-/**
- * ReservationTime::getTheTimeInTheLastHour()のテスト
- *
- * @author Allcreator Co., Ltd.
- * @package NetCommons\Reservations\Test\Case\Utility\ReservationTime
- */
-class ReservationsUtilityReservationTimeGetTheTimeInTheLastHourTest extends NetCommonsCakeTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * getTheTimeInTheLastHour()のテスト
- *
- * @param string $ymdHis "Y-m-d H:i:s"形式の指定日付時刻
- * @param string $expect 期待値
- * @dataProvider dataProviderGetTheTimeInTheLastHour
- *
- * @return void
- */
- public function testGetTheTimeInTheLastHour($ymdHis, $expect) {
- //テスト実施
- $result = ReservationTime::getTheTimeInTheLastHour($ymdHis);
- //チェック
- $this->assertEquals($result, $expect);
- }
-
-/**
- * getTheTimeInTheLastHourのDataProvider
- *
- * #### 戻り値
- * - string 指定日付時刻
- * - string 期待値
- *
- * @return array
- */
- public function dataProviderGetTheTimeInTheLastHour() {
- $expect1 = array(
- '0' => '2011-12-14',
- '1' => '2011-12-14 22:00',
- '2' => '2011-12-14 23:00',
- );
-
- $expect2 = array(
- '0' => '2011-12-14',
- '1' => '2011-12-14 23:00',
- '2' => '2011-12-15 00:00',
- );
-
- return array(
- array('2011-12-14 21:13:20', $expect1),
- array('2011-12-14 22:13:20', $expect2),
- );
- }
-
-}
diff --git a/Test/Case/Utility/ReservationTime/GetTheTimeTest.php b/Test/Case/Utility/ReservationTime/GetTheTimeTest.php
deleted file mode 100644
index 942edbf..0000000
--- a/Test/Case/Utility/ReservationTime/GetTheTimeTest.php
+++ /dev/null
@@ -1,82 +0,0 @@
-
- * @author Allcreator Co., Ltd.
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('NetCommonsCakeTestCase', 'NetCommons.TestSuite');
-App::uses('ReservationTime', 'Reservations.Utility');
-
-/**
- * ReservationTime::getTheTime()のテスト
- *
- * @author Allcreator Co., Ltd.
- * @package NetCommons\Reservations\Test\Case\Utility\ReservationTime
- */
-class ReservationsUtilityReservationTimeGetTheTimeTest extends NetCommonsCakeTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- public $fixtures = array(
- );
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * getTheTime()のテスト
- *
- * @param string $ymdHis "Y-m-d H:i:s"形式の指定日付時刻
- * @param string $expect 期待値
- * @dataProvider dataProviderGetTheTime
- *
- * @return void
- */
- public function testGetTheTime($ymdHis, $expect) {
- //テスト実施
- $result = ReservationTime::getTheTime($ymdHis);
- //チェック
- $this->assertEquals($result, $expect);
- }
-
-/**
- * getTheTimeのDataProvider
- *
- * #### 戻り値
- * - string 指定日付時刻
- * - string 期待値
- *
- * @return array
- */
- public function dataProviderGetTheTime() {
- $expect1 = array(
- '0' => '2011-12-14',
- '1' => '2011-12-14 21:00',
- '2' => '2011-12-14 22:00',
- );
-
- $expect2 = array(
- '0' => '2011-12-14',
- '1' => '2011-12-14 23:00',
- '2' => '2011-12-15 00:00',
- );
-
- return array(
- array('2011-12-14 21:13:20', $expect1),
- array('2011-12-14 23:13:20', $expect2),
- );
- }
-
-}
diff --git a/Test/Case/View/Helper/empty b/Test/Case/View/Helper/empty
new file mode 100644
index 0000000..e69de29
diff --git a/Test/Fixture/BlockSettingForReservationFixture.php b/Test/Fixture/BlockSettingForReservationFixture.php
deleted file mode 100644
index 092c5c8..0000000
--- a/Test/Fixture/BlockSettingForReservationFixture.php
+++ /dev/null
@@ -1,51 +0,0 @@
-
- * @author Mitsuru Mutaguchi
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('BlockSettingFixture', 'Blocks.Test/Fixture');
-
-/**
- * Summary for BlockSettingForReservationFixture
- */
-class BlockSettingForReservationFixture extends BlockSettingFixture {
-
-/**
- * Plugin key
- *
- * @var string
- */
- public $pluginKey = 'reservations';
-
-/**
- * Model name
- *
- * @var string
- */
- public $name = 'BlockSetting';
-
-/**
- * Full Table Name
- *
- * @var string
- */
- public $table = 'block_settings';
- /*
- public $records = array(
- array(
- 'plugin_key' => 'reservations',
- 'room_id' => '2',
- 'block_key' => 'block_1',
- 'field_name' => BlockSettingBehavior::FIELD_USE_WORKFLOW,
- 'value' => '1',
- 'type' => BlockSettingBehavior::TYPE_BOOLEAN,
- ),
- );
- */
-}
diff --git a/Test/Fixture/PluginsRole4testFixture.php b/Test/Fixture/PluginsRole4testFixture.php
deleted file mode 100644
index 139befb..0000000
--- a/Test/Fixture/PluginsRole4testFixture.php
+++ /dev/null
@@ -1,72 +0,0 @@
-
- * @author Shohei Nakajima
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('PluginsRoleFixture', 'PluginManager.Test/Fixture');
-
-/**
- * Unitテスト用Fixture
- *
- * @author Shohei Nakajima
- * @package NetCommons\UserAttributes\Test\Fixture
- */
-class PluginsRole4testFixture extends PluginsRoleFixture {
-
-/**
- * Model name
- *
- * @var string
- */
- public $name = 'PluginsRole';
-
-/**
- * Full Table Name
- *
- * @var string
- */
- public $table = 'plugins_roles';
-
-/**
- * Records
- *
- * @var array
- */
- public $records = array(
- array(
- 'role_key' => 'administrator',
- 'plugin_key' => 'rooms',
- ),
- array(
- 'role_key' => 'system_administrator',
- 'plugin_key' => 'rooms',
- ),
- array(
- 'role_key' => 'administrator',
- 'plugin_key' => 'user_manager',
- ),
- array(
- 'role_key' => 'system_administrator',
- 'plugin_key' => 'user_manager',
- ),
- array(
- 'role_key' => 'room_administrator',
- 'plugin_key' => 'reservations',
- ),
- array(
- 'role_key' => 'room_administrator',
- 'plugin_key' => 'test2s',
- ),
- array(
- 'role_key' => 'system_administrator',
- 'plugin_key' => 'reservations',
- ),
- );
-
-}
diff --git a/Test/Fixture/ReservationEventFixture.php b/Test/Fixture/ReservationEventFixture.php
deleted file mode 100644
index 5ccb71c..0000000
--- a/Test/Fixture/ReservationEventFixture.php
+++ /dev/null
@@ -1,935 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * Summary for ReservationEventFixture
- */
-class ReservationEventFixture extends CakeTestFixture {
-
-/**
- * Records
- *
- * @var array
- */
- public $records = array(
- //adminが書いた予定(パブリック)
- array(
- 'id' => '1',
- 'reservation_rrule_id' => '1',
- 'key' => 'reservationplan1',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'reservationplan1',
- 'title_icon' => '/net_commons/img/title_icon/10_010_new.svg',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160908',
- 'start_time' => '150000',
- 'dtstart' => '20160908150000',
- 'end_date' => '20160909',
- 'end_time' => '150000',
- 'dtend' => '20160909150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //一般が書いた予定 一度も公開していない
- 'id' => '2',
- 'reservation_rrule_id' => '2',
- 'key' => 'reservationplan2',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'generaluser',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '3',
- 'is_active' => false,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '4',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '4',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //一般が書いた予定 一度公開している
- 'id' => '3',
- 'reservation_rrule_id' => '3',
- 'key' => 'reservationplan3',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'generaluser',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => '1',
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '4',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //editorが書いた予定 一度も公開していない
- 'id' => '4',
- 'reservation_rrule_id' => '4',
- 'key' => 'reservationplan4',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'editoruser',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '3',
- 'is_active' => false,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '3',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '3',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //editorが書いた予定 一度公開している
- 'id' => '5',
- 'reservation_rrule_id' => '5',
- 'key' => 'reservationplan5',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'editoruser',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '3',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '3',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //chief_editorが書いた予定 一度公開している
- 'id' => '6',
- 'reservation_rrule_id' => '6',
- 'key' => 'reservationplan6',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'chiefeditoruser',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '2',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '2',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(日/2回) 1
- 'id' => '7',
- 'reservation_rrule_id' => '8',
- 'key' => 'reservationplan7',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatplandaytime',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '1', //この予定のみ更新した
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1', //1
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1', //1
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(日/2回) 2
- 'id' => '8',
- 'reservation_rrule_id' => '8', //8
- 'key' => 'reservationplan7',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatplan',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '1',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //予定(期間)
- 'id' => '9',
- 'reservation_rrule_id' => '9',
- 'key' => 'reservationplan9line',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'reservationplan9line',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => 0,
- 'start_date' => '20160901',
- 'start_time' => '050000',
- 'dtstart' => '20160901050000',
- 'end_date' => '20160902',
- 'end_time' => '060000',
- 'dtend' => '20160902060000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '2',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '2',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(週/2回) 1
- 'id' => '10',
- 'reservation_rrule_id' => '10',
- 'key' => 'reservationplan10',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatplanweek',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160909',
- 'start_time' => '070000',
- 'dtstart' => '20160909070000',
- 'end_date' => '20160909',
- 'end_time' => '080000',
- 'dtend' => '20160909080000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(週/2回) 2
- 'id' => '11',
- 'reservation_rrule_id' => '10',
- 'key' => 'reservationplan10',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatplanweek',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(月/第1週日曜日/2回) 1
- 'id' => '12',
- 'reservation_rrule_id' => '12',
- 'key' => 'reservationplan12',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatplanmonth',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(月/第1週日曜日/2回) 2
- 'id' => '13',
- 'reservation_rrule_id' => '12',
- 'key' => 'reservationplan12',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatplanmonth',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(年/2回) 1
- 'id' => '14',
- 'reservation_rrule_id' => '14',
- 'key' => 'reservationplan14',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatplanyear',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(年/2回) 2
- 'id' => '15',
- 'reservation_rrule_id' => '14',
- 'key' => 'reservationplan14',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatplanyear',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(週/木/9月2日まで)
- 'id' => '16',
- 'reservation_rrule_id' => '16',
- 'key' => 'reservationplan16',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatweekThursdaySep2',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160831',
- 'start_time' => '150000',
- 'dtstart' => '20160831150000',
- 'end_date' => '20160901',
- 'end_time' => '150000',
- 'dtend' => '20160901150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(月/2か月おき2日/10月1日まで)
- 'id' => '17',
- 'reservation_rrule_id' => '17',
- 'key' => 'reservationplan17',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatmonthlyuntil',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160831',
- 'start_time' => '150000',
- 'dtstart' => '20160831150000',
- 'end_date' => '20160901',
- 'end_time' => '150000',
- 'dtend' => '20160901150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(2年ごとに,9月 / 開始日と同日 / 2017年09月01日まで)
- 'id' => '18',
- 'reservation_rrule_id' => '18',
- 'key' => 'reservationplan18',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatmonthlyuntil',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => false, //test
- 'start_date' => '20160831',
- 'start_time' => '150000',
- 'dtstart' => '20160831150000',
- 'end_date' => '20160901',
- 'end_time' => '150000',
- 'dtend' => '20160901150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(日/2日ごと/2016.9.2まで)
- 'id' => '19',
- 'reservation_rrule_id' => '19',
- 'key' => 'reservationplan19',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeat2dayuntil',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160831',
- 'start_time' => '150000',
- 'dtstart' => '20160831150000',
- 'end_date' => '20160901',
- 'end_time' => '150000',
- 'dtend' => '20160901150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(月/第2週月曜日1回)
- 'id' => '20',
- 'reservation_rrule_id' => '20',
- 'key' => 'reservationplan20',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatplanmonth',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(月/第3週火曜日1回)
- 'id' => '21',
- 'reservation_rrule_id' => '21',
- 'key' => 'reservationplan21',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatplanmonth',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(月/第4週水曜日1回)
- 'id' => '22',
- 'reservation_rrule_id' => '22',
- 'key' => 'reservationplan22',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatplanmonth',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //adminが書いた予定 繰り返しあり(月/最終週木曜日1回)
- 'id' => '23',
- 'reservation_rrule_id' => '23',
- 'key' => 'reservationplan23',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'adminrepeatplanmonth',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- //adminが書いた予定(全会員)
- array(
- 'id' => '24',
- 'reservation_rrule_id' => '24',
- 'key' => 'reservationplan24',
- 'room_id' => '4',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'reservationplan24',
- 'title_icon' => '/net_commons/img/title_icon/10_010_new.svg',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160909',
- 'start_time' => '070000',
- 'dtstart' => '20160909070000',
- 'end_date' => '20160909',
- 'end_time' => '080000',
- 'dtend' => '20160909080000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //一般が書いた予定(承認待ち)
- 'id' => '25',
- 'reservation_rrule_id' => '25',
- 'key' => 'reservationplan25',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'generaluser',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '2',
- 'is_active' => '1',
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '4',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '4',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //一般が書いた予定(差し戻し)
- 'id' => '26',
- 'reservation_rrule_id' => '26',
- 'key' => 'reservationplan26',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'generaluser',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160728',
- 'start_time' => '070951',
- 'dtstart' => '20160731150000',
- 'end_date' => '20160728',
- 'end_time' => '070951',
- 'dtend' => '20160731150000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '4',
- 'is_active' => '1',
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '4',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '4',
- 'modified' => '2016-03-24 07:09:51'
- ),
- //adminが書いた予定(プライベート)(共有あり)
- array(
- 'id' => '27',
- 'reservation_rrule_id' => '27',
- 'key' => 'reservationplan27',
- 'room_id' => '8',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'reservationplan27',
- 'title_icon' => '/net_commons/img/title_icon/10_010_new.svg',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => true,
- 'start_date' => '20160909',
- 'start_time' => '070000',
- 'dtstart' => '20160909070000',
- 'end_date' => '20160909',
- 'end_time' => '080000',
- 'dtend' => '20160909080000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '1',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '1',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '1',
- 'modified' => '2016-03-24 07:09:51'
- ),
- array( //予定(期間)(一時保存)
- 'id' => '28',
- 'reservation_rrule_id' => '0',
- 'key' => 'reservationplan28line',
- 'room_id' => '2',
- 'language_id' => '2',
- 'target_user' => '1',
- 'title' => 'reservationplan28line',
- 'title_icon' => 'Lorem ipsum dolor sit amet',
- 'location' => 'Lorem ipsum dolor sit amet',
- 'contact' => 'Lorem ipsum dolor sit amet',
- 'description' => 'testdescription',
- 'is_allday' => 0,
- 'start_date' => '20160901',
- 'start_time' => '050000',
- 'dtstart' => '20160901050000',
- 'end_date' => '20160902',
- 'end_time' => '060000',
- 'dtend' => '20160902060000',
- 'timezone' => 'Asia/Tokyo',
- 'status' => '3',
- 'is_active' => true,
- 'is_latest' => true,
- 'recurrence_event_id' => '0',
- 'exception_event_id' => '0',
- 'is_enable_mail' => false,
- 'email_send_timing' => '0',
- 'created_user' => '2',
- 'created' => '2016-03-24 07:09:51',
- 'modified_user' => '2',
- 'modified' => '2016-03-24 07:09:51'
- ),
- );
-
-/**
- * Initialize the fixture.
- *
- * @return void
- */
- public function init() {
- require_once App::pluginPath('Reservations') . 'Config' . DS . 'Schema' . DS . 'schema.php';
- $this->fields = (new ReservationsSchema())->tables[Inflector::tableize($this->name)];
- parent::init();
- }
-
-}
diff --git a/Test/Fixture/ReservationEventShareUserFixture.php b/Test/Fixture/ReservationEventShareUserFixture.php
deleted file mode 100644
index 7d6b14e..0000000
--- a/Test/Fixture/ReservationEventShareUserFixture.php
+++ /dev/null
@@ -1,54 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * Summary for ReservationEventShareUserFixture
- */
-class ReservationEventShareUserFixture extends CakeTestFixture {
-
-/**
- * Records
- *
- * @var array
- */
- public $records = array(
- array(
- 'id' => 1,
- 'reservation_event_id' => 1,
- 'share_user' => 1,
- 'created_user' => 1,
- 'created' => '2016-03-24 07:09:58',
- 'modified_user' => 1,
- 'modified' => '2016-03-24 07:09:58'
- ),
- array(
- 'id' => 2,
- 'reservation_event_id' => 27,
- 'share_user' => 3, //編集長と共有
- 'created_user' => 1,
- 'created' => '2016-03-24 07:09:58',
- 'modified_user' => 1,
- 'modified' => '2016-03-24 07:09:58'
- ),
- );
-
-/**
- * Initialize the fixture.
- *
- * @return void
- */
- public function init() {
- require_once App::pluginPath('Reservations') . 'Config' . DS . 'Schema' . DS . 'schema.php';
- $this->fields = (new ReservationsSchema())->tables[Inflector::tableize($this->name)];
- parent::init();
- }
-
-}
diff --git a/Test/Fixture/ReservationFixture.php b/Test/Fixture/ReservationFixture.php
index d85e50f..4c23211 100644
--- a/Test/Fixture/ReservationFixture.php
+++ b/Test/Fixture/ReservationFixture.php
@@ -2,11 +2,11 @@
/**
* ReservationFixture
*
- * @author Noriko Arai
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
+* @author Noriko Arai
+* @author Your Name
+* @link http://www.netcommons.org NetCommons Project
+* @license http://www.netcommons.org/license.txt NetCommons License
+* @copyright Copyright 2014, NetCommons Project
*/
/**
@@ -14,6 +14,48 @@
*/
class ReservationFixture extends CakeTestFixture {
+/**
+ * Fields
+ *
+ * @var array
+ */
+ public $fields = array(
+ 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => true, 'key' => 'primary'),
+ 'key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'イベントKey', 'charset' => 'utf8'),
+ 'room_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'index', 'comment' => 'ルームID'),
+ 'language_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 6, 'unsigned' => false, 'comment' => '言語ID'),
+ 'is_origin' => array('type' => 'boolean', 'null' => false, 'default' => '1', 'comment' => 'オリジナルかどうか'),
+ 'is_translation' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '翻訳したかどうか'),
+ 'is_original_copy' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'オリジナルのコピー。言語を新たに追加したときに使用する'),
+ 'location_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => true, 'key' => 'index'),
+ 'calendar_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => true),
+ 'title' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
+ 'title_icon' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
+ 'is_allday' => array('type' => 'boolean', 'null' => true, 'default' => '1', 'comment' => '終日かどうか | 0:終日ではない | 1:終日'),
+ 'start_date' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 8, 'collate' => 'utf8_general_ci', 'comment' => '開始日 (YYYYMMDD形式)', 'charset' => 'utf8'),
+ 'start_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 6, 'collate' => 'utf8_general_ci', 'comment' => '開始時刻 (hhmmss形式)', 'charset' => 'utf8'),
+ 'dtstart' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'key' => 'index', 'collate' => 'utf8_general_ci', 'comment' => '開始日時 (YYYYMMDDhhmmss) iCalendarのDTDSTARTからTとZを外したもの', 'charset' => 'utf8'),
+ 'end_date' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 8, 'collate' => 'utf8_general_ci', 'comment' => '終了日 (YYYYMMDD形式)', 'charset' => 'utf8'),
+ 'end_time' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 6, 'collate' => 'utf8_general_ci', 'comment' => '終了時刻 (hhmmss形式)', 'charset' => 'utf8'),
+ 'dtend' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 14, 'collate' => 'utf8_general_ci', 'comment' => '終了日時 (YYYYMMDDhhmmss形式) iCalendarのDTENDからTとZをはずしたもの', 'charset' => 'utf8'),
+ 'timezone_offset' => array('type' => 'float', 'null' => false, 'default' => '0.0', 'length' => '3,1', 'unsigned' => false, 'comment' => 'タイムゾーンオフセット-12.0~+12.0'),
+ 'description' => array('type' => 'text', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '詳細', 'charset' => 'utf8'),
+ 'status' => array('type' => 'integer', 'null' => false, 'default' => null, 'length' => 4, 'unsigned' => false, 'comment' => '公開状況 1:公開中>、2:公 開申請中、3:下書き中、4:差し戻し'),
+ 'is_active' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'アクティブなコンテンツかどうか 0:アクティブでない 1:アクティブ'),
+ 'is_latest' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '最新コンテンツかどうか 0:最新でない 1:最新'),
+ 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
+ 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
+ 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
+ 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
+ 'indexes' => array(
+ 'PRIMARY' => array('column' => 'id', 'unique' => 1),
+ 'location_id' => array('column' => array('location_id', 'dtstart'), 'unique' => 0),
+ 'room_id' => array('column' => array('room_id', 'location_id'), 'unique' => 0),
+ 'dt' => array('column' => array('dtstart', 'dtend'), 'unique' => 0)
+ ),
+ 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
+ );
+
/**
* Records
*
@@ -22,33 +64,33 @@ class ReservationFixture extends CakeTestFixture {
public $records = array(
array(
'id' => 1,
- 'block_key' => 'block_1',
- //'use_workflow' => 1,
+ 'key' => 'Lorem ipsum dolor sit amet',
+ 'room_id' => 1,
+ 'language_id' => 1,
+ 'is_origin' => 1,
+ 'is_translation' => 1,
+ 'is_original_copy' => 1,
+ 'location_id' => 1,
+ 'calendar_id' => 1,
+ 'title' => 'Lorem ipsum dolor sit amet',
+ 'title_icon' => 'Lorem ipsum dolor sit amet',
+ 'is_allday' => 1,
+ 'start_date' => 'Lorem ',
+ 'start_time' => 'Lore',
+ 'dtstart' => 'Lorem ipsum ',
+ 'end_date' => 'Lorem ',
+ 'end_time' => 'Lore',
+ 'dtend' => 'Lorem ipsum ',
+ 'timezone_offset' => 1,
+ 'description' => 'Lorem ipsum dolor sit amet, aliquet feugiat. Convallis morbi fringilla gravida, phasellus feugiat dapibus velit nunc, pulvinar eget sollicitudin venenatis cum nullam, vivamus ut a sed, mollitia lectus. Nulla vestibulum massa neque ut et, id hendrerit sit, feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.',
+ 'status' => 1,
+ 'is_active' => 1,
+ 'is_latest' => 1,
'created_user' => 1,
- 'created' => '2016-03-24 07:10:30',
+ 'created' => '2017-02-18 15:36:26',
'modified_user' => 1,
- 'modified' => '2016-03-24 07:10:30'
- ),
- array(
- 'id' => 2,
- 'block_key' => 'block_1',
- //'use_workflow' => 1,
- 'created_user' => 1,
- 'created' => '2016-03-24 07:10:30',
- 'modified_user' => 1,
- 'modified' => '2016-03-24 07:10:30'
+ 'modified' => '2017-02-18 15:36:26'
),
);
-/**
- * Initialize the fixture.
- *
- * @return void
- */
- public function init() {
- require_once App::pluginPath('Reservations') . 'Config' . DS . 'Schema' . DS . 'schema.php';
- $this->fields = (new ReservationsSchema())->tables[Inflector::tableize($this->name)];
- parent::init();
- }
-
}
diff --git a/Test/Fixture/ReservationFrameSettingFixture.php b/Test/Fixture/ReservationFrameSettingFixture.php
deleted file mode 100644
index ee0a748..0000000
--- a/Test/Fixture/ReservationFrameSettingFixture.php
+++ /dev/null
@@ -1,51 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * Summary for ReservationFrameSettingFixture
- */
-class ReservationFrameSettingFixture extends CakeTestFixture {
-
-/**
- * Records
- *
- * @var array
- */
- public $records = array(
- array(
- 'id' => 1,
- 'frame_key' => 'frame_3',
- 'display_type' => 1,
- 'start_pos' => 1,
- 'display_count' => 3,
- 'is_myroom' => 1,
- 'is_select_room' => 1,
- 'room_id' => '2',
- 'timeline_base_time' => 1,
- 'created_user' => 1,
- 'created' => '2016-03-24 07:10:18',
- 'modified_user' => 1,
- 'modified' => '2016-03-24 07:10:18'
- ),
- );
-
-/**
- * Initialize the fixture.
- *
- * @return void
- */
- public function init() {
- require_once App::pluginPath('Reservations') . 'Config' . DS . 'Schema' . DS . 'schema.php';
- $this->fields = (new ReservationsSchema())->tables[Inflector::tableize($this->name)];
- parent::init();
- }
-
-}
diff --git a/Test/Fixture/ReservationLocationFixture.php b/Test/Fixture/ReservationLocationFixture.php
deleted file mode 100644
index cd506d9..0000000
--- a/Test/Fixture/ReservationLocationFixture.php
+++ /dev/null
@@ -1,168 +0,0 @@
-
- * @author Your Name
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * Summary for ReservationLocationFixture
- */
-class ReservationLocationFixture extends CakeTestFixture {
-
-/**
- * Fields
- *
- * @var array
- */
- public $fields = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => true, 'key' => 'primary'),
- 'key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'language_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'is_translation' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '翻訳したかどうか'),
- 'is_origin' => array('type' => 'boolean', 'null' => false, 'default' => '1', 'comment' => 'オリジナルかどうか'),
- 'is_original_copy' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'オリジナルのコピー。言語を新たに追加したときに使用する'),
- 'category_id' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => true, 'key' => 'index'),
- 'location_name' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '施設名', 'charset' => 'utf8'),
- 'detail' => array('type' => 'text', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'add_authority' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'time_table' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 32, 'collate' => 'utf8_general_ci', 'comment' => '利用可能な曜日', 'charset' => 'utf8'),
- 'start_time' => array('type' => 'datetime', 'null' => false, 'default' => null),
- 'end_time' => array('type' => 'datetime', 'null' => false, 'default' => null),
- 'timezone' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'use_private' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'use_auth_flag' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'use_all_rooms' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'use_workflow' => array('type' => 'boolean', 'null' => false, 'default' => '0'),
- 'weight' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => true),
- 'contact' => array('type' => 'string', 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- 'category_id' => array('column' => array('category_id', 'weight'), 'unique' => 0)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * Records
- *
- * @var array
- */
- public $records = array(
- array(
- 'id' => 1,
- 'key' => 'location_1',
- 'language_id' => 2,
- 'category_id' => 1,
- 'location_name' => 'LocationName_1',
- 'add_authority' => 0,
- 'time_table' => 'Sun|Mon|Tue|Wed|Thu|Fri|Sat',
- 'start_time' => '2017-05-04 15:00:00',
- 'end_time' => '2017-05-05 15:00:00',
- 'timezone' => 'Asia/Tokyo',
- 'use_private' => 1,
- 'use_auth_flag' => 0,
- 'use_all_rooms' => 1,
- 'use_workflow' => 0,
- 'weight' => 1,
- 'created_user' => 1,
- 'created' => '2017-02-25 08:59:40',
- 'modified_user' => 1,
- 'modified' => 1
- ),
- array(
- 'id' => 2,
- 'key' => 'location_2',
- 'language_id' => 2,
- 'category_id' => 1,
- 'location_name' => 'LocationName_2',
- 'add_authority' => 0,
- 'time_table' => 'Sun|Mon|Tue|Wed|Thu|Fri|Sat',
- 'start_time' => '2017-05-04 15:00:00',
- 'end_time' => '2017-05-05 15:00:00',
- 'timezone' => 'Asia/Tokyo',
- 'use_private' => 1,
- 'use_auth_flag' => 0,
- 'use_all_rooms' => 1,
- 'use_workflow' => 0,
- 'weight' => 1,
- 'created_user' => 1,
- 'created' => '2017-02-25 08:59:40',
- 'modified_user' => 1,
- 'modified' => 1
- ),
- array(
- 'id' => 3,
- 'key' => 'location_3',
- 'language_id' => 2,
- 'category_id' => 1,
- 'location_name' => 'LocationName_3',
- 'add_authority' => 0,
- 'time_table' => 'Sun|Mon|Tue|Wed|Thu|Fri|Sat',
- 'start_time' => '2017-05-04 15:00:00',
- 'end_time' => '2017-05-05 15:00:00',
- 'timezone' => 'Asia/Tokyo',
- 'use_private' => 1,
- 'use_auth_flag' => 0,
- 'use_all_rooms' => 1,
- 'use_workflow' => 0,
- 'weight' => 1,
- 'created_user' => 1,
- 'created' => '2017-02-25 08:59:40',
- 'modified_user' => 1,
- 'modified' => 1
- ),
- array(
- 'id' => 4,
- 'key' => 'location_4',
- 'language_id' => 2,
- 'category_id' => 1,
- 'location_name' => 'UseWorkflowLocation',
- 'add_authority' => 0,
- 'time_table' => 'Sun|Mon|Tue|Wed|Thu|Fri|Sat',
- 'start_time' => '2017-05-04 15:00:00',
- 'end_time' => '2017-05-05 15:00:00',
- 'timezone' => 'Asia/Tokyo',
- 'use_private' => 1,
- 'use_auth_flag' => 0,
- 'use_all_rooms' => 1,
- 'use_workflow' => 1,
- 'weight' => 1,
- 'created_user' => 1,
- 'created' => '2017-02-25 08:59:40',
- 'modified_user' => 1,
- 'modified' => 1
- ),
- // 指定ルームのみ予約可能
- array(
- 'id' => 5,
- 'key' => 'location_5',
- 'language_id' => 2,
- 'category_id' => 1,
- 'location_name' => '指定ルームのみ予約可能施設',
- 'add_authority' => 0,
- 'time_table' => 'Sun|Mon|Tue|Wed|Thu|Fri|Sat',
- 'start_time' => '2017-05-04 15:00:00',
- 'end_time' => '2017-05-05 15:00:00',
- 'timezone' => 'Asia/Tokyo',
- 'use_private' => 1,
- 'use_auth_flag' => 0,
- 'use_all_rooms' => 0,
- 'use_workflow' => 0,
- 'weight' => 1,
- 'created_user' => 1,
- 'created' => '2017-02-25 08:59:40',
- 'modified_user' => 1,
- 'modified' => 1
- ),
- );
-
-}
diff --git a/Test/Fixture/ReservationLocationReservableFixture.php b/Test/Fixture/ReservationLocationReservableFixture.php
deleted file mode 100644
index 664f0c1..0000000
--- a/Test/Fixture/ReservationLocationReservableFixture.php
+++ /dev/null
@@ -1,133 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * Summary for ReservationLocationReservableFixture
- */
-class ReservationLocationReservableFixture extends CakeTestFixture {
-
-/**
- * Table name
- *
- * @var string
- */
- public $table = 'reservation_location_reservable';
-
-/**
- * Fields
- *
- * @var array
- */
- public $fields = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'location_key' => array('type' => 'string', 'null' => false, 'default' => null, 'key' => 'index', 'collate' => 'utf8_general_ci', 'comment' => '施設キー', 'charset' => 'utf8'),
- 'role_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => 'ロールキー', 'charset' => 'utf8'),
- 'room_id' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'value' => array('type' => 'boolean', 'null' => true, 'default' => null),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- 'location_key' => array('column' => 'location_key', 'unique' => 0)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * Records
- *
- * @var array
- */
- public $records = [
- [
- 'location_key' => 'location_1',
- 'role_key' => 'chief_editor',
- 'room_id' => null,
- 'value' => 1,
- ],
- [
- 'location_key' => 'location_1',
- 'role_key' => 'general_user',
- 'room_id' => null,
- 'value' => 0,
- ],
-
- [
- //'id' => 1,
- 'location_key' => 'KEY_1',
- 'role_key' => 'chief_editor',
- 'room_id' => null,
- 'value' => 1,
- ],
- [
- //'id' => 2,
- 'location_key' => 'KEY_1',
- 'role_key' => 'general_user',
- 'room_id' => null,
- 'value' => 0,
- ],
-
- // room 11
- [
- //'id' => 1,
- 'location_key' => 'KEY_2',
- 'role_key' => 'chief_editor',
- 'room_id' => 11,
- 'value' => 1,
- ],
- [
- //'id' => 2,
- 'location_key' => 'KEY_2',
- 'role_key' => 'general_user',
- 'room_id' => 11,
- 'value' => 0,
- ],
- // room 12
- [
- //'id' => 3,
- 'location_key' => 'KEY_2',
- 'role_key' => 'chief_editor',
- 'room_id' => 12,
- 'value' => 1,
- ],
- [
- //'id' => 4,
- 'location_key' => 'KEY_2',
- 'role_key' => 'general_user',
- 'room_id' => 12,
- 'value' => 0,
- ],
-
- [
- //'id' => 1,
- 'location_key' => 'KEY_3',
- 'role_key' => 'room_administrator',
- 'room_id' => null,
- 'value' => 1,
- ],
-
- [
- 'location_key' => 'location_5',
- 'role_key' => 'chief_editor',
- 'room_id' => 11,
- 'value' => 1,
- ],
- [
- 'location_key' => 'location_5',
- 'role_key' => 'general_user',
- 'room_id' => 11,
- 'value' => 1,
- ]
- ];
-
-}
diff --git a/Test/Fixture/ReservationLocationsApprovalUserFixture.php b/Test/Fixture/ReservationLocationsApprovalUserFixture.php
deleted file mode 100644
index ec7d1f8..0000000
--- a/Test/Fixture/ReservationLocationsApprovalUserFixture.php
+++ /dev/null
@@ -1,62 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * Summary for ReservationLocationsApprovalUserFixture
- */
-class ReservationLocationsApprovalUserFixture extends CakeTestFixture {
-
-/**
- * Fields
- *
- * @var array
- */
- public $fields = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary', 'comment' => 'ID'),
- 'location_key' => array('type' => 'string', 'null' => false, 'default' => '0', 'collate' => 'utf8_general_ci', 'comment' => '施設キー', 'charset' => 'utf8'),
- 'user_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'unsigned' => false, 'comment' => '承認者'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '作成者'),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '作成日時'),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => '0', 'unsigned' => false, 'comment' => '更新者'),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null, 'comment' => '更新日時'),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * Records
- *
- * @var array
- */
- public $records = array(
- array(
- 'id' => 1,
- 'location_key' => 'location_4',
- 'user_id' => 1,
- 'created_user' => 1,
- 'created' => '2017-04-22 05:04:43',
- 'modified_user' => 1,
- 'modified' => '2017-04-22 05:04:43'
- ),
- array(
- 'id' => 2,
- 'location_key' => 'location_6',
- 'user_id' => 2,
- 'created_user' => 1,
- 'created' => '2017-04-22 05:04:43',
- 'modified_user' => 1,
- 'modified' => '2017-04-22 05:04:43'
- ),
- );
-
-}
diff --git a/Test/Fixture/ReservationLocationsRoomFixture.php b/Test/Fixture/ReservationLocationsRoomFixture.php
deleted file mode 100644
index 0b46f88..0000000
--- a/Test/Fixture/ReservationLocationsRoomFixture.php
+++ /dev/null
@@ -1,59 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * Summary for ReservationLocationsRoomFixture
- */
-class ReservationLocationsRoomFixture extends CakeTestFixture {
-
-/**
- * Fields
- *
- * @var array
- */
- public $fields = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'reservation_location_key' => array('type' => 'string', 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'room_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'index'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1),
- 'room_id' => array('column' => 'room_id', 'unique' => 0)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * Records
- *
- * @var array
- */
- public $records = [
- [
- 'id' => 1,
- 'reservation_location_key' => 'Lorem ipsum dolor sit amet',
- 'room_id' => 1,
- 'created_user' => 1,
- 'created' => '2017-03-24 22:45:24',
- 'modified_user' => 1,
- 'modified' => '2017-03-24 22:45:24'
- ],
- [
- //'id' => 1,
- 'reservation_location_key' => 'location_5',
- 'room_id' => '11',
- ]
- ];
-
-}
diff --git a/Test/Fixture/ReservationRruleFixture.php b/Test/Fixture/ReservationRruleFixture.php
deleted file mode 100644
index 2c11d26..0000000
--- a/Test/Fixture/ReservationRruleFixture.php
+++ /dev/null
@@ -1,329 +0,0 @@
-
- * @author AllCreator
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * Summary for ReservationRruleFixture
- */
-class ReservationRruleFixture extends CakeTestFixture {
-
-/**
- * Records
- *
- * @var array
- */
- public $records = array(
- array(
- 'id' => 1,
- 'reservation_id' => 1,
- 'key' => 'reservationplan1',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => '',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 1,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 1,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 2,
- 'reservation_id' => 2,
- 'key' => 'reservationplan2',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => '',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 4,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 4,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 3,
- 'reservation_id' => 3,
- 'key' => 'reservationplan3',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => '',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 4,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 4,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 4,
- 'reservation_id' => 4,
- 'key' => 'reservationplan4',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => '',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 5,
- 'reservation_id' => 5,
- 'key' => 'reservationplan5',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => '',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 6,
- 'reservation_id' => 1,
- 'key' => 'reservationplan6',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => '',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 2,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 2,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 7,
- 'reservation_id' => 1,
- 'key' => 'reservationplan7',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => 'FREQ=DAILY;INTERVAL=1;COUNT=2',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 8,
- 'reservation_id' => 8,
- 'key' => 'reservationplan8',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => '',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 1,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 1,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 9,
- 'reservation_id' => 9,
- 'key' => 'reservationplan9line',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => '',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 1,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 1,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 10,
- 'reservation_id' => 1,
- 'key' => 'reservationplan10',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => 'FREQ=WEEKLY;INTERVAL=1;BYDAY=1SU;COUNT=2',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 12,
- 'reservation_id' => 1,
- 'key' => 'reservationplan12',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => 'FREQ=MONTHLY;INTERVAL=1;BYDAY=1SU;COUNT=2',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 14,
- 'reservation_id' => 1,
- 'key' => 'reservationplan14',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => 'FREQ=YEARLY;INTERVAL=1;BYMONTH=2;COUNT=2',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 16,
- 'reservation_id' => 1,
- 'key' => 'reservationplan16',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => 'FREQ=WEEKLY;INTERVAL=2;BYDAY=TH;UNTIL=20160902T150000',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 17,
- 'reservation_id' => 1,
- 'key' => 'reservationplan17',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => 'FREQ=MONTHLY;INTERVAL=2;BYMONTHDAY=2;COUNT=1',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 1, //test1
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 18,
- 'reservation_id' => 1,
- 'key' => 'reservationplan18',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => 'FREQ=YEARLY;INTERVAL=2;BYMONTH=9;BYDAY=2SA;UNTIL=20170901T150000',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 19,
- 'reservation_id' => 1,
- 'key' => 'reservationplan19',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => 'FREQ=DAILY;INTERVAL=2;UNTIL=20160902T150000',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 20,
- 'reservation_id' => 1,
- 'key' => 'reservationplan20',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => 'FREQ=MONTHLY;INTERVAL=1;BYDAY=2MO;COUNT=1',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 21,
- 'reservation_id' => 1,
- 'key' => 'reservationplan21',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => 'FREQ=MONTHLY;INTERVAL=1;BYDAY=3TU;COUNT=1',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 22,
- 'reservation_id' => 1,
- 'key' => 'reservationplan22',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => 'FREQ=MONTHLY;INTERVAL=1;BYDAY=4WE;COUNT=1',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 23,
- 'reservation_id' => 1,
- 'key' => 'reservationplan23',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => 'FREQ=MONTHLY;INTERVAL=1;BYDAY=-1TH;COUNT=1',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '2',
- 'created_user' => 3,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 3,
- 'modified' => '2016-03-24 07:10:24'
- ),
- array(
- 'id' => 27,
- 'reservation_id' => 1,
- 'key' => 'reservationplan27',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'rrule' => '',
- 'ireservation_uid' => 'Lorem ipsum dolor sit amet',
- 'ireservation_comp_name' => 'Lorem ipsum dolor sit amet',
- 'room_id' => '8',
- 'created_user' => 1,
- 'created' => '2016-03-24 07:10:24',
- 'modified_user' => 1,
- 'modified' => '2016-03-24 07:10:24'
- ),
- );
-
-/**
- * Initialize the fixture.
- *
- * @return void
- */
- public function init() {
- require_once App::pluginPath('Reservations') . 'Config' . DS . 'Schema' . DS . 'schema.php';
- $this->fields = (new ReservationsSchema())->tables[Inflector::tableize($this->name)];
- parent::init();
- }
-
-}
diff --git a/Test/Fixture/ReservationTimeframeFixture.php b/Test/Fixture/ReservationTimeframeFixture.php
deleted file mode 100644
index 1696426..0000000
--- a/Test/Fixture/ReservationTimeframeFixture.php
+++ /dev/null
@@ -1,67 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-/**
- * Summary for ReservationTimeframeFixture
- */
-class ReservationTimeframeFixture extends CakeTestFixture {
-
-/**
- * Fields
- *
- * @var array
- */
- public $fields = array(
- 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false, 'key' => 'primary'),
- 'key' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'language_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
- 'is_translation' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => '翻訳したかどうか'),
- 'is_origin' => array('type' => 'boolean', 'null' => false, 'default' => '1', 'comment' => 'オリジナルかどうか'),
- 'is_original_copy' => array('type' => 'boolean', 'null' => false, 'default' => '0', 'comment' => 'オリジナルのコピー。言語を新たに追加したときに使用する'),
- 'title' => array('type' => 'string', 'null' => false, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'start_time' => array('type' => 'string', 'null' => false, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'end_time' => array('type' => 'string', 'null' => false, 'length' => 14, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'color' => array('type' => 'string', 'null' => false, 'length' => 16, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
- 'created_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'modified_user' => array('type' => 'integer', 'null' => true, 'default' => null, 'unsigned' => false),
- 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null),
- 'indexes' => array(
- 'PRIMARY' => array('column' => 'id', 'unique' => 1)
- ),
- 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_general_ci', 'engine' => 'InnoDB')
- );
-
-/**
- * Records
- *
- * @var array
- */
- public $records = array(
- array(
- 'id' => 1,
- 'key' => 'Lorem ipsum dolor sit amet',
- 'language_id' => 1,
- 'is_translation' => 1,
- 'is_origin' => 1,
- 'is_original_copy' => 1,
- 'title' => 'Lorem ipsum dolor sit amet',
- 'start_time' => 'Lorem ipsum ',
- 'end_time' => 'Lorem ipsum ',
- 'color' => 'Lorem ipsum do',
- 'created_user' => 1,
- 'created' => '2017-03-24 22:45:39',
- 'modified_user' => 1,
- 'modified' => '2017-03-24 22:45:39'
- ),
- );
-
-}
diff --git a/Test/Fixture/RolesRoom4testFixture.php b/Test/Fixture/RolesRoom4testFixture.php
deleted file mode 100644
index d1682f1..0000000
--- a/Test/Fixture/RolesRoom4testFixture.php
+++ /dev/null
@@ -1,106 +0,0 @@
-
- * @author Shohei Nakajima
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('RolesRoomFixture', 'Rooms.Test/Fixture');
-
-/**
- * RolesRoom4testFixture
- *
- * @author Shohei Nakajima
- * @package NetCommons\Rooms\Test\Fixture
- */
-class RolesRoom4testFixture extends RolesRoomFixture {
-
-/**
- * Model name
- *
- * @var string
- */
- public $name = 'RolesRoom';
-
-/**
- * Full Table Name
- *
- * @var string
- */
- public $table = 'roles_rooms';
-
-/**
- * Records
- *
- * @var array
- */
- public $records = array(
- //パブリックスペース
- array('id' => '1', 'room_id' => '2', 'role_key' => 'room_administrator'),
- array('id' => '2', 'room_id' => '2', 'role_key' => 'chief_editor'),
- array('id' => '3', 'room_id' => '2', 'role_key' => 'editor'),
- array('id' => '4', 'room_id' => '2', 'role_key' => 'general_user'),
- array('id' => '5', 'room_id' => '2', 'role_key' => 'visitor'),
- //パブリックスペース、別ルーム(room_id=5)
- array('id' => '6', 'room_id' => '5', 'role_key' => 'room_administrator'),
- array('id' => '11', 'room_id' => '5', 'role_key' => 'chief_editor'),
- array('id' => '12', 'room_id' => '5', 'role_key' => 'editor'),
- array('id' => '13', 'room_id' => '5', 'role_key' => 'general_user'),
- array('id' => '14', 'room_id' => '5', 'role_key' => 'visitor'),
- //パブリックスペース、別ルーム(room_id=6、ブロックなし)
- array('id' => '7', 'room_id' => '6', 'role_key' => 'room_administrator'),
- //コミュニティスペース、別ルーム(room_id=7, 準備中)
- array('id' => '8', 'room_id' => '7', 'role_key' => 'room_administrator'),
- //プライベートスペース、別ルーム(room_id=8, プライベートルーム)
- array('id' => '9', 'room_id' => '8', 'role_key' => 'room_administrator'),
- //パブリックスペース、サブサブルーム(room_id=9)
- array('id' => '10', 'room_id' => '9', 'role_key' => 'room_administrator'),
- //コミュニティスペース
- array('id' => '15', 'room_id' => '4', 'role_key' => 'room_administrator'),
- array('id' => '16', 'room_id' => '4', 'role_key' => 'general_user'),
-
- [
- 'id' => 20,
- 'room_id' => 11,
- 'role_key' => 'chief_editor'
- ],
- [
- 'id' => 21,
- 'room_id' => 11,
- 'role_key' => 'general_user'
- ],
-
- [
- 'id' => 30,
- 'room_id' => 12,
- 'role_key' => 'chief_editor'
- ],
- [
- 'id' => 31,
- 'room_id' => 12,
- 'role_key' => 'general_user'
- ],
-
- [
- 'id' => 40,
- 'room_id' => 40,
- 'role_key' => 'chief_editor'
- ],
- [
- 'id' => 41,
- 'room_id' => 41,
- 'role_key' => 'general_user'
- ],
- [
- 'id' => 42,
- 'room_id' => 42,
- 'role_key' => 'room_administrator'
- ],
-
- );
-
-}
diff --git a/Test/Fixture/RolesRoomsUser4testFixture.php b/Test/Fixture/RolesRoomsUser4testFixture.php
deleted file mode 100644
index f3fb94e..0000000
--- a/Test/Fixture/RolesRoomsUser4testFixture.php
+++ /dev/null
@@ -1,189 +0,0 @@
-
- * @author Shohei Nakajima
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('RolesRoomsUserFixture', 'Rooms.Test/Fixture');
-
-/**
- * RolesRoomsUser4testFixture
- *
- * @author Shohei Nakajima
- * @package NetCommons\Rooms\Test\Fixture
- */
-class RolesRoomsUser4testFixture extends RolesRoomsUserFixture {
-
-/**
- * Model name
- *
- * @var string
- */
- public $name = 'RolesRoomsUser';
-
-/**
- * Full Table Name
- *
- * @var string
- */
- public $table = 'roles_rooms_users';
-
-/**
- * Records
- *
- * @var array
- */
- public $records = array(
- //パブリックスペース
- // * ルームID=2、ユーザID=1
- array(
- 'id' => '1',
- 'roles_room_id' => '1',
- 'user_id' => '1',
- 'room_id' => '2',
- ),
- // * ルームID=2、ユーザID=2
- array(
- 'id' => '2',
- 'roles_room_id' => '2',
- 'user_id' => '2',
- 'room_id' => '2',
- ),
- // * ルームID=2、ユーザID=3
- array(
- 'id' => '3',
- 'roles_room_id' => '3',
- 'user_id' => '3',
- 'room_id' => '2',
- ),
- // * ルームID=2、ユーザID=4
- array(
- 'id' => '4',
- 'roles_room_id' => '4',
- 'user_id' => '4',
- 'room_id' => '2',
- ),
- // * ルームID=2、ユーザID=5
- array(
- 'id' => '5',
- 'roles_room_id' => '5',
- 'user_id' => '5',
- 'room_id' => '2',
- ),
- //パブリックスペース、別ルーム(room_id=5)
- array(
- 'id' => '6',
- 'roles_room_id' => '6',
- 'user_id' => '1',
- 'room_id' => '5',
- 'last_accessed' => '2015-06-17 00:00:00',
- 'previous_accessed' => '2014-06-17 00:00:00',
- ),
- //パブリックスペース、別ルーム(room_id=6、ブロックなし)
- array(
- 'id' => '7',
- 'roles_room_id' => '7',
- 'user_id' => '1',
- 'room_id' => '6',
- ),
- //別ルーム(room_id=7, 準備中)
- array(
- 'id' => '8',
- 'roles_room_id' => '8',
- 'user_id' => '1',
- 'room_id' => '7',
- ),
- //別ルーム(room_id=8, プライベートルーム)
- array(
- 'id' => '9',
- 'roles_room_id' => '9',
- 'user_id' => '1',
- 'room_id' => '8',
- ),
- //サブサブルーム(room_id=9)
- array(
- 'id' => '10',
- 'roles_room_id' => '10',
- 'user_id' => '1',
- 'room_id' => '9',
- ),
- //---add start----
- array(
- 'id' => '11',
- 'roles_room_id' => '15', //管理者
- 'user_id' => '1',
- 'room_id' => '4', //コミュニティ
- ),
- array(
- 'id' => '12',
- 'roles_room_id' => '16', //一般
- 'user_id' => '2',
- 'room_id' => '4', //コミュニティ
- ),
- array(
- 'id' => '13',
- 'roles_room_id' => '16', //一般
- 'user_id' => '3',
- 'room_id' => '4', //コミュニティ
- ),
- array(
- 'id' => '14',
- 'roles_room_id' => '16', //一般
- 'user_id' => '4',
- 'room_id' => '4', //コミュニティ
- ),
- array(
- 'id' => '15',
- 'roles_room_id' => '16', //一般
- 'user_id' => '5',
- 'room_id' => '4', //コミュニティ
- ),
- //---add end-----
- //---add start----
- //array(
- // 'id' => '16',
- // 'roles_room_id' => '9', //管理者
- // 'user_id' => '2',
- // 'room_id' => '8', //プライベート
- //),
- //---add end-----
- [
- 'id' => '20',
- 'roles_room_id' => '20', // chief_editor
- 'user_id' => '10',
- 'room_id' => '11',
- ],
- [
- 'id' => '21',
- 'roles_room_id' => '31', // general_user
- 'user_id' => '10',
- 'room_id' => '12',
- ],
-
- // user_id:40
- [
- //'id' => '22',
- 'roles_room_id' => '40', // chief_editor
- 'user_id' => '40',
- 'room_id' => '40',
- ],
- [
- //'id' => '21',
- 'roles_room_id' => '41', // general_user
- 'user_id' => '40',
- 'room_id' => '41',
- ],
- [
- //'id' => '21',
- 'roles_room_id' => '42', // プライベートルーム room_administrator
- 'user_id' => '40',
- 'room_id' => '42',
- ],
- );
-
-}
diff --git a/Test/Fixture/Room4testFixture.php b/Test/Fixture/Room4testFixture.php
deleted file mode 100644
index 522800d..0000000
--- a/Test/Fixture/Room4testFixture.php
+++ /dev/null
@@ -1,234 +0,0 @@
-
- * @author Shohei Nakajima
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('RoomFixture', 'Rooms.Test/Fixture');
-App::uses('Space', 'Rooms.Model');
-
-/**
- * Room4testFixture
- *
- * @author Shohei Nakajima
- * @package NetCommons\Rooms\Test\Fixture
- */
-class Room4testFixture extends RoomFixture {
-
-/**
- * Model name
- *
- * @var string
- */
- public $name = 'Room';
-
-/**
- * Full Table Name
- *
- * @var string
- */
- public $table = 'rooms';
-
-/**
- * Records
- *
- * @var array
- */
- public $records = array(
- //サイト全体
- array(
- 'id' => '1',
- 'space_id' => '1',
- 'page_id_top' => null,
- 'parent_id' => null,
- 'lft' => '1',
- 'rght' => '18',
- 'active' => '1',
- 'default_role_key' => 'visitor',
- 'need_approval' => '1',
- 'default_participation' => '1',
- 'page_layout_permitted' => '0',
- 'theme' => null,
- ),
- //パブリックスペース
- array(
- 'id' => '2',
- 'space_id' => '2',
- 'page_id_top' => '1',
- //'root_id' => null,
- 'parent_id' => '1',
- 'lft' => '2',
- 'rght' => '9',
- 'active' => true,
- 'default_role_key' => 'visitor',
- 'need_approval' => true,
- 'default_participation' => true,
- 'page_layout_permitted' => true,
- 'theme' => null,
- ),
- //パブリックスペース、別ルーム(room_id=4)
- array(
- 'id' => '5',
- 'space_id' => '2',
- 'page_id_top' => '3',
- //'root_id' => '2',
- 'parent_id' => '2',
- 'lft' => '3',
- 'rght' => '6',
- 'active' => true,
- 'default_role_key' => 'visitor',
- 'need_approval' => true,
- 'default_participation' => true,
- 'page_layout_permitted' => true,
- 'theme' => null,
- ),
- //パブリックスペース、サブサブルーム(room_id=8)
- array(
- 'id' => '9',
- 'space_id' => '2',
- 'page_id_top' => '8',
- //'root_id' => '2',
- 'parent_id' => '5',
- 'lft' => '4',
- 'rght' => '5',
- 'active' => true,
- 'default_role_key' => 'visitor',
- 'need_approval' => true,
- 'default_participation' => true,
- 'page_layout_permitted' => true,
- 'theme' => null,
- ),
- //パブリックスペース、別ルーム(room_id=5、ブロックなし)
- array(
- 'id' => '6',
- 'space_id' => '2',
- 'page_id_top' => '4',
- //'root_id' => '2',
- 'parent_id' => '2',
- 'lft' => '7',
- 'rght' => '8',
- 'active' => true,
- 'default_role_key' => 'visitor',
- 'need_approval' => true,
- 'default_participation' => true,
- 'page_layout_permitted' => true,
- 'theme' => null,
- ),
- //プライベートスペース
- array(
- 'id' => '3',
- 'space_id' => '3',
- 'page_id_top' => null,
- //'root_id' => null,
- 'parent_id' => '1',
- 'lft' => '10',
- 'rght' => '13',
- 'active' => true,
- 'default_role_key' => 'room_administrator',
- 'need_approval' => false,
- 'default_participation' => false,
- 'page_layout_permitted' => false,
- 'theme' => null,
- ),
- //プライベートスペース、別ルーム(room_id=7, プライベートルーム)
- array(
- 'id' => '8',
- 'space_id' => '3',
- 'page_id_top' => '7',
- //'root_id' => '3',
- 'parent_id' => '3',
- 'lft' => '11',
- 'rght' => '12',
- 'active' => true,
- 'default_role_key' => 'room_administrator',
- 'need_approval' => '0',
- 'default_participation' => '0',
- 'page_layout_permitted' => '0',
- 'theme' => null,
- ),
- //コミュニティスペース
- array(
- 'id' => '4',
- 'space_id' => '4',
- 'page_id_top' => null,
- //'root_id' => null,
- 'parent_id' => '1',
- 'lft' => '14',
- 'rght' => '17',
- 'active' => true,
- 'default_role_key' => 'general_user',
- 'need_approval' => true,
- 'default_participation' => true,
- 'page_layout_permitted' => true,
- 'theme' => null,
- ),
- //コミュニティスペース、別ルーム(room_id=6, 準備中)
- array(
- 'id' => '7',
- 'space_id' => '4',
- 'page_id_top' => '5',
- //'root_id' => '4',
- 'parent_id' => '4',
- 'lft' => '15',
- 'rght' => '16',
- 'active' => '0',
- 'default_role_key' => 'general_user',
- 'need_approval' => true,
- 'default_participation' => false,
- 'page_layout_permitted' => true,
- 'theme' => null,
- ),
-
- // プライベート
- [
- 'id' => 10,
- 'space_id' => Space::PRIVATE_SPACE_ID,
- 'page_id_top' => '10',
- 'active' => '1',
- 'in_draft' => '0',
- ],
- [
- 'id' => 11,
- 'space_id' => Space::COMMUNITY_SPACE_ID,
- 'page_id_top' => '11',
- 'active' => '1',
- 'in_draft' => '0',
- ],
- [
- 'id' => 12,
- 'space_id' => Space::COMMUNITY_SPACE_ID,
- 'page_id_top' => '12',
- 'active' => '1',
- 'in_draft' => '0',
- ],
-
- // @see ReservationAppModelTest
- [
- 'id' => 40,
- 'space_id' => Space::COMMUNITY_SPACE_ID,
- 'page_id_top' => '4',
- 'active' => '1',
- 'in_draft' => '0',
- ],
- [
- 'id' => 41,
- 'space_id' => Space::COMMUNITY_SPACE_ID,
- 'page_id_top' => '4',
- 'active' => '1',
- 'in_draft' => '0',
- ],
- [
- 'id' => 42,
- 'space_id' => Space::PRIVATE_SPACE_ID,
- 'page_id_top' => '10',
- 'active' => '1',
- 'in_draft' => '0',
- ],
- );
-
-}
diff --git a/Test/Fixture/UserRoleSetting4testFixture.php b/Test/Fixture/UserRoleSetting4testFixture.php
deleted file mode 100644
index 4d7a161..0000000
--- a/Test/Fixture/UserRoleSetting4testFixture.php
+++ /dev/null
@@ -1,58 +0,0 @@
-
- * @author Shohei Nakajima
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-App::uses('UserRoleSettingFixture', 'UserRoles.Test/Fixture');
-
-/**
- * Room4testFixture
- *
- * @author Shohei Nakajima
- * @package NetCommons\Rooms\Test\Fixture
- */
-class UserRoleSetting4testFixture extends UserRoleSettingFixture {
-
-/**
- * Model name
- *
- * @var string
- */
- public $name = 'UserRoleSetting';
-
-/**
- * Full Table Name
- *
- * @var string
- */
- public $table = 'user_role_settings';
-
-/**
- * Records
- *
- * @var array
- */
- public $records = [
- [
- 'id' => '10',
- 'role_key' => 'general_user',
- 'origin_role_key' => 'general_user',
- 'use_private_room' => '1',
- ],
-
- // プライベートルームを使えないロール
- [
- 'id' => '11',
- 'role_key' => 'custom_user',
- 'origin_role_key' => 'general_user',
- 'use_private_room' => '0',
- ],
- ];
-
-}
diff --git a/Test/Fixture/empty b/Test/Fixture/empty
new file mode 100644
index 0000000..e69de29
diff --git a/TestSuite/ReservationsDeleteTest.php b/TestSuite/ReservationsDeleteTest.php
deleted file mode 100644
index 49d2eb5..0000000
--- a/TestSuite/ReservationsDeleteTest.php
+++ /dev/null
@@ -1,55 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-//@codeCoverageIgnoreStart;
-App::uses('NetCommonsDeleteTest', 'NetCommons.TestSuite');
-//@codeCoverageIgnoreEnd;
-
-/**
- * ReservationsDeleteTest TestCase
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\TestSuite
- * @codeCoverageIgnore
- */
-abstract class ReservationsDeleteTest extends NetCommonsDeleteTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- private $__fixtures = array();
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Fixtures load
- *
- * @param string $name The name parameter on PHPUnit_Framework_TestCase::__construct()
- * @param array $data The data parameter on PHPUnit_Framework_TestCase::__construct()
- * @param string $dataName The dataName parameter on PHPUnit_Framework_TestCase::__construct()
- * @return void
- */
- public function __construct($name = null, array $data = array(), $dataName = '') {
- if (! isset($this->fixtures)) {
- $this->fixtures = array();
- }
- $this->fixtures = array_merge($this->__fixtures, $this->fixtures);
- parent::__construct($name, $data, $dataName);
- }
-
-}
diff --git a/TestSuite/ReservationsGetTest.php b/TestSuite/ReservationsGetTest.php
deleted file mode 100644
index 03c5f27..0000000
--- a/TestSuite/ReservationsGetTest.php
+++ /dev/null
@@ -1,55 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-//@codeCoverageIgnoreStart;
-App::uses('NetCommonsGetTest', 'NetCommons.TestSuite');
-//@codeCoverageIgnoreEnd;
-
-/**
- * ReservationsGetTest TestCase
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\TestSuite
- * @codeCoverageIgnore
- */
-abstract class ReservationsGetTest extends NetCommonsGetTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- private $__fixtures = array();
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Fixtures load
- *
- * @param string $name The name parameter on PHPUnit_Framework_TestCase::__construct()
- * @param array $data The data parameter on PHPUnit_Framework_TestCase::__construct()
- * @param string $dataName The dataName parameter on PHPUnit_Framework_TestCase::__construct()
- * @return void
- */
- public function __construct($name = null, array $data = array(), $dataName = '') {
- if (! isset($this->fixtures)) {
- $this->fixtures = array();
- }
- $this->fixtures = array_merge($this->__fixtures, $this->fixtures);
- parent::__construct($name, $data, $dataName);
- }
-
-}
diff --git a/TestSuite/ReservationsModelTestCase.php b/TestSuite/ReservationsModelTestCase.php
deleted file mode 100644
index adc0004..0000000
--- a/TestSuite/ReservationsModelTestCase.php
+++ /dev/null
@@ -1,55 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-//@codeCoverageIgnoreStart;
-App::uses('NetCommonsModelTestCase', 'NetCommons.TestSuite');
-//@codeCoverageIgnoreEnd;
-
-/**
- * ReservationsModelTestCase TestCase
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\TestSuite
- * @codeCoverageIgnore
- */
-abstract class ReservationsModelTestCase extends NetCommonsModelTestCase {
-
-/**
- * Fixtures
- *
- * @var array
- */
- private $__fixtures = array();
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Fixtures load
- *
- * @param string $name The name parameter on PHPUnit_Framework_TestCase::__construct()
- * @param array $data The data parameter on PHPUnit_Framework_TestCase::__construct()
- * @param string $dataName The dataName parameter on PHPUnit_Framework_TestCase::__construct()
- * @return void
- */
- public function __construct($name = null, array $data = array(), $dataName = '') {
- if (! isset($this->fixtures)) {
- $this->fixtures = array();
- }
- $this->fixtures = array_merge($this->__fixtures, $this->fixtures);
- parent::__construct($name, $data, $dataName);
- }
-
-}
diff --git a/TestSuite/ReservationsSaveTest.php b/TestSuite/ReservationsSaveTest.php
deleted file mode 100644
index a33593a..0000000
--- a/TestSuite/ReservationsSaveTest.php
+++ /dev/null
@@ -1,55 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-//@codeCoverageIgnoreStart;
-App::uses('NetCommonsSaveTest', 'NetCommons.TestSuite');
-//@codeCoverageIgnoreEnd;
-
-/**
- * ReservationsSaveTest TestCase
- *
- * @author Ryuji AMANO
- * @package NetCommons\Reservations\TestSuite
- * @codeCoverageIgnore
- */
-abstract class ReservationsSaveTest extends NetCommonsSaveTest {
-
-/**
- * Fixtures
- *
- * @var array
- */
- private $__fixtures = array();
-
-/**
- * Plugin name
- *
- * @var string
- */
- public $plugin = 'reservations';
-
-/**
- * Fixtures load
- *
- * @param string $name The name parameter on PHPUnit_Framework_TestCase::__construct()
- * @param array $data The data parameter on PHPUnit_Framework_TestCase::__construct()
- * @param string $dataName The dataName parameter on PHPUnit_Framework_TestCase::__construct()
- * @return void
- */
- public function __construct($name = null, array $data = array(), $dataName = '') {
- if (! isset($this->fixtures)) {
- $this->fixtures = array();
- }
- $this->fixtures = array_merge($this->__fixtures, $this->fixtures);
- parent::__construct($name, $data, $dataName);
- }
-
-}
diff --git a/TestSuite/ReservationsValidateTest.php b/TestSuite/ReservationsValidateTest.php
deleted file mode 100644
index dc39c42..0000000
--- a/TestSuite/ReservationsValidateTest.php
+++ /dev/null
@@ -1,55 +0,0 @@
-
- * @author Ryuji AMANO
- * @link http://www.netcommons.org NetCommons Project
- * @license http://www.netcommons.org/license.txt NetCommons License
- * @copyright Copyright 2014, NetCommons Project
- */
-
-//@codeCoverageIgnoreStart;
-App::uses('NetCommonsValidateTest', 'NetCommons.TestSuite');
-//@codeCoverageIgnoreEnd;
-
-/**
- * ReservationsValidateTest TestCase
- *
- * @author Ryuji AMANO