diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a3225bc..592d72f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,16 +4,25 @@ on: tags: - '3*' -name: Create Release +name: create_release jobs: build: - name: Create Release + 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 @@ -26,3 +35,25 @@ jobs: 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 new file mode 100644 index 0000000..eb2068b --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,170 @@ +on: + push: + branches: + - main + - master + - availability + pull_request: + branches: + - main + - master + - availability + +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/.travis.yml b/.travis.yml deleted file mode 100644 index beefe09..0000000 --- a/.travis.yml +++ /dev/null @@ -1,42 +0,0 @@ -language: php - -php: - - 7.0 - - 7.1 - - 7.2 - - 7.3.24 - - 7.4 - -sudo: false -dist: trusty - -env: - matrix: - - NETCOMMONS_VERSION=master DB=mysql - global: - - secure: "OfqRkPfSzBeU288mu0hEktEoWMZxxcYJN9BzrDrrXgTPCev5C7URonk+71pCB3L5+pI8fD/mBanhqFgClpe1tJdmt0m6BJ6woLMSNJT/1jdxX6C55gIaKPfutO0Of1GQ8K6ibHnlgrgsk/mGwRDH01u3k0qkL3saPNrVlBgmC5E=" - - GIT_COMMITTER_NAME=to-hashimoto-3 - - GIT_COMMITTER_EMAIL=toshihide@allcreaotr.net - - GIT_AUTHOR_NAME=AllCreator - - GIT_AUTHOR_EMAIL=info@allcreator.net - -before_script: - - export NETCOMMONS_BUILD_DIR=`dirname $TRAVIS_BUILD_DIR`/NetCommons3 - - git clone git://github.com/NetCommons3/NetCommons3 $NETCOMMONS_BUILD_DIR - - cd $NETCOMMONS_BUILD_DIR - - git checkout $NETCOMMONS_VERSION - - travis_wait . tools/build/plugins/cakephp/travis/pre.sh - - . tools/build/plugins/cakephp/travis/environment.sh - -script: - - . tools/build/plugins/cakephp/travis/main.sh - -after_script: - - . tools/build/plugins/cakephp/travis/post.sh - -notifications: - email: - recipients: - - netcommons3@googlegroups.com - on_success: never # default: change - on_failure: always # default: always diff --git a/Controller/CalendarPlansController.php b/Controller/CalendarPlansController.php index 6204485..858035d 100644 --- a/Controller/CalendarPlansController.php +++ b/Controller/CalendarPlansController.php @@ -153,14 +153,15 @@ class CalendarPlansController extends CalendarsAppController { * @return void */ public function beforeFilter() { - //if (empty($this->request->params['?']['frame_id']) && - // !empty($this->request->params['key'])) { - // //新着情報から来た際、予定(calendar_eventsテーブル)keyからフレームIDを取得して、表示させる - // $frameId = $this->CalendarFrameSetting->getFrameIdByEventKey($this->request->params['key']); - // if ($frameId) { - // $this->request->params['?']['frame_id'] = $frameId; - // } - //} + if ($this->params['action'] === 'view' && + empty($this->request->query['frame_id']) && + !empty($this->request->params['key'])) { + //新着情報から来た際、予定(calendar_eventsテーブル)keyからフレームIDを取得して、表示させる + $frameId = $this->CalendarFrameSetting->getFrameIdByEventKey($this->request->params['key']); + if ($frameId) { + $this->request->query['frame_id'] = $frameId; + } + } parent::beforeFilter(); @@ -419,7 +420,7 @@ protected function _calendarPost() { $eventId = $this->CalendarActionPlan->saveCalendarPlan( $this->request->data, $procMode, $isOriginRepeat, $isTimeMod, $isRepeatMod, - $createdUserWhenUpd, $this->_myself); + $createdUserWhenUpd, $isMyPrivateRoom); if (!$eventId) { //保存失敗 CakeLog::error("保存失敗"); //FIXME: エラー処理を記述のこと。 diff --git a/Controller/CalendarsAppController.php b/Controller/CalendarsAppController.php index a689970..be7f08f 100644 --- a/Controller/CalendarsAppController.php +++ b/Controller/CalendarsAppController.php @@ -25,7 +25,7 @@ * @property \CalendarEventSelectRoom $CalendarEventSelectRoom * @property \CalendarActionPlan $CalendarActionPlan * @property \Room $Room - * @property \RoomsLanguages $RoomsLanguages + * @property \RoomsAppModel $RoomsLanguages * * @author Allcreator * @package NetCommons\Calendars\Controller @@ -55,6 +55,9 @@ class CalendarsAppController extends AppController { 'Calendars.CalendarEventSelectRoom', 'Calendars.CalendarActionPlan', 'Rooms.Room', + //HACK: RoomsLanguagesモデルがないため、RoomsAppModelが使用されている。 + //   (Cakeが良い感じにRooms.RoomsAppModelを使用するようにしている模様) + //   本来、正しいモデルを使用するように直すべきだが、多岐にわたり使用されているためそのままとする。 'Rooms.RoomsLanguages', //pending ); @@ -231,23 +234,24 @@ protected function _setCalendarCommonVars($vars) { //$order = array('TrackableCreator' . '.username'); //$order = array('TrackableCreator' . '.handlename'); $order = array( - 'TrackableCreator' . '.handlename', - 'CalendarEvent' . '.dtstart', - ); + 'TrackableCreator' . '.handlename', + 'CalendarEvent' . '.dtstart', + 'CalendarEvent' . '.id', + ); } else { //時間順 - $order = array('CalendarEvent' . '.dtstart'); + $order = array( + 'CalendarEvent' . '.dtstart', + 'CalendarEvent' . '.id', + ); } } else { //$order = array('CalendarEvent' . '.start_date'); - $order = array('CalendarEvent' . '.dtstart'); + $order = array( + 'CalendarEvent' . '.dtstart', + 'CalendarEvent' . '.id', + ); } - $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の対応表を載せておく。 $vars = $this->__setRoomInfos($vars); diff --git a/Controller/CalendarsController.php b/Controller/CalendarsController.php index 4a34010..8b636de 100644 --- a/Controller/CalendarsController.php +++ b/Controller/CalendarsController.php @@ -80,6 +80,7 @@ class CalendarsController extends CalendarsAppController { 'Calendars.CalendarTurnCalendar', 'Calendars.CalendarLegend', 'Calendars.CalendarButton', + 'Calendars.CalendarUrl', ); /** diff --git a/Model/Behavior/CalendarAppBehavior.php b/Model/Behavior/CalendarAppBehavior.php index 7fceed2..6deb266 100644 --- a/Model/Behavior/CalendarAppBehavior.php +++ b/Model/Behavior/CalendarAppBehavior.php @@ -173,7 +173,7 @@ public function insert(Model $model, $planParams, $rruleData, $eventData, $start if ($model->CalendarEvent->id > 0 && $createdUserWhenUpd !== null) { //saveが成功し、かつ、createdUserWhenUpd がnull以外なら、created_userを更新しておく。 //modifiedも更新されるが、saveの直後なので誤差の範囲として了とする。 - $model->CalendarEvent->saveField('created_user', $createdUserWhenUpd); + $model->CalendarEvent->saveField('created_user', $createdUserWhenUpd, ['callbacks' => false]); //UPDATEでセットしたcreatedUserWhenUpdの値をeventDataに記録しておく $rEventData['CalendarEvent']['created_user'] = $createdUserWhenUpd; } diff --git a/Model/Behavior/CalendarInsertPlanBehavior.php b/Model/Behavior/CalendarInsertPlanBehavior.php index 6c51c81..e91d187 100644 --- a/Model/Behavior/CalendarInsertPlanBehavior.php +++ b/Model/Behavior/CalendarInsertPlanBehavior.php @@ -165,7 +165,7 @@ public function insertEventData(Model $model, $planParams, $rruleData, if ($model->CalendarEvent->id > 0 && $createdUserWhenUpd !== null) { //saveが成功し、かつ、createdUserWhenUpd がnull以外なら、created_userを更新しておく。 //modifiedも更新されるが、saveの直後なので誤差の範囲として了とする。 - $model->CalendarEvent->saveField('created_user', $createdUserWhenUpd); + $model->CalendarEvent->saveField('created_user', $createdUserWhenUpd, ['callbacks' => false]); //UPDATEでセットしたcreatedUserWhenUpdの値をeventDataに記録しておく $eventData['CalendarEvent']['created_user'] = $createdUserWhenUpd; } diff --git a/Model/CalendarFrameSetting.php b/Model/CalendarFrameSetting.php index 496fad3..f072360 100644 --- a/Model/CalendarFrameSetting.php +++ b/Model/CalendarFrameSetting.php @@ -348,11 +348,16 @@ public function getDefaultFrameSetting() { /** * カレンダーの予定(calendar_eventsテーブル)keyからframe_idを取得し、返す * + * 特に新着情報から遷移したときにそのルームに配置してあるカレンダーに遷移するために使用する + * * @param string $eventKey $eventKey * @return int|null フレームID */ public function getFrameIdByEventKey($eventKey) { - $this->loadModels(['CalendarEvent' => 'Calendars.CalendarEvent']); + $this->loadModels([ + 'CalendarEvent' => 'Calendars.CalendarEvent', + 'Block' => 'Blocks.Block', + ]); $event = $this->CalendarEvent->find('first', [ 'recursive' => -1, @@ -377,6 +382,20 @@ public function getFrameIdByEventKey($eventKey) { $this->Frame->alias . '.plugin_key' => 'calendars', $this->Frame->alias . '.room_id' => $event[$this->CalendarEvent->alias]['room_id'], ], + 'joins' => [ + //HACK: v3をリリースした直後の古いバージョンで不具合があり、 + //   framesのroom_idとblocksのroom_idが異なる場合がある。 + //   そのためエラーになるためJOINして正しいフレームを対象とする + [ + 'type' => 'INNER', + 'table' => $this->Block->table, + 'alias' => $this->Block->alias, + 'conditions' => [ + 'Frame.block_id = Block.id', + 'Frame.room_id = Block.room_id', + ], + ], + ], 'order' => [ $this->Frame->alias . '.id' => 'asc', ], diff --git a/Model/CalendarPermission.php b/Model/CalendarPermission.php index 1d685f2..1be00a0 100644 --- a/Model/CalendarPermission.php +++ b/Model/CalendarPermission.php @@ -254,6 +254,7 @@ protected function _getCalendarConditions($readableRoomIds) { * * 速度改善の修正に伴って発生したため抑制 * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function _setPermission(&$roomBlocks, $readableRoom) { $perms = array( @@ -263,8 +264,10 @@ protected function _setPermission(&$roomBlocks, $readableRoom) { 'block_permission_editable', 'mail_editable'); $roomIds = []; + $blockKeys = []; foreach ($roomBlocks as $roomBlock) { $roomIds[] = $roomBlock['Room']['id']; + $blockKeys[] = $roomBlock['Block']['key']; } $result = $this->DefaultRolePermission->find('all', array( 'recursive' => -1, @@ -319,13 +322,15 @@ protected function _setPermission(&$roomBlocks, $readableRoom) { ), 'conditions' => array( 'RolesRoom.room_id' => $roomIds, - 'RolesRoom.role_key' => array_keys($roleKeys) + 'RolesRoom.role_key' => array_keys($roleKeys), + 'BlockRolePermission.block_key' => $blockKeys ), 'order' => array( 'RolesRoom.room_id asc', 'RolesRoom.id asc', ) ); + $tmpPermissions = $this->RolesRoom->find('all', $conditions); $basePermissions = array(); foreach ($tmpPermissions as $perm) { @@ -334,22 +339,40 @@ protected function _setPermission(&$roomBlocks, $readableRoom) { $tmpPerm = $perm['RoomRolePermission']['permission']; $basePermissions[$tmpRoomId][$tmpRoleKey][$tmpPerm] = $perm; } + + $allRoleRoomIds = $this->__getRoleRoomIds($roomIds); foreach ($roomBlocks as &$roomBlock) { $roomId = $roomBlock['Room']['id']; $permissions = array(); foreach ($defValue as $permName => $roleData) { $permissions[$permName] = array(); foreach ($roleData as $roleKey => $default) { + + // もしも大本定義のRolesRoomに基本定義がないような + // room_id, role_keyの組み合わせが来た場合は、 + // block_role_permissionの作りようがないので、スルーします + // + if (! isset($allRoleRoomIds[$roomId][$roleKey])) { + continue; + } $permissions[$permName][$roleKey] = $default; - $permissions[$permName][$roleKey]['value'] = Hash::get($basePermissions[$roomId], - $roleKey . '.' . $permName . '.BlockRolePermission.value', - Hash::get($basePermissions[$roomId], - $roleKey . '.' . $permName . '.RoomRolePermission.value', $default['value']) + + // + // すでにblock_role_permissionにカレンダー用の定義レコードがあればそれを使う + // まだないときはデフォルト値を持ってきて + // id = falseで新しいレコードを作成する準備 + // + $permissions[$permName][$roleKey]['value'] = Hash::get($basePermissions, + $roomId . '.' . $roleKey . '.' . $permName . '.BlockRolePermission.value', + $default['value'] ); - $permissions[$permName][$roleKey]['roles_room_id'] = Hash::get( - $basePermissions[$roomId], $roleKey . '.' . $permName . '.RolesRoom.roles_room_id'); - $permissions[$permName][$roleKey]['id'] = Hash::get( - $basePermissions[$roomId], $roleKey . '.' . $permName . '.BlockRolePermission.id'); + $permissions[$permName][$roleKey]['roles_room_id'] = Hash::get($basePermissions, + $roomId . '.' . $roleKey . '.' . $permName . '.RolesRoom.roles_room_id', + $allRoleRoomIds[$roomId][$roleKey] + ); + $permissions[$permName][$roleKey]['id'] = Hash::get($basePermissions, + $roomId . '.' . $roleKey . '.' . $permName . '.BlockRolePermission.id', + false); } } if ($permissions) { @@ -360,6 +383,29 @@ protected function _setPermission(&$roomBlocks, $readableRoom) { } } } +/** + * __getRoleRoomIds + * + * RoleRoomに定義されていているidを返す + * + * @param array $roomIds ルームID + * @return array + */ + private function __getRoleRoomIds($roomIds) { + $allRoleRoomPerms = $this->RolesRoom->find('all', [ + 'conditions' => [ + 'room_id' => $roomIds + ], + 'recursive' => -1, + ]); + $allRoleRoomIds = []; + foreach ($allRoleRoomPerms as $roleRoomPerm) { + $roomId = $roleRoomPerm['RolesRoom']['room_id']; + $roleKey = $roleRoomPerm['RolesRoom']['role_key']; + $allRoleRoomIds[$roomId][$roleKey] = $roleRoomPerm['RolesRoom']['id']; + } + return $allRoleRoomIds; + } /** * _setBlockSetting * diff --git a/README.md b/README.md index 2f90a10..2d46268 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,6 @@ Calendars ========= -Calendars for NetCommons3 -[![Build Status](https://travis-ci.org/NetCommons3/Calendars.svg?branch=master)](https://travis-ci.org/NetCommons3/Calendars) -[![Coverage Status](https://img.shields.io/coveralls/NetCommons3/Calendars.svg)](https://coveralls.io/r/NetCommons3/Calendars?branch=master) - -| dependencies | status | -| ------------ | ------ | -| composer.json | [![Dependency Status](https://www.versioneye.com/user/projects/5732eaddfb70190010fad6a1/badge.svg?style=flat)](https://www.versioneye.com/user/projects/5732eaddfb70190010fad6a1) | +[![Tests Status](https://github.com/NetCommons3/Calendars/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/NetCommons3/Calendars/actions/workflows/tests.yml) +[![Coverage Status](https://coveralls.io/repos/NetCommons3/Calendars/badge.svg?branch=master)](https://coveralls.io/r/NetCommons3/Calendars?branch=master) +[![Stable Version](https://img.shields.io/packagist/v/netcommons/calendars.svg?label=stable)](https://packagist.org/packages/netcommons/calendars) diff --git a/Test/Case/View/Helper/CalendarUrlHelper/GetCalendarDailyUrlTest.php b/Test/Case/View/Helper/CalendarUrlHelper/GetCalendarDailyUrlTest.php new file mode 100644 index 0000000..d950fbf --- /dev/null +++ b/Test/Case/View/Helper/CalendarUrlHelper/GetCalendarDailyUrlTest.php @@ -0,0 +1,36 @@ +beforeRender('viewFile'); + $url = $calendarUrl->getCalendarDailyUrl(2000, 3, 10); + + $expected = '/calendars/calendars/index?frame_id=10&style=daily&tab=list&year=2000&month=3&day=10'; + self::assertSame($expected, $url); + } +} \ No newline at end of file diff --git a/Test/Fixture/RolesRoom4testFixture.php b/Test/Fixture/RolesRoom4testFixture.php index fccae67..6eb020c 100644 --- a/Test/Fixture/RolesRoom4testFixture.php +++ b/Test/Fixture/RolesRoom4testFixture.php @@ -62,6 +62,9 @@ class RolesRoom4testFixture extends RolesRoomFixture { //コミュニティスペース array('id' => '15', 'room_id' => '4', 'role_key' => 'room_administrator'), array('id' => '16', 'room_id' => '4', 'role_key' => 'general_user'), + array('id' => '17', 'room_id' => '4', 'role_key' => 'chief_editor'), + array('id' => '18', 'room_id' => '4', 'role_key' => 'editor'), + array('id' => '19', 'room_id' => '4', 'role_key' => 'visitor'), ); } diff --git a/VERSION.txt b/VERSION.txt index 619b537..86fb650 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -3.3.3 +3.3.7 diff --git a/View/CalendarMailSettings/edit.ctp b/View/CalendarMailSettings/edit.ctp index 3e84770..f3cdde4 100644 --- a/View/CalendarMailSettings/edit.ctp +++ b/View/CalendarMailSettings/edit.ctp @@ -35,7 +35,7 @@ $urlParams = array( $name) : ?> > NetCommonsHtml->link($name, - $urlParams + ['?' => ['room' => $key]] + array_merge_recursive($urlParams, ['?' => ['room' => $key]]) ); ?> diff --git a/View/Elements/Calendars/daily_list.ctp b/View/Elements/Calendars/daily_list.ctp index 5df05c2..031f619 100644 --- a/View/Elements/Calendars/daily_list.ctp +++ b/View/Elements/Calendars/daily_list.ctp @@ -8,15 +8,23 @@ * @license http://www.netcommons.org/license.txt NetCommons License * @copyright Copyright 2014, NetCommons Project */ + +$dailyListBody = $this->CalendarDaily->makeDailyListBodyHtml($vars); ?> -
-
- - - CalendarDaily->makeDailyListBodyHtml($vars); - ?> - -
+ +
+
+ + + + +
+
-
\ No newline at end of file + +

+ +

+
"; //1プランの開始 //$html .= "

"; - $html .= $this->getPlanTitleDailyListHtml($vars, $year, $month, $day, $fromTime, $toTime, $plan); + $html .= $this->getPlanTitleDailyListHtml( + $vars, $year, $month, $day, $fromTime, $toTime, $plan); // 1プランの終了 $html .= "

"; $html .= "
"; } - } else { - $html .= '

' . - __d('calendars', 'No plan.') . '

'; } return $html; } diff --git a/View/Helper/CalendarUrlHelper.php b/View/Helper/CalendarUrlHelper.php index cb39c17..7a7e7fa 100644 --- a/View/Helper/CalendarUrlHelper.php +++ b/View/Helper/CalendarUrlHelper.php @@ -31,6 +31,41 @@ class CalendarUrlHelper extends AppHelper { 'Calendars.CalendarCommon', ); +/** + * @var string daily へのリンクから年月日クエリを除いたURL + */ + private $__dailyBaseUrl; + +/** + * beforeRender + * + * @param string $viewFile view file + * @return void + */ + public function beforeRender($viewFile) { + $this->__setupDailyBaseUrl(); + parent::beforeRender($viewFile); + } + +/** + * setupDailyBaseUrl + * + * @return void + */ + private function __setupDailyBaseUrl() { + $this->__dailyBaseUrl = $this->getCalendarUrl(array( + 'plugin' => 'calendars', + 'controller' => 'calendars', + 'action' => 'index', + 'block_id' => '', + 'frame_id' => Current::read('Frame.id'), + '?' => array( + 'style' => 'daily', + 'tab' => 'list', + ) + )); + } + /** * makePlanShowUrl * @@ -91,6 +126,7 @@ public function makeEditUrl($year, $month, $day, $vars) { $url = $this->getCalendarUrlAsArray($options); return $url; } + /** * makeEditUrlWithTime * @@ -131,21 +167,13 @@ public function makeEditUrlWithTime($year, $month, $day, $hour, $vars) { * @return string URL */ public function getCalendarDailyUrl($year, $month, $day) { - $url = $this->getCalendarUrl(array( - 'plugin' => 'calendars', - 'controller' => 'calendars', - 'action' => 'index', - 'block_id' => '', - 'frame_id' => Current::read('Frame.id'), - '?' => array( - 'style' => 'daily', - 'tab' => 'list', - 'year' => $year, - 'month' => $month, - 'day' => $day, - ) - )); - return $url; + return $this->__dailyBaseUrl . '&' . http_build_query( + [ + 'year' => $year, + 'month' => $month, + 'day' => $day, + ] + ); } /** diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 77b8f90..e6b92cd 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -3,9 +3,6 @@ - - - app/Plugin/Calendars @@ -20,5 +17,6 @@ +