├── .gitignore ├── src ├── ThemeAsset.php ├── MomentAsset.php ├── PrintAsset.php ├── models │ ├── CalendarModel.php │ ├── Resource.php │ └── Event.php ├── CoreAsset.php └── FullcalendarScheduler.php ├── demos ├── json.php ├── gcal.php ├── vertical-resource-view.php ├── rendering-hooks.php ├── simple.php ├── theme.php ├── scale.php ├── no-overlap.php ├── misc-callbacks.php ├── json │ └── SchedulerController.php ├── ordering.php ├── background-events.php ├── selectable.php ├── grouping.php ├── columns.php ├── dynamic-add-remove.php ├── column-grouping.php └── external-dragging.php ├── composer.json ├── LICENSE.md ├── CHANGE.MD ├── README.md └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | -------------------------------------------------------------------------------- /src/ThemeAsset.php: -------------------------------------------------------------------------------- 1 | 'print', 18 | ]; 19 | /** @var string Npm path for the print settings */ 20 | public $sourcePath = '@npm/fullcalendar/dist'; 21 | } 22 | 23 | -------------------------------------------------------------------------------- /src/models/CalendarModel.php: -------------------------------------------------------------------------------- 1 | $field)) { 20 | unset($fields[$field]); 21 | } 22 | } 23 | return $fields; 24 | } 25 | } -------------------------------------------------------------------------------- /demos/json.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'now' => '2016-05-07', 9 | 'editable' => true, // enable draggable events 10 | 'aspectRatio' => 1.8, 11 | 'scrollTime' => '00:00', // undo default 6am scrollTime 12 | 'defaultView' => 'timelineDay', 13 | 'views' => [ 14 | 'timelineThreeDays' => [ 15 | 'type' => 'timeline', 16 | 'duration' => ['days' => 3], 17 | ], 18 | ], 19 | 'resourceLabelText' => 'Rooms', 20 | 'resources' => \yii\helpers\Url::to(['scheduler/resources', 'id' => 1]), 21 | 'events' => \yii\helpers\Url::to(['scheduler/events', 'id' => 2]), 22 | ], 23 | ]); 24 | ?> -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "edofre/yii2-fullcalendar-scheduler", 3 | "description": "Yii2 widget for fullcalendar scheduler module", 4 | "require": { 5 | "php": ">=5.5.0", 6 | "yiisoft/yii2": ">=2.0.9", 7 | "yiisoft/yii2-jui": ">=2.0.6", 8 | "npm-asset/fullcalendar": "v3.8.0", 9 | "npm-asset/fullcalendar-scheduler": "1.9.1" 10 | }, 11 | "keywords": [ 12 | "fullcalendar-scheduler", 13 | "scheduler", 14 | "javascript", 15 | "event", 16 | "calendar" 17 | ], 18 | "homepage": "https://github.com/edofre/yii2-fullcalendar-scheduler", 19 | "type": "yii2-extension", 20 | "license": "MIT", 21 | "authors": [ 22 | { 23 | "name": "Edo Freriks", 24 | "email": "edofre@gmail.com" 25 | } 26 | ], 27 | "autoload": { 28 | "psr-4": { 29 | "edofre\\fullcalendarscheduler\\": "src" 30 | } 31 | }, 32 | "extra": { 33 | "branch-alias": { 34 | "dev-master": "1.1.x-dev" 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Edo Freriks 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /demos/gcal.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineMonth,timelineYear', 6 | ], 7 | 'clientOptions' => [ 8 | 'now' => '2016-05-07', 9 | 'editable' => true, // enable draggable events 10 | 'aspectRatio' => 1.8, 11 | 'scrollTime' => '00:00', // undo default 6am scrollTime 12 | 'defaultView' => 'timelineMonth', 13 | 14 | /* 15 | NOTE: unfortunately, Scheduler doesn't know how to associated events from 16 | Google Calendar with resources, so if you specify a resource list, 17 | nothing will show up :( Working on some solutions. 18 | */ 19 | 20 | // THIS KEY WON'T WORK IN PRODUCTION!!! 21 | // To make your own Google API key, follow the directions here: 22 | // http://fullcalendar.io/docs/google_calendar/ 23 | 'googleCalendarApiKey' => 'AIzaSyDcnW6WejpTOCffshGDDb4neIrXVUA1EAE', 24 | 25 | // US Holidays 26 | 'events' => 'usa__en@holiday.calendar.google.com', 27 | 28 | 'dayClick' => new \yii\web\JsExpression(" 29 | function (event) { 30 | // opens events in a popup window 31 | window.open(event.url, 'gcalevent', 'width=700,height=600'); 32 | return false; 33 | } 34 | "), 35 | ], 36 | ]); 37 | ?> -------------------------------------------------------------------------------- /src/models/Resource.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'prev,next today', 4 | 'center' => 'title', 5 | 'right' => 'agendaDay,agendaTwoDay,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'defaultView' => 'agendaDay', 9 | 'defaultDate' => '2016-05-07', 10 | 'editable' => true, 11 | 'selectable' => true, 12 | 'eventLimit' => true, // allow "more" link when too many events 13 | 'views' => [ 14 | 'agendaTwoDay' => [ 15 | 'type' => 'agenda', 16 | 'duration' => ['days' => 2], 17 | // views that are more than a day will NOT do this behavior by default 18 | // so, we need to explicitly enable it 19 | 'groupByResource' => true, 20 | //// uncomment this line to group by day FIRST with resources underneath 21 | //'groupByDateAndResource'=>true, 22 | ], 23 | ], 24 | //// uncomment this line to hide the all-day slot 25 | //allDaySlot'=>false, 26 | 'resources' => [ 27 | ['id' => 'a', 'title' => 'Room A'], 28 | ['id' => 'b', 'title' => 'Room B', 'eventColor' => 'green'], 29 | ['id' => 'c', 'title' => 'Room C', 'eventColor' => 'orange'], 30 | ['id' => 'd', 'title' => 'Room D', 'eventColor' => 'red'], 31 | ], 32 | 'events' => [ 33 | ['id' => '1', 'resourceId' => 'a', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 1'], 34 | ['id' => '2', 'resourceId' => 'a', 'start' => '2016-05-07T09:00:00', 'end' => '2016-05-07T14:00:00', 'title' => 'event 2'], 35 | ['id' => '3', 'resourceId' => 'b', 'start' => '2016-05-07T12:00:00', 'end' => '2016-05-08T06:00:00', 'title' => 'event 3'], 36 | ['id' => '4', 'resourceId' => 'c', 'start' => '2016-05-07T07:30:00', 'end' => '2016-05-07T09:30:00', 'title' => 'event 4'], 37 | ['id' => '5', 'resourceId' => 'd', 'start' => '2016-05-07T10:00:00', 'end' => '2016-05-07T15:00:00', 'title' => 'event 5'], 38 | ], 39 | 'select' => new \yii\web\JsExpression(" 40 | function(start, end, jsEvent, view, resource) { 41 | console.log( 42 | 'select', 43 | start.format(), 44 | end.format(), 45 | resource ? resource.id : '(no resource)' 46 | ); 47 | } 48 | "), 49 | 'dayClick' => new \yii\web\JsExpression(" 50 | function(date, jsEvent, view, resource) { 51 | console.log( 52 | 'dayClick', 53 | date.format(), 54 | resource ? resource.id : '(no resource)' 55 | ); 56 | } 57 | "), 58 | ], 59 | ]); 60 | ?> -------------------------------------------------------------------------------- /demos/rendering-hooks.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'now' => '2016-05-07', 9 | 'editable' => true, // enable draggable events 10 | 'aspectRatio' => 1.8, 11 | 'scrollTime' => '00:00', // undo default 6am scrollTime 12 | 'defaultView' => 'timelineDay', 13 | 'views' => [ 14 | 'timelineThreeDays' => [ 15 | 'type' => 'timeline', 16 | 'duration' => ['days' => 3], 17 | ], 18 | ], 19 | 'resourceLabelText' => 'Rooms', 20 | 'resourceText' => new \yii\web\JsExpression(" 21 | function(resource) { 22 | return 'Auditorium ' + ('' + resource.id).toUpperCase(); 23 | } 24 | "), 25 | 'resourceRender' => new \yii\web\JsExpression(" 26 | function(resource, leftCells, rightCells) { 27 | if (resource.id == 'h') { 28 | leftCells.css('background-color', 'rgb(255, 243, 206)'); 29 | rightCells.css('background-color', 'rgba(255, 243, 206, .5)'); 30 | } 31 | } 32 | "), 33 | 'resources' => [ 34 | ['id' => 'a'], 35 | ['id' => 'b', 'eventColor' => 'green'], 36 | ['id' => 'c', 'eventColor' => 'orange'], 37 | ['id' => 'd'], 38 | ['id' => 'e'], 39 | ['id' => 'f', 'eventColor' => 'red'], 40 | ['id' => 'g'], 41 | ['id' => 'h'], 42 | ['id' => 'i'], 43 | ['id' => 'j'], 44 | ['id' => 'k'], 45 | ['id' => 'l'], 46 | ['id' => 'm'], 47 | ['id' => 'n'], 48 | ['id' => 'o'], 49 | ['id' => 'p'], 50 | ['id' => 'q'], 51 | ['id' => 'r'], 52 | ['id' => 's'], 53 | ['id' => 't'], 54 | ['id' => 'u'], 55 | ['id' => 'v'], 56 | ['id' => 'w'], 57 | ['id' => 'x'], 58 | ['id' => 'y'], 59 | ['id' => 'z'], 60 | ], 61 | 'events' => [ 62 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 63 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 64 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 65 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 66 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 67 | ], 68 | ], 69 | ]); 70 | ?> -------------------------------------------------------------------------------- /src/CoreAsset.php: -------------------------------------------------------------------------------- 1 | language) ? \Yii::$app->language : $this->language; 52 | if (file_exists($this->sourcePath . "/fullcalendar/dist/locale/$language.js")) { 53 | $this->js[] = "fullcalendar/dist/locale/$language.js"; 54 | } 55 | 56 | if ($this->googleCalendar) { 57 | $this->js[] = 'fullcalendar/dist/gcal.js'; 58 | } 59 | 60 | // We need to return the parent implementation otherwise the scripts are not loaded 61 | return parent::registerAssetFiles($view); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /demos/simple.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'now' => '2016-05-07', 9 | 'editable' => true, // enable draggable events 10 | 'aspectRatio' => 1.8, 11 | 'scrollTime' => '00:00', // undo default 6am scrollTime 12 | 'defaultView' => 'timelineDay', 13 | 'views' => [ 14 | 'timelineThreeDays' => [ 15 | 'type' => 'timeline', 16 | 'duration' => [ 17 | 'days' => 3, 18 | ], 19 | ], 20 | ], 21 | 'resourceLabelText' => 'Rooms', 22 | 'resources' => [ 23 | ['id' => 'a', 'title' => 'Auditorium A'], 24 | ['id' => 'b', 'title' => 'Auditorium B', 'eventColor' => 'green'], 25 | ['id' => 'c', 'title' => 'Auditorium C', 'eventColor' => 'orange'], 26 | [ 27 | 'id' => 'd', 'title' => 'Auditorium D', 28 | 'children' => [ 29 | ['id' => 'd1', 'title' => 'Room D1'], 30 | ['id' => 'd2', 'title' => 'Room D2'], 31 | ], 32 | ], 33 | ['id' => 'e', 'title' => 'Auditorium E'], 34 | ['id' => 'f', 'title' => 'Auditorium F', 'eventColor' => 'red'], 35 | ['id' => 'g', 'title' => 'Auditorium G'], 36 | ['id' => 'h', 'title' => 'Auditorium H'], 37 | ['id' => 'i', 'title' => 'Auditorium I'], 38 | ['id' => 'j', 'title' => 'Auditorium J'], 39 | ['id' => 'k', 'title' => 'Auditorium K'], 40 | ['id' => 'l', 'title' => 'Auditorium L'], 41 | ['id' => 'm', 'title' => 'Auditorium M'], 42 | ['id' => 'n', 'title' => 'Auditorium N'], 43 | ['id' => 'o', 'title' => 'Auditorium O'], 44 | ['id' => 'p', 'title' => 'Auditorium P'], 45 | ['id' => 'q', 'title' => 'Auditorium Q'], 46 | ['id' => 'r', 'title' => 'Auditorium R'], 47 | ['id' => 's', 'title' => 'Auditorium S'], 48 | ['id' => 't', 'title' => 'Auditorium T'], 49 | ['id' => 'u', 'title' => 'Auditorium U'], 50 | ['id' => 'v', 'title' => 'Auditorium V'], 51 | ['id' => 'w', 'title' => 'Auditorium W'], 52 | ['id' => 'x', 'title' => 'Auditorium X'], 53 | ['id' => 'y', 'title' => 'Auditorium Y'], 54 | ['id' => 'z', 'title' => 'Auditorium Z'], 55 | ], 56 | 'events' => [ 57 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 58 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 59 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 60 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 61 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 62 | ], 63 | ], 64 | ]); 65 | 66 | ?> -------------------------------------------------------------------------------- /demos/theme.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'theme' => true, 9 | 'now' => '2016-05-07', 10 | 'editable' => true, // enable draggable events 11 | 'aspectRatio' => 1.8, 12 | 'scrollTime' => '00:00', // undo default 6am scrollTime 13 | 'defaultView' => 'timelineDay', 14 | 'views' => [ 15 | 'timelineThreeDays' => [ 16 | 'type' => 'timeline', 17 | 'duration' => ['days' => 3], 18 | ], 19 | ], 20 | 'resourceLabelText' => 'Rooms', 21 | 'resources' => [ 22 | ['id' => 'a', 'title' => 'Auditorium A'], 23 | ['id' => 'b', 'title' => 'Auditorium B', 'eventColor' => 'green'], 24 | ['id' => 'c', 'title' => 'Auditorium C', 'eventColor' => 'orange'], 25 | [ 26 | 'id' => 'd', 'title' => 'Auditorium D', 27 | 'children' => [ 28 | ['id' => 'd1', 'title' => 'Room D1'], 29 | ['id' => 'd2', 'title' => 'Room D2'], 30 | ], 31 | ], 32 | ['id' => 'e', 'title' => 'Auditorium E'], 33 | ['id' => 'f', 'title' => 'Auditorium F', 'eventColor' => 'red'], 34 | ['id' => 'g', 'title' => 'Auditorium G'], 35 | ['id' => 'h', 'title' => 'Auditorium H'], 36 | ['id' => 'i', 'title' => 'Auditorium I'], 37 | ['id' => 'j', 'title' => 'Auditorium J'], 38 | ['id' => 'k', 'title' => 'Auditorium K'], 39 | ['id' => 'l', 'title' => 'Auditorium L'], 40 | ['id' => 'm', 'title' => 'Auditorium M'], 41 | ['id' => 'n', 'title' => 'Auditorium N'], 42 | ['id' => 'o', 'title' => 'Auditorium O'], 43 | ['id' => 'p', 'title' => 'Auditorium P'], 44 | ['id' => 'q', 'title' => 'Auditorium Q'], 45 | ['id' => 'r', 'title' => 'Auditorium R'], 46 | ['id' => 's', 'title' => 'Auditorium S'], 47 | ['id' => 't', 'title' => 'Auditorium T'], 48 | ['id' => 'u', 'title' => 'Auditorium U'], 49 | ['id' => 'v', 'title' => 'Auditorium V'], 50 | ['id' => 'w', 'title' => 'Auditorium W'], 51 | ['id' => 'x', 'title' => 'Auditorium X'], 52 | ['id' => 'y', 'title' => 'Auditorium Y'], 53 | ['id' => 'z', 'title' => 'Auditorium Z'], 54 | ], 55 | 'events' => [ 56 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 57 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 58 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 59 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 60 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 61 | ], 62 | ], 63 | ]); 64 | ?> -------------------------------------------------------------------------------- /demos/scale.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineTenDay,timelineMonth,timelineYear', 6 | ], 7 | 'clientOptions' => [ 8 | 'now' => '2016-05-07', 9 | 'editable' => true, 10 | 'aspectRatio' => 1.8, 11 | 'scrollTime' => '00:00', 12 | 'defaultView' => 'timelineDay', 13 | 'views' => [ 14 | 'timelineDay' => [ 15 | 'buttonText' => ':15 slots', 16 | 'slotDuration' => '00:15', 17 | ], 18 | 'timelineTenDay' => [ 19 | 'type' => 'timeline', 20 | 'duration' => ['days' => 10], 21 | ], 22 | ], 23 | 'resourceAreaWidth' => '25%', 24 | 'resourceLabelText' => 'Rooms', 25 | 'resources' => [ 26 | ['id' => 'a', 'title' => 'Auditorium A'], 27 | ['id' => 'b', 'title' => 'Auditorium B', 'eventColor' => 'green'], 28 | ['id' => 'c', 'title' => 'Auditorium C', 'eventColor' => 'orange'], 29 | [ 30 | 'id' => 'd', 'title' => 'Auditorium D', 31 | 'children' => [ 32 | ['id' => 'd1', 'title' => 'Room D1'], 33 | ['id' => 'd2', 'title' => 'Room D2'], 34 | ], 35 | ], 36 | ['id' => 'e', 'title' => 'Auditorium E'], 37 | ['id' => 'f', 'title' => 'Auditorium F', 'eventColor' => 'red'], 38 | ['id' => 'g', 'title' => 'Auditorium G'], 39 | ['id' => 'h', 'title' => 'Auditorium H'], 40 | ['id' => 'i', 'title' => 'Auditorium I'], 41 | ['id' => 'j', 'title' => 'Auditorium J'], 42 | ['id' => 'k', 'title' => 'Auditorium K'], 43 | ['id' => 'l', 'title' => 'Auditorium L'], 44 | ['id' => 'm', 'title' => 'Auditorium M'], 45 | ['id' => 'n', 'title' => 'Auditorium N'], 46 | ['id' => 'o', 'title' => 'Auditorium O'], 47 | ['id' => 'p', 'title' => 'Auditorium P'], 48 | ['id' => 'q', 'title' => 'Auditorium Q'], 49 | ['id' => 'r', 'title' => 'Auditorium R'], 50 | ['id' => 's', 'title' => 'Auditorium S'], 51 | ['id' => 't', 'title' => 'Auditorium T'], 52 | ['id' => 'u', 'title' => 'Auditorium U'], 53 | ['id' => 'v', 'title' => 'Auditorium V'], 54 | ['id' => 'w', 'title' => 'Auditorium W'], 55 | ['id' => 'x', 'title' => 'Auditorium X'], 56 | ['id' => 'y', 'title' => 'Auditorium Y'], 57 | ['id' => 'z', 'title' => 'Auditorium Z'], 58 | ], 59 | 'events' => [ 60 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 61 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 62 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 63 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 64 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 65 | ], 66 | ], 67 | ]); 68 | ?> -------------------------------------------------------------------------------- /demos/no-overlap.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'now' => '2016-05-07', 9 | 'editable' => true, // enable draggable events 10 | 'aspectRatio' => 1.8, 11 | 'scrollTime' => '00:00', // undo default 6am scrollTime 12 | 'defaultView' => 'timelineDay', 13 | 'views' => [ 14 | 'timelineThreeDays' => [ 15 | 'type' => 'timeline', 16 | 'duration' => ['days' => 3], 17 | ], 18 | ], 19 | 'eventOverlap' => false, // will cause the event to take up entire resource height 20 | 'resourceAreaWidth' => '25%', 21 | 'resourceLabelText' => 'Rooms', 22 | 'resources' => [ 23 | ['id' => 'a', 'title' => 'Auditorium A'], 24 | ['id' => 'b', 'title' => 'Auditorium B', 'eventColor' => 'green'], 25 | ['id' => 'c', 'title' => 'Auditorium C', 'eventColor' => 'orange'], 26 | [ 27 | 'id' => 'd', 'title' => 'Auditorium D', 28 | 'children' => [ 29 | ['id' => 'd1', 'title' => 'Room D1'], 30 | ['id' => 'd2', 'title' => 'Room D2'], 31 | ], 32 | ], 33 | ['id' => 'e', 'title' => 'Auditorium E'], 34 | ['id' => 'f', 'title' => 'Auditorium F', 'eventColor' => 'red'], 35 | ['id' => 'g', 'title' => 'Auditorium G'], 36 | ['id' => 'h', 'title' => 'Auditorium H'], 37 | ['id' => 'i', 'title' => 'Auditorium I'], 38 | ['id' => 'j', 'title' => 'Auditorium J'], 39 | ['id' => 'k', 'title' => 'Auditorium K'], 40 | ['id' => 'l', 'title' => 'Auditorium L'], 41 | ['id' => 'm', 'title' => 'Auditorium M'], 42 | ['id' => 'n', 'title' => 'Auditorium N'], 43 | ['id' => 'o', 'title' => 'Auditorium O'], 44 | ['id' => 'p', 'title' => 'Auditorium P'], 45 | ['id' => 'q', 'title' => 'Auditorium Q'], 46 | ['id' => 'r', 'title' => 'Auditorium R'], 47 | ['id' => 's', 'title' => 'Auditorium S'], 48 | ['id' => 't', 'title' => 'Auditorium T'], 49 | ['id' => 'u', 'title' => 'Auditorium U'], 50 | ['id' => 'v', 'title' => 'Auditorium V'], 51 | ['id' => 'w', 'title' => 'Auditorium W'], 52 | ['id' => 'x', 'title' => 'Auditorium X'], 53 | ['id' => 'y', 'title' => 'Auditorium Y'], 54 | ['id' => 'z', 'title' => 'Auditorium Z'], 55 | ], 56 | 'events' => [ 57 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 58 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 59 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 60 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 61 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 62 | ], 63 | ], 64 | ]); 65 | ?> -------------------------------------------------------------------------------- /demos/misc-callbacks.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'now' => '2016-05-07', 9 | 'editable' => true, // enable draggable events 10 | 'aspectRatio' => 1.8, 11 | 'scrollTime' => '00:00', // undo default 6am scrollTime 12 | 'defaultView' => 'timelineDay', 13 | 'views' => [ 14 | 'timelineThreeDays' => [ 15 | 'type' => 'timeline', 16 | 'duration' => ['days' => 3], 17 | ], 18 | ], 19 | // the point if this demo is to demonstrate dayClick... 20 | 'dayClick' => new \yii\web\JsExpression(" 21 | function(date, jsEvent, view, resourceObj) { 22 | console.log('dayClick', date.format(), resourceObj); 23 | } 24 | "), 25 | 'resourceLabelText' => 'Rooms', 26 | 'resources' => [ 27 | ['id' => 'a', 'title' => 'Auditorium A'], 28 | ['id' => 'b', 'title' => 'Auditorium B', 'eventColor' => 'green'], 29 | ['id' => 'c', 'title' => 'Auditorium C', 'eventColor' => 'orange'], 30 | [ 31 | 'id' => 'd', 'title' => 'Auditorium D', 32 | 'children' => [ 33 | ['id' => 'd1', 'title' => 'Room D1'], 34 | ['id' => 'd2', 'title' => 'Room D2'], 35 | ], 36 | ], 37 | ['id' => 'e', 'title' => 'Auditorium E'], 38 | ['id' => 'f', 'title' => 'Auditorium F', 'eventColor' => 'red'], 39 | ['id' => 'g', 'title' => 'Auditorium G'], 40 | ['id' => 'h', 'title' => 'Auditorium H'], 41 | ['id' => 'i', 'title' => 'Auditorium I'], 42 | ['id' => 'j', 'title' => 'Auditorium J'], 43 | ['id' => 'k', 'title' => 'Auditorium K'], 44 | ['id' => 'l', 'title' => 'Auditorium L'], 45 | ['id' => 'm', 'title' => 'Auditorium M'], 46 | ['id' => 'n', 'title' => 'Auditorium N'], 47 | ['id' => 'o', 'title' => 'Auditorium O'], 48 | ['id' => 'p', 'title' => 'Auditorium P'], 49 | ['id' => 'q', 'title' => 'Auditorium Q'], 50 | ['id' => 'r', 'title' => 'Auditorium R'], 51 | ['id' => 's', 'title' => 'Auditorium S'], 52 | ['id' => 't', 'title' => 'Auditorium T'], 53 | ['id' => 'u', 'title' => 'Auditorium U'], 54 | ['id' => 'v', 'title' => 'Auditorium V'], 55 | ['id' => 'w', 'title' => 'Auditorium W'], 56 | ['id' => 'x', 'title' => 'Auditorium X'], 57 | ['id' => 'y', 'title' => 'Auditorium Y'], 58 | ['id' => 'z', 'title' => 'Auditorium Z'], 59 | ], 60 | 'events' => [ 61 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 62 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 63 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 64 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 65 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 66 | ], 67 | ], 68 | ]); 69 | ?> -------------------------------------------------------------------------------- /demos/json/SchedulerController.php: -------------------------------------------------------------------------------- 1 | response->format = \yii\web\Response::FORMAT_JSON; 26 | 27 | return [ 28 | new Resource(["id" => "a", "title" => "Auditorium A"]), 29 | new Resource(["id" => "b", "title" => "Auditorium B", "eventColor" => "green"]), 30 | new Resource(["id" => "c", "title" => "Auditorium C", "eventColor" => "orange"]), 31 | new Resource([ 32 | "id" => "d", "title" => "Auditorium D", "children" => [ 33 | new Resource(["id" => "d1", "title" => "Room D1"]), 34 | new Resource(["id" => "d2", "title" => "Room D2"]), 35 | ], 36 | ]), 37 | new Resource(["id" => "e", "title" => "Auditorium E"]), 38 | new Resource(["id" => "f", "title" => "Auditorium F", "eventColor" => "red"]), 39 | new Resource(["id" => "g", "title" => "Auditorium G"]), 40 | new Resource(["id" => "h", "title" => "Auditorium H"]), 41 | new Resource(["id" => "i", "title" => "Auditorium I"]), 42 | new Resource(["id" => "j", "title" => "Auditorium J"]), 43 | new Resource(["id" => "k", "title" => "Auditorium K"]), 44 | new Resource(["id" => "l", "title" => "Auditorium L"]), 45 | new Resource(["id" => "m", "title" => "Auditorium M"]), 46 | new Resource(["id" => "n", "title" => "Auditorium N"]), 47 | new Resource(["id" => "o", "title" => "Auditorium O"]), 48 | new Resource(["id" => "p", "title" => "Auditorium P"]), 49 | new Resource(["id" => "q", "title" => "Auditorium Q"]), 50 | new Resource(["id" => "r", "title" => "Auditorium R"]), 51 | new Resource(["id" => "s", "title" => "Auditorium S"]), 52 | new Resource(["id" => "t", "title" => "Auditorium T"]), 53 | new Resource(["id" => "u", "title" => "Auditorium U"]), 54 | new Resource(["id" => "v", "title" => "Auditorium V"]), 55 | new Resource(["id" => "w", "title" => "Auditorium W"]), 56 | new Resource(["id" => "x", "title" => "Auditorium X"]), 57 | new Resource(["id" => "y", "title" => "Auditorium Y"]), 58 | new Resource(["id" => "z", "title" => "Auditorium Z"]), 59 | ]; 60 | } 61 | 62 | /** 63 | * @param $id 64 | * @param $start 65 | * @param $end 66 | * @return array 67 | */ 68 | public function actionEvents($id, $start, $end) 69 | { 70 | \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 71 | return [ 72 | new Event(["id" => "1", "resourceId" => "b", "start" => "2016-05-07T02:00:00", "end" => "2016-05-07T07:00:00", "title" => "event 1"]), 73 | new Event(["id" => "2", "resourceId" => "c", "start" => "2016-05-07T05:00:00", "end" => "2016-05-07T22:00:00", "title" => "event 2"]), 74 | new Event(["id" => "3", "resourceId" => "d", "start" => "2016-05-06", "end" => "2016-05-08", "title" => "event 3"]), 75 | new Event(["id" => "4", "resourceId" => "e", "start" => "2016-05-07T03:00:00", "end" => "2016-05-07T08:00:00", "title" => "event 4"]), 76 | new Event(["id" => "5", "resourceId" => "f", "start" => "2016-05-07T00:30:00", "end" => "2016-05-07T02:30:00", "title" => "event 5"]), 77 | ]; 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /demos/ordering.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'now' => '2016-05-07', 9 | 'editable' => true, // enable draggable events 10 | 'aspectRatio' => 1.8, 11 | 'scrollTime' => '00:00', // undo default 6am scrollTime 12 | 'defaultView' => 'timelineDay', 13 | 'views' => [ 14 | 'timelineThreeDays' => [ 15 | 'type' => 'timeline', 16 | 'duration' => ['days' => 3], 17 | ], 18 | ], 19 | 'resourceAreaWidth' => '30%', 20 | 'resourceColumns' => [ 21 | [ 22 | 'labelText' => 'Room', 23 | 'field' => 'title', 24 | ], 25 | [ 26 | 'labelText' => 'Occupancy', 27 | 'field' => 'occupancy', 28 | ], 29 | ], 30 | 'resourceOrder' => '-occupancy,title', // when occupancy tied, order by title 31 | 'resources' => [ 32 | ['id' => 'a', 'title' => 'Auditorium A', 'occupancy' => 40], 33 | ['id' => 'b', 'title' => 'Auditorium B', 'occupancy' => 40, 'eventColor' => 'green'], 34 | ['id' => 'c', 'title' => 'Auditorium C', 'occupancy' => 40, 'eventColor' => 'orange'], 35 | ['id' => 'd', 'title' => 'Auditorium D', 'occupancy' => 40,], 36 | ['id' => 'e', 'title' => 'Auditorium E', 'occupancy' => 40], 37 | ['id' => 'f', 'title' => 'Auditorium F', 'occupancy' => 40, 'eventColor' => 'red'], 38 | ['id' => 'g', 'title' => 'Auditorium G', 'occupancy' => 40], 39 | ['id' => 'h', 'title' => 'Auditorium H', 'occupancy' => 40], 40 | ['id' => 'i', 'title' => 'Auditorium I', 'occupancy' => 50], 41 | ['id' => 'j', 'title' => 'Auditorium J', 'occupancy' => 50], 42 | ['id' => 'k', 'title' => 'Auditorium K', 'occupancy' => 40], 43 | ['id' => 'l', 'title' => 'Auditorium L', 'occupancy' => 40], 44 | ['id' => 'm', 'title' => 'Auditorium M', 'occupancy' => 40], 45 | ['id' => 'n', 'title' => 'Auditorium N', 'occupancy' => 80], 46 | ['id' => 'o', 'title' => 'Auditorium O', 'occupancy' => 80], 47 | ['id' => 'p', 'title' => 'Auditorium P', 'occupancy' => 40], 48 | ['id' => 'q', 'title' => 'Auditorium Q', 'occupancy' => 40], 49 | ['id' => 'r', 'title' => 'Auditorium R', 'occupancy' => 40], 50 | ['id' => 's', 'title' => 'Auditorium S', 'occupancy' => 40], 51 | ['id' => 't', 'title' => 'Auditorium T', 'occupancy' => 40], 52 | ['id' => 'u', 'title' => 'Auditorium U', 'occupancy' => 40], 53 | ['id' => 'v', 'title' => 'Auditorium V', 'occupancy' => 40], 54 | ['id' => 'w', 'title' => 'Auditorium W', 'occupancy' => 40], 55 | ['id' => 'x', 'title' => 'Auditorium X', 'occupancy' => 40], 56 | ['id' => 'y', 'title' => 'Auditorium Y', 'occupancy' => 40], 57 | ['id' => 'z', 'title' => 'Auditorium Z', 'occupancy' => 40], 58 | ], 59 | 'events' => [ 60 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 61 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 62 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 63 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 64 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 65 | ], 66 | ], 67 | ]); 68 | ?> -------------------------------------------------------------------------------- /src/models/Event.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'now' => '2016-05-07', 9 | 'editable' => true, // enable draggable events 10 | 'aspectRatio' => 1.8, 11 | 'scrollTime' => '00:00', // undo default 6am scrollTime 12 | 'defaultView' => 'timelineDay', 13 | 'views' => [ 14 | 'timelineThreeDays' => [ 15 | 'type' => 'timeline', 16 | 'duration' => ['days' => 3], 17 | ], 18 | ], 19 | 'resourceLabelText' => 'Rooms', 20 | 'resources' => [ 21 | ['id' => 'a', 'title' => 'Auditorium A'], 22 | ['id' => 'b', 'title' => 'Auditorium B', 'eventColor' => 'green'], 23 | ['id' => 'c', 'title' => 'Auditorium C', 'eventColor' => 'orange'], 24 | [ 25 | 'id' => 'd', 26 | 'title' => 'Auditorium D', 27 | 'children' => [ 28 | ['id' => 'd1', 'title' => 'Room D1'], 29 | ['id' => 'd2', 'title' => 'Room D2'], 30 | ], 31 | ], 32 | ['id' => 'e', 'title' => 'Auditorium E'], 33 | ['id' => 'f', 'title' => 'Auditorium F', 'eventColor' => 'red'], 34 | ['id' => 'g', 'title' => 'Auditorium G'], 35 | ['id' => 'h', 'title' => 'Auditorium H'], 36 | ['id' => 'i', 'title' => 'Auditorium I'], 37 | ['id' => 'j', 'title' => 'Auditorium J'], 38 | ['id' => 'k', 'title' => 'Auditorium K'], 39 | ['id' => 'l', 'title' => 'Auditorium L'], 40 | ['id' => 'm', 'title' => 'Auditorium M'], 41 | ['id' => 'n', 'title' => 'Auditorium N'], 42 | ['id' => 'o', 'title' => 'Auditorium O'], 43 | ['id' => 'p', 'title' => 'Auditorium P'], 44 | ['id' => 'q', 'title' => 'Auditorium Q'], 45 | ['id' => 'r', 'title' => 'Auditorium R'], 46 | ['id' => 's', 'title' => 'Auditorium S'], 47 | ['id' => 't', 'title' => 'Auditorium T'], 48 | ['id' => 'u', 'title' => 'Auditorium U'], 49 | ['id' => 'v', 'title' => 'Auditorium V'], 50 | ['id' => 'w', 'title' => 'Auditorium W'], 51 | ['id' => 'x', 'title' => 'Auditorium X'], 52 | ['id' => 'y', 'title' => 'Auditorium Y'], 53 | ['id' => 'z', 'title' => 'Auditorium Z'], 54 | ], 55 | 'events' => [ 56 | // background event, associated with a resource 57 | ['id' => 'bg1', 'resourceId' => 'b', 'rendering' => 'background', 'start' => '2016-05-07T01:00:00', 'end' => '2016-05-07T04:00:00'], 58 | // background event, NOT associated with a resource 59 | ['id' => 'bg2', 'rendering' => 'background', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T08:00:00'], 60 | // normal events... 61 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 62 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 63 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 64 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 65 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 66 | ], 67 | ], 68 | ]); 69 | ?> -------------------------------------------------------------------------------- /demos/selectable.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'selectable' => true, 9 | 'selectHelper' => true, 10 | 'now' => '2016-05-07', 11 | 'editable' => true, // enable draggable events 12 | 'aspectRatio' => 1.8, 13 | 'scrollTime' => '00:00', // undo default 6am scrollTime 14 | 'defaultView' => 'timelineDay', 15 | 'views' => [ 16 | 'timelineThreeDays' => [ 17 | 'type' => 'timeline', 18 | 'duration' => ['days' => 3], 19 | ], 20 | ], 21 | 'resourceLabelText' => 'Rooms', 22 | 'resources' => [ 23 | ['id' => 'a', 'title' => 'Auditorium A'], 24 | ['id' => 'b', 'title' => 'Auditorium B', 'eventColor' => 'green'], 25 | ['id' => 'c', 'title' => 'Auditorium C', 'eventColor' => 'orange'], 26 | [ 27 | 'id' => 'd', 'title' => 'Auditorium D', 28 | 'children' => [ 29 | ['id' => 'd1', 'title' => 'Room D1'], 30 | ['id' => 'd2', 'title' => 'Room D2'], 31 | ], 32 | ], 33 | ['id' => 'e', 'title' => 'Auditorium E'], 34 | ['id' => 'f', 'title' => 'Auditorium F', 'eventColor' => 'red'], 35 | ['id' => 'g', 'title' => 'Auditorium G'], 36 | ['id' => 'h', 'title' => 'Auditorium H'], 37 | ['id' => 'i', 'title' => 'Auditorium I'], 38 | ['id' => 'j', 'title' => 'Auditorium J'], 39 | ['id' => 'k', 'title' => 'Auditorium K'], 40 | ['id' => 'l', 'title' => 'Auditorium L'], 41 | ['id' => 'm', 'title' => 'Auditorium M'], 42 | ['id' => 'n', 'title' => 'Auditorium N'], 43 | ['id' => 'o', 'title' => 'Auditorium O'], 44 | ['id' => 'p', 'title' => 'Auditorium P'], 45 | ['id' => 'q', 'title' => 'Auditorium Q'], 46 | ['id' => 'r', 'title' => 'Auditorium R'], 47 | ['id' => 's', 'title' => 'Auditorium S'], 48 | ['id' => 't', 'title' => 'Auditorium T'], 49 | ['id' => 'u', 'title' => 'Auditorium U'], 50 | ['id' => 'v', 'title' => 'Auditorium V'], 51 | ['id' => 'w', 'title' => 'Auditorium W'], 52 | ['id' => 'x', 'title' => 'Auditorium X'], 53 | ['id' => 'y', 'title' => 'Auditorium Y'], 54 | ['id' => 'z', 'title' => 'Auditorium Z'], 55 | ], 56 | 'events' => [ 57 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 58 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 59 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 60 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 61 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 62 | ], 63 | 'select' => new \yii\web\JsExpression(" 64 | function(start, end, jsEvent, view, resource) { 65 | console.log( 66 | 'select callback', 67 | start.format(), 68 | end.format(), 69 | resource ? resource.id : '(no resource)' 70 | ); 71 | } 72 | "), 73 | 'dayClick' => new \yii\web\JsExpression(" 74 | function(date, jsEvent, view, resource) { 75 | console.log( 76 | 'dayClick', 77 | date.format(), 78 | resource ? resource.id : '(no resource)' 79 | ); 80 | } 81 | "), 82 | ], 83 | ]); 84 | ?> 85 | 86 | registerJs(" 88 | $('#select-G').on('click', function() { 89 | $('#calendar').fullCalendar('select', '2016-05-07T02:00:00', '2016-05-07T07:00:00', 'g'); 90 | }); 91 | 92 | $('#select-unspecified').on('click', function() { 93 | $('#calendar').fullCalendar('select', '2016-05-07T02:00:00', '2016-05-07T07:00:00'); 94 | }); 95 | "); 96 | ?> 97 | 98 |

99 | 100 | 101 |

-------------------------------------------------------------------------------- /src/FullcalendarScheduler.php: -------------------------------------------------------------------------------- 1 | true, 16 | 'default' => 'timelineDay', 17 | 'editable' => false, 18 | ]; 19 | /** 20 | * @var array Array containing the events, can be JSON array, PHP array or URL that returns an array containing JSON events 21 | */ 22 | public $events = []; 23 | /** 24 | * @var array Array containing the resources, can be JSON array, PHP array or URL that returns an array containing JSON resources 25 | */ 26 | public $resources = []; 27 | /** @var boolean Determines whether or not to include the gcal.js */ 28 | public $googleCalendar = false; 29 | /** 30 | * @var array 31 | * Possible header keys 32 | * - center 33 | * - left 34 | * - right 35 | * Possible options: 36 | * - title 37 | * - prevYear 38 | * - nextYear 39 | * - prev 40 | * - next 41 | * - today 42 | * - basicDay 43 | * - agendaDay 44 | * - basicWeek 45 | * - agendaWeek 46 | * - month 47 | */ 48 | public $header = [ 49 | 'center' => 'title', 50 | 'left' => 'prev,next, today', 51 | 'right' => 'timelineDay,timelineWeek,timelineMonth,timelineYear', 52 | ]; 53 | /** @var string Text to display while the calendar is loading */ 54 | public $loading = 'Please wait, calendar is loading'; 55 | /** 56 | * @var array Default options for the id and class HTML attributes 57 | */ 58 | public $options = [ 59 | 'id' => 'calendar', 60 | 'class' => 'fullcalendar', 61 | ]; 62 | /** 63 | * @var boolean Whether or not we need to include the ThemeAsset bundle 64 | */ 65 | public $theme = false; 66 | 67 | /** 68 | * Always make sure we have a valid id and class for the Fullcalendar widget 69 | */ 70 | public function init() 71 | { 72 | if (!isset($this->options['id'])) { 73 | $this->options['id'] = $this->getId(); 74 | } 75 | if (!isset($this->options['class'])) { 76 | $this->options['class'] = 'fullcalendar'; 77 | } 78 | 79 | parent::init(); 80 | } 81 | 82 | /** 83 | * Load the options and start the widget 84 | */ 85 | public function run() 86 | { 87 | $this->echoLoadingTags(); 88 | 89 | $assets = CoreAsset::register($this->view); 90 | 91 | if ($this->theme === true) { // Register the theme 92 | ThemeAsset::register($this->view); 93 | } 94 | 95 | if (isset($this->options['language'])) { 96 | $assets->language = $this->options['language']; 97 | } 98 | 99 | $assets->googleCalendar = $this->googleCalendar; 100 | $this->clientOptions['header'] = $this->header; 101 | 102 | $this->view->registerJs(implode("\n", [ 103 | "jQuery('#{$this->options['id']}').fullCalendar({$this->getClientOptions()});", 104 | ]), \yii\web\View::POS_READY); 105 | } 106 | 107 | /** 108 | * Echo the tags to show the loading state for the calendar 109 | */ 110 | private function echoLoadingTags() 111 | { 112 | echo \yii\helpers\Html::beginTag('div', $this->options) . "\n"; 113 | echo \yii\helpers\Html::beginTag('div', ['class' => 'fc-loading', 'style' => 'display:none;']); 114 | echo \yii\helpers\Html::encode($this->loading); 115 | echo \yii\helpers\Html::endTag('div') . "\n"; 116 | echo \yii\helpers\Html::endTag('div') . "\n"; 117 | } 118 | 119 | /** 120 | * @return string 121 | * Returns an JSON array containing the fullcalendar options, 122 | * all available callbacks will be wrapped in JsExpressions objects if they're set 123 | */ 124 | private function getClientOptions() 125 | { 126 | $options['loading'] = new \yii\web\JsExpression("function(isLoading, view ) { 127 | jQuery('#{$this->options['id']}').find('.fc-loading').toggle(isLoading); 128 | }"); 129 | 130 | $options['events'] = $this->events; 131 | $options['resources'] = $this->resources; 132 | $options = array_merge($options, $this->clientOptions); 133 | 134 | return \yii\helpers\Json::encode($options); 135 | } 136 | 137 | } 138 | -------------------------------------------------------------------------------- /demos/grouping.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'now' => '2016-05-07', 9 | 'editable' => true, // enable draggable events 10 | 'aspectRatio' => 1.8, 11 | 'scrollTime' => '00:00', // undo default 6am scrollTime 12 | 'defaultView' => 'timelineDay', 13 | 'views' => [ 14 | 'timelineThreeDays' => [ 15 | 'type' => 'timeline', 16 | 'duration' => ['days' => 3], 17 | ], 18 | ], 19 | 'resourceGroupField' => 'building', 20 | 'resources' => [ 21 | ['id' => 'a', 'building' => '460 Bryant', 'title' => 'Auditorium A'], 22 | ['id' => 'b', 'building' => '460 Bryant', 'title' => 'Auditorium B', 'eventColor' => 'green'], 23 | ['id' => 'c', 'building' => '460 Bryant', 'title' => 'Auditorium C', 'eventColor' => 'orange'], 24 | [ 25 | 'id' => 'd', 26 | 'building' => '460 Bryant', 27 | 'title' => 'Auditorium D', 28 | 'children' => [ 29 | ['id' => 'd1', 'title' => 'Room D1', 'occupancy' => 10], 30 | ['id' => 'd2', 'title' => 'Room D2', 'occupancy' => 10], 31 | ], 32 | ], 33 | ['id' => 'e', 'building' => '460 Bryant', 'title' => 'Auditorium E'], 34 | ['id' => 'f', 'building' => '460 Bryant', 'title' => 'Auditorium F', 'eventColor' => 'red'], 35 | ['id' => 'g', 'building' => '564 Pacific', 'title' => 'Auditorium G'], 36 | ['id' => 'h', 'building' => '564 Pacific', 'title' => 'Auditorium H'], 37 | ['id' => 'i', 'building' => '564 Pacific', 'title' => 'Auditorium I'], 38 | ['id' => 'j', 'building' => '564 Pacific', 'title' => 'Auditorium J'], 39 | ['id' => 'k', 'building' => '564 Pacific', 'title' => 'Auditorium K'], 40 | ['id' => 'l', 'building' => '564 Pacific', 'title' => 'Auditorium L'], 41 | ['id' => 'm', 'building' => '564 Pacific', 'title' => 'Auditorium M'], 42 | ['id' => 'n', 'building' => '564 Pacific', 'title' => 'Auditorium N'], 43 | ['id' => 'o', 'building' => '564 Pacific', 'title' => 'Auditorium O'], 44 | ['id' => 'p', 'building' => '564 Pacific', 'title' => 'Auditorium P'], 45 | ['id' => 'q', 'building' => '564 Pacific', 'title' => 'Auditorium Q'], 46 | ['id' => 'r', 'building' => '564 Pacific', 'title' => 'Auditorium R'], 47 | ['id' => 's', 'building' => '564 Pacific', 'title' => 'Auditorium S'], 48 | ['id' => 't', 'building' => '564 Pacific', 'title' => 'Auditorium T'], 49 | ['id' => 'u', 'building' => '564 Pacific', 'title' => 'Auditorium U'], 50 | ['id' => 'v', 'building' => '564 Pacific', 'title' => 'Auditorium V'], 51 | ['id' => 'w', 'building' => '564 Pacific', 'title' => 'Auditorium W'], 52 | ['id' => 'x', 'building' => '564 Pacific', 'title' => 'Auditorium X'], 53 | ['id' => 'y', 'building' => '564 Pacific', 'title' => 'Auditorium Y'], 54 | ['id' => 'z', 'building' => '564 Pacific', 'title' => 'Auditorium Z'], 55 | ], 56 | 'events' => [ 57 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 58 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 59 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 60 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 61 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 62 | ], 63 | ], 64 | ]); 65 | ?> -------------------------------------------------------------------------------- /demos/columns.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'now' => '2016-05-07', 9 | 'editable' => true, 10 | 'aspectRatio' => 1.8, 11 | 'scrollTime' => '00:00', 12 | 'defaultView' => 'timelineDay', 13 | 'views' => [ 14 | 'timelineThreeDays' => [ 15 | 'type' => 'timeline', 16 | 'duration' => ['days' => 3], 17 | ], 18 | ], 19 | 'resourceAreaWidth' => '30%', 20 | 'resourceColumns' => [ 21 | [ 22 | 'labelText' => 'Room', 23 | 'field' => 'title', 24 | ], 25 | [ 26 | 'labelText' => 'Occupancy', 27 | 'field' => 'occupancy', 28 | ], 29 | ], 30 | 'resources' => [ 31 | ['id' => 'a', 'title' => 'Auditorium A', 'occupancy' => 40], 32 | ['id' => 'b', 'title' => 'Auditorium B', 'occupancy' => 40, 'eventColor' => 'green'], 33 | ['id' => 'c', 'title' => 'Auditorium C', 'occupancy' => 40, 'eventColor' => 'orange'], 34 | [ 35 | 'id' => 'd', 36 | 'title' => 'Auditorium D', 37 | 'occupancy' => 40, 38 | 'children' => [ 39 | ['id' => 'd1', 'title' => 'Room D1', 'occupancy' => 10], 40 | ['id' => 'd2', 'title' => 'Room D2', 'occupancy' => 10], 41 | ], 42 | ], 43 | ['id' => 'e', 'title' => 'Auditorium E', 'occupancy' => 40], 44 | ['id' => 'f', 'title' => 'Auditorium F', 'occupancy' => 40, 'eventColor' => 'red'], 45 | ['id' => 'g', 'title' => 'Auditorium G', 'occupancy' => 40], 46 | ['id' => 'h', 'title' => 'Auditorium H', 'occupancy' => 40], 47 | ['id' => 'i', 'title' => 'Auditorium I', 'occupancy' => 40], 48 | ['id' => 'j', 'title' => 'Auditorium J', 'occupancy' => 40], 49 | ['id' => 'k', 'title' => 'Auditorium K', 'occupancy' => 40], 50 | ['id' => 'l', 'title' => 'Auditorium L', 'occupancy' => 40], 51 | ['id' => 'm', 'title' => 'Auditorium M', 'occupancy' => 40], 52 | ['id' => 'n', 'title' => 'Auditorium N', 'occupancy' => 40], 53 | ['id' => 'o', 'title' => 'Auditorium O', 'occupancy' => 40], 54 | ['id' => 'p', 'title' => 'Auditorium P', 'occupancy' => 40], 55 | ['id' => 'q', 'title' => 'Auditorium Q', 'occupancy' => 40], 56 | ['id' => 'r', 'title' => 'Auditorium R', 'occupancy' => 40], 57 | ['id' => 's', 'title' => 'Auditorium S', 'occupancy' => 40], 58 | ['id' => 't', 'title' => 'Auditorium T', 'occupancy' => 40], 59 | ['id' => 'u', 'title' => 'Auditorium U', 'occupancy' => 40], 60 | ['id' => 'v', 'title' => 'Auditorium V', 'occupancy' => 40], 61 | ['id' => 'w', 'title' => 'Auditorium W', 'occupancy' => 40], 62 | ['id' => 'x', 'title' => 'Auditorium X', 'occupancy' => 40], 63 | ['id' => 'y', 'title' => 'Auditorium Y', 'occupancy' => 40], 64 | ['id' => 'z', 'title' => 'Auditorium Z', 'occupancy' => 40], 65 | ], 66 | 'events' => [ 67 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 68 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 69 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 70 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 71 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 72 | ], 73 | ], 74 | ]); 75 | ?> -------------------------------------------------------------------------------- /demos/dynamic-add-remove.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'promptResource today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'selectable' => true, 9 | 'selectHelper' => true, 10 | 'now' => '2016-05-07', 11 | 'editable' => true, // enable draggable events 12 | 'aspectRatio' => 1.8, 13 | 'scrollTime' => '00:00', // undo default 6am scrollTime 14 | 'defaultView' => 'timelineDay', 15 | 'views' => [ 16 | 'timelineThreeDays' => [ 17 | 'type' => 'timeline', 18 | 'duration' => ['days' => 3], 19 | ], 20 | ], 21 | 'customButtons' => [ 22 | 'promptResource' => [ 23 | 'text' => '+ room', 24 | 'click' => new \yii\web\JsExpression(" 25 | function() { 26 | var title = prompt('Room name'); 27 | if (title) { 28 | $('#calendar').fullCalendar( 29 | 'addResource', 30 | { title: title }, 31 | true // scroll to the new resource? 32 | ); 33 | } 34 | } 35 | "), 36 | ], 37 | ], 38 | 'resourceLabelText' => 'Rooms', 39 | 'resourceRender' => new \yii\web\JsExpression(" 40 | function(resource, cellEls) { 41 | cellEls.on('click', function() { 42 | if (confirm('Are you sure you want to delete ' + resource.title + '?')) { 43 | $('#calendar').fullCalendar('removeResource', resource); 44 | } 45 | }); 46 | } 47 | "), 48 | 'resources' => [ 49 | ['id' => 'a', 'title' => 'Auditorium A'], 50 | ['id' => 'b', 'title' => 'Auditorium B', 'eventColor' => 'green'], 51 | ['id' => 'c', 'title' => 'Auditorium C', 'eventColor' => 'orange'], 52 | [ 53 | 'id' => 'd', 54 | 'title' => 'Auditorium D', 55 | 'children' => [ 56 | ['id' => 'd1', 'title' => 'Room D1'], 57 | ['id' => 'd2', 'title' => 'Room D2'], 58 | ], 59 | ], 60 | ['id' => 'e', 'title' => 'Auditorium E'], 61 | ['id' => 'f', 'title' => 'Auditorium F', 'eventColor' => 'red'], 62 | ['id' => 'g', 'title' => 'Auditorium G'], 63 | ['id' => 'h', 'title' => 'Auditorium H'], 64 | ['id' => 'i', 'title' => 'Auditorium I'], 65 | ['id' => 'j', 'title' => 'Auditorium J'], 66 | ['id' => 'k', 'title' => 'Auditorium K'], 67 | ['id' => 'l', 'title' => 'Auditorium L'], 68 | ['id' => 'm', 'title' => 'Auditorium M'], 69 | ['id' => 'n', 'title' => 'Auditorium N'], 70 | ['id' => 'o', 'title' => 'Auditorium O'], 71 | ['id' => 'p', 'title' => 'Auditorium P'], 72 | ['id' => 'q', 'title' => 'Auditorium Q'], 73 | ['id' => 'r', 'title' => 'Auditorium R'], 74 | ['id' => 's', 'title' => 'Auditorium S'], 75 | ['id' => 't', 'title' => 'Auditorium T'], 76 | ['id' => 'u', 'title' => 'Auditorium U'], 77 | ['id' => 'v', 'title' => 'Auditorium V'], 78 | ['id' => 'w', 'title' => 'Auditorium W'], 79 | ['id' => 'x', 'title' => 'Auditorium X'], 80 | ['id' => 'y', 'title' => 'Auditorium Y'], 81 | ['id' => 'z', 'title' => 'Auditorium Z'], 82 | ], 83 | 'events' => [ 84 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 85 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 86 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 87 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 88 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 89 | ], 90 | ], 91 | ]); 92 | ?> 93 | registerCss(' 95 | body { 96 | margin: 0; 97 | padding: 0; 98 | font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif; 99 | font-size: 14px; 100 | } 101 | 102 | p { 103 | text-align: center; 104 | } 105 | 106 | #calendar { 107 | max-width: 900px; 108 | margin: 50px auto; 109 | } 110 | 111 | .fc-resource-area td { 112 | cursor: pointer; 113 | } 114 | '); 115 | ?> 116 |

117 | HINT: click on a resource to delete it. 118 |

-------------------------------------------------------------------------------- /demos/column-grouping.php: -------------------------------------------------------------------------------- 1 | [ 3 | 'left' => 'today prev,next', 4 | 'center' => 'title', 5 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 6 | ], 7 | 'clientOptions' => [ 8 | 'now' => '2016-05-07', 9 | 'editable' => true, // enable draggable events 10 | 'aspectRatio' => 1.8, 11 | 'scrollTime' => '00:00', // undo default 6am scrollTime 12 | 'defaultView' => 'timelineDay', 13 | 'views' => [ 14 | 'timelineThreeDays' => [ 15 | 'type' => 'timeline', 16 | 'duration' => ['days' => 3], 17 | ], 18 | ], 19 | 'resourceLabelText' => 'Rooms', 20 | 'resourceAreaWidth' => '40%', 21 | 'resourceColumns' => [ 22 | [ 23 | 'group' => true, 24 | 'labelText' => 'Building', 25 | 'field' => 'building', 26 | ], 27 | [ 28 | 'labelText' => 'Room', 29 | 'field' => 'title', 30 | ], 31 | [ 32 | 'labelText' => 'Occupancy', 33 | 'field' => 'occupancy', 34 | ], 35 | ], 36 | 'resources' => [ 37 | ['id' => 'a', 'building' => '460 Bryant', 'title' => 'Auditorium A', 'occupancy' => 40], 38 | ['id' => 'b', 'building' => '460 Bryant', 'title' => 'Auditorium B', 'occupancy' => 40, 'eventColor' => 'green'], 39 | ['id' => 'c', 'building' => '460 Bryant', 'title' => 'Auditorium C', 'occupancy' => 40, 'eventColor' => 'orange'], 40 | [ 41 | 'id' => 'd', 42 | 'building' => '460 Bryant', 43 | 'title' => 'Auditorium D', 44 | 'occupancy' => 40, 45 | 'children' => [ 46 | ['id' => 'd1', 'title' => 'Room D1', 'occupancy' => 10], 47 | ['id' => 'd2', 'title' => 'Room D2', 'occupancy' => 10], 48 | ], 49 | ], 50 | ['id' => 'e', 'building' => '460 Bryant', 'title' => 'Auditorium E', 'occupancy' => 40], 51 | ['id' => 'f', 'building' => '460 Bryant', 'title' => 'Auditorium F', 'occupancy' => 40, 'eventColor' => 'red'], 52 | ['id' => 'g', 'building' => '564 Pacific', 'title' => 'Auditorium G', 'occupancy' => 40], 53 | ['id' => 'h', 'building' => '564 Pacific', 'title' => 'Auditorium H', 'occupancy' => 40], 54 | ['id' => 'i', 'building' => '564 Pacific', 'title' => 'Auditorium I', 'occupancy' => 40], 55 | ['id' => 'j', 'building' => '564 Pacific', 'title' => 'Auditorium J', 'occupancy' => 40], 56 | ['id' => 'k', 'building' => '564 Pacific', 'title' => 'Auditorium K', 'occupancy' => 40], 57 | ['id' => 'l', 'building' => '564 Pacific', 'title' => 'Auditorium L', 'occupancy' => 40], 58 | ['id' => 'm', 'building' => '564 Pacific', 'title' => 'Auditorium M', 'occupancy' => 40], 59 | ['id' => 'n', 'building' => '564 Pacific', 'title' => 'Auditorium N', 'occupancy' => 40], 60 | ['id' => 'o', 'building' => '564 Pacific', 'title' => 'Auditorium O', 'occupancy' => 40], 61 | ['id' => 'p', 'building' => '564 Pacific', 'title' => 'Auditorium P', 'occupancy' => 40], 62 | ['id' => 'q', 'building' => '564 Pacific', 'title' => 'Auditorium Q', 'occupancy' => 40], 63 | ['id' => 'r', 'building' => '564 Pacific', 'title' => 'Auditorium R', 'occupancy' => 40], 64 | ['id' => 's', 'building' => '564 Pacific', 'title' => 'Auditorium S', 'occupancy' => 40], 65 | ['id' => 't', 'building' => '564 Pacific', 'title' => 'Auditorium T', 'occupancy' => 40], 66 | ['id' => 'u', 'building' => '564 Pacific', 'title' => 'Auditorium U', 'occupancy' => 40], 67 | ['id' => 'v', 'building' => '564 Pacific', 'title' => 'Auditorium V', 'occupancy' => 40], 68 | ['id' => 'w', 'building' => '564 Pacific', 'title' => 'Auditorium W', 'occupancy' => 40], 69 | ['id' => 'x', 'building' => '564 Pacific', 'title' => 'Auditorium X', 'occupancy' => 40], 70 | ['id' => 'y', 'building' => '564 Pacific', 'title' => 'Auditorium Y', 'occupancy' => 40], 71 | ['id' => 'z', 'building' => '564 Pacific', 'title' => 'Auditorium Z', 'occupancy' => 40], 72 | ], 73 | 'events' => [ 74 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 75 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 76 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 77 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 78 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 79 | ], 80 | ], 81 | ]); 82 | ?> -------------------------------------------------------------------------------- /demos/external-dragging.php: -------------------------------------------------------------------------------- 1 | registerJs(" 12 | /* initialize the external events 13 | -----------------------------------------------------------------*/ 14 | $('#external-events .fc-event').each(function() { 15 | 16 | // store data so the calendar knows to render an event upon drop 17 | $(this).data('event', { 18 | title: $.trim($(this).text()), // use the element's text as the event title 19 | stick: true // maintain when user navigates (see docs on the renderEvent method) 20 | }); 21 | 22 | // make the event draggable using jQuery UI 23 | $(this).draggable({ 24 | zIndex: 999, 25 | revert: true, // will cause the event to go back to its 26 | revertDuration: 0 // original position after the drag 27 | }); 28 | }); 29 | ", \yii\web\View::POS_END); 30 | ?> 31 | 32 | [ 34 | 'left' => 'today prev,next', 35 | 'center' => 'title', 36 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 37 | ], 38 | 'clientOptions' => [ 39 | 'now' => '2016-05-07', 40 | 'editable' => true, // enable draggable events 41 | 'droppable' => true, // enable draggable events 42 | 'aspectRatio' => 1.8, 43 | 'scrollTime' => '00:00', // undo default 6am scrollTime 44 | 'defaultView' => 'timelineDay', 45 | 'views' => [ 46 | 'timelineThreeDays' => [ 47 | 'type' => 'timeline', 48 | 'duration' => ['days' => 3], 49 | ], 50 | ], 51 | 'resourceLabelText' => 'Rooms', 52 | 'resources' => [ 53 | ['id' => 'a', 'title' => 'Auditorium A'], 54 | ['id' => 'b', 'title' => 'Auditorium B', 'eventColor' => 'green'], 55 | ['id' => 'c', 'title' => 'Auditorium C', 'eventColor' => 'orange'], 56 | [ 57 | 'id' => 'd', 58 | 'title' => 'Auditorium D', 59 | 'children' => [ 60 | ['id' => 'd1', 'title' => 'Room D1'], 61 | ['id' => 'd2', 'title' => 'Room D2'], 62 | ], 63 | ], 64 | ['id' => 'e', 'title' => 'Auditorium E'], 65 | ['id' => 'f', 'title' => 'Auditorium F', 'eventColor' => 'red'], 66 | ['id' => 'g', 'title' => 'Auditorium G'], 67 | ['id' => 'h', 'title' => 'Auditorium H'], 68 | ['id' => 'i', 'title' => 'Auditorium I'], 69 | ['id' => 'j', 'title' => 'Auditorium J'], 70 | ['id' => 'k', 'title' => 'Auditorium K'], 71 | ['id' => 'l', 'title' => 'Auditorium L'], 72 | ['id' => 'm', 'title' => 'Auditorium M'], 73 | ['id' => 'n', 'title' => 'Auditorium N'], 74 | ['id' => 'o', 'title' => 'Auditorium O'], 75 | ['id' => 'p', 'title' => 'Auditorium P'], 76 | ['id' => 'q', 'title' => 'Auditorium Q'], 77 | ['id' => 'r', 'title' => 'Auditorium R'], 78 | ['id' => 's', 'title' => 'Auditorium S'], 79 | ['id' => 't', 'title' => 'Auditorium T'], 80 | ['id' => 'u', 'title' => 'Auditorium U'], 81 | ['id' => 'v', 'title' => 'Auditorium V'], 82 | ['id' => 'w', 'title' => 'Auditorium W'], 83 | ['id' => 'x', 'title' => 'Auditorium X'], 84 | ['id' => 'y', 'title' => 'Auditorium Y'], 85 | ['id' => 'z', 'title' => 'Auditorium Z'], 86 | ], 87 | 'events' => [ 88 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 89 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 90 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 91 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 92 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 93 | ], 94 | 'drop' => new \yii\web\JsExpression(" 95 | function(date, jsEvent, ui, resourceId) { 96 | console.log('drop', date.format(), resourceId); 97 | 98 | // is the \"remove after drop\" checkbox checked? 99 | if ($('#drop-remove').is(':checked')) { 100 | // if so, remove the element from the \"Draggable Events\" list 101 | $(this).remove(); 102 | } 103 | } 104 | "), 105 | 'eventReceive' => new \yii\web\JsExpression(" 106 | function(event) { // called when a proper external event is dropped 107 | console.log('eventReceive', event); 108 | } 109 | "), 110 | 'eventDrop' => new \yii\web\JsExpression(" 111 | function(event) { // called when an event (already on the calendar) is moved 112 | console.log('eventDrop', event); 113 | } 114 | "), 115 | ], 116 | ]); 117 | ?> 118 | registerCss(' 119 | body { 120 | margin-top: 40px; 121 | text-align: center; 122 | font-size: 14px; 123 | font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif; 124 | } 125 | 126 | #wrap { 127 | width: 1100px; 128 | margin: 0 auto; 129 | } 130 | 131 | #external-events { 132 | float: left; 133 | width: 150px; 134 | padding: 0 10px; 135 | border: 1px solid #ccc; 136 | background: #eee; 137 | text-align: left; 138 | } 139 | 140 | #external-events h4 { 141 | font-size: 16px; 142 | margin-top: 0; 143 | padding-top: 1em; 144 | } 145 | 146 | #external-events .fc-event { 147 | margin: 10px 0; 148 | cursor: pointer; 149 | } 150 | 151 | #external-events p { 152 | margin: 1.5em 0; 153 | font-size: 11px; 154 | color: #666; 155 | } 156 | 157 | #external-events p input { 158 | margin: 0; 159 | vertical-align: middle; 160 | } 161 | 162 | #calendar { 163 | float: right; 164 | width: 900px; 165 | } 166 | '); 167 | ?> 168 | 169 |
170 | 171 |
172 |

Draggable Events

173 |
My Event 1
174 |
My Event 2
175 |
My Event 3
176 |
My Event 4
177 |
My Event 5
178 |

179 | 180 | 181 |

182 |
183 | 184 |
185 | 186 |
187 | 188 |
-------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Yii2 fullcalendar scheduler component 2 | 3 | [![Latest Stable Version](https://poser.pugx.org/edofre/yii2-fullcalendar-scheduler/v/stable)](https://packagist.org/packages/edofre/yii2-fullcalendar-scheduler) 4 | [![Total Downloads](https://poser.pugx.org/edofre/yii2-fullcalendar-scheduler/downloads)](https://packagist.org/packages/edofre/yii2-fullcalendar-scheduler) 5 | [![Latest Unstable Version](https://poser.pugx.org/edofre/yii2-fullcalendar-scheduler/v/unstable)](https://packagist.org/packages/edofre/yii2-fullcalendar-scheduler) 6 | [![License](https://poser.pugx.org/edofre/yii2-fullcalendar-scheduler/license)](https://packagist.org/packages/edofre/yii2-fullcalendar-scheduler) 7 | [![composer.lock](https://poser.pugx.org/edofre/yii2-fullcalendar-scheduler/composerlock)](https://packagist.org/packages/edofre/yii2-fullcalendar-scheduler) 8 | 9 | ## Installation 10 | 11 | The preferred way to install this extension is through [composer](http://getcomposer.org/download/). 12 | 13 | To install, either run 14 | 15 | ``` 16 | $ php composer.phar require edofre/yii2-fullcalendar-scheduler "V1.1.12" 17 | ``` 18 | 19 | or add 20 | 21 | ``` 22 | "edofre/yii2-fullcalendar-scheduler": "V1.1.12" 23 | ``` 24 | 25 | to the ```require``` section of your `composer.json` file. 26 | 27 | ## Usage 28 | 29 | See the demos/ folder for all the examples. 30 | 31 | ### Simple usage with array data 32 | ```php 33 | [ 35 | 'left' => 'today prev,next', 36 | 'center' => 'title', 37 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 38 | ], 39 | 'clientOptions' => [ 40 | 'now' => '2016-05-07', 41 | 'editable' => true, // enable draggable events 42 | 'aspectRatio' => 1.8, 43 | 'scrollTime' => '00:00', // undo default 6am scrollTime 44 | 'defaultView' => 'timelineDay', 45 | 'views' => [ 46 | 'timelineThreeDays' => [ 47 | 'type' => 'timeline', 48 | 'duration' => [ 49 | 'days' => 3, 50 | ], 51 | ], 52 | ], 53 | 'resourceLabelText' => 'Rooms', 54 | 'resources' => [ 55 | ['id' => 'a', 'title' => 'Auditorium A'], 56 | ['id' => 'b', 'title' => 'Auditorium B', 'eventColor' => 'green'], 57 | ['id' => 'c', 'title' => 'Auditorium C', 'eventColor' => 'orange'], 58 | [ 59 | 'id' => 'd', 'title' => 'Auditorium D', 60 | 'children' => [ 61 | ['id' => 'd1', 'title' => 'Room D1'], 62 | ['id' => 'd2', 'title' => 'Room D2'], 63 | ], 64 | ], 65 | ['id' => 'e', 'title' => 'Auditorium E'], 66 | ['id' => 'f', 'title' => 'Auditorium F', 'eventColor' => 'red'], 67 | ['id' => 'g', 'title' => 'Auditorium G'], 68 | ['id' => 'h', 'title' => 'Auditorium H'], 69 | ['id' => 'i', 'title' => 'Auditorium I'], 70 | ['id' => 'j', 'title' => 'Auditorium J'], 71 | ['id' => 'k', 'title' => 'Auditorium K'], 72 | ['id' => 'l', 'title' => 'Auditorium L'], 73 | ['id' => 'm', 'title' => 'Auditorium M'], 74 | ['id' => 'n', 'title' => 'Auditorium N'], 75 | ['id' => 'o', 'title' => 'Auditorium O'], 76 | ['id' => 'p', 'title' => 'Auditorium P'], 77 | ['id' => 'q', 'title' => 'Auditorium Q'], 78 | ['id' => 'r', 'title' => 'Auditorium R'], 79 | ['id' => 's', 'title' => 'Auditorium S'], 80 | ['id' => 't', 'title' => 'Auditorium T'], 81 | ['id' => 'u', 'title' => 'Auditorium U'], 82 | ['id' => 'v', 'title' => 'Auditorium V'], 83 | ['id' => 'w', 'title' => 'Auditorium W'], 84 | ['id' => 'x', 'title' => 'Auditorium X'], 85 | ['id' => 'y', 'title' => 'Auditorium Y'], 86 | ['id' => 'z', 'title' => 'Auditorium Z'], 87 | ], 88 | 'events' => [ 89 | ['id' => '1', 'resourceId' => 'b', 'start' => '2016-05-07T02:00:00', 'end' => '2016-05-07T07:00:00', 'title' => 'event 1'], 90 | ['id' => '2', 'resourceId' => 'c', 'start' => '2016-05-07T05:00:00', 'end' => '2016-05-07T22:00:00', 'title' => 'event 2'], 91 | ['id' => '3', 'resourceId' => 'd', 'start' => '2016-05-06', 'end' => '2016-05-08', 'title' => 'event 3'], 92 | ['id' => '4', 'resourceId' => 'e', 'start' => '2016-05-07T03:00:00', 'end' => '2016-05-07T08:00:00', 'title' => 'event 4'], 93 | ['id' => '5', 'resourceId' => 'f', 'start' => '2016-05-07T00:30:00', 'end' => '2016-05-07T02:30:00', 'title' => 'event 5'], 94 | ], 95 | ], 96 | ]); 97 | ?> 98 | ``` 99 | 100 | ### Simple use with JSON data from controller actions 101 | ```php 102 | [ 104 | 'left' => 'today prev,next', 105 | 'center' => 'title', 106 | 'right' => 'timelineDay,timelineThreeDays,agendaWeek,month', 107 | ], 108 | 'clientOptions' => [ 109 | 'now' => '2016-05-07', 110 | 'editable' => true, // enable draggable events 111 | 'aspectRatio' => 1.8, 112 | 'scrollTime' => '00:00', // undo default 6am scrollTime 113 | 'defaultView' => 'timelineDay', 114 | 'views' => [ 115 | 'timelineThreeDays' => [ 116 | 'type' => 'timeline', 117 | 'duration' => ['days' => 3], 118 | ], 119 | ], 120 | 'resourceLabelText' => 'Rooms', 121 | 'resources' => \yii\helpers\Url::to(['scheduler/resources', 'id' => 1]), 122 | 'events' => \yii\helpers\Url::to(['scheduler/events', 'id' => 2]), 123 | ], 124 | ]); 125 | ?> 126 | ``` 127 | 128 | #### Controller actions (Controller is also included in the demos/json/ directory) 129 | ```php 130 | /** 131 | * @param $id 132 | * @return array 133 | */ 134 | public function actionResources($id) 135 | { 136 | \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 137 | 138 | return [ 139 | new Resource(["id" => "a", "title" => "Auditorium A"]), 140 | new Resource(["id" => "b", "title" => "Auditorium B", "eventColor" => "green"]), 141 | new Resource(["id" => "c", "title" => "Auditorium C", "eventColor" => "orange"]), 142 | new Resource([ 143 | "id" => "d", "title" => "Auditorium D", "children" => [ 144 | new Resource(["id" => "d1", "title" => "Room D1"]), 145 | new Resource(["id" => "d2", "title" => "Room D2"]), 146 | ], 147 | ]), 148 | new Resource(["id" => "e", "title" => "Auditorium E"]), 149 | new Resource(["id" => "f", "title" => "Auditorium F", "eventColor" => "red"]), 150 | new Resource(["id" => "g", "title" => "Auditorium G"]), 151 | new Resource(["id" => "h", "title" => "Auditorium H"]), 152 | new Resource(["id" => "i", "title" => "Auditorium I"]), 153 | new Resource(["id" => "j", "title" => "Auditorium J"]), 154 | new Resource(["id" => "k", "title" => "Auditorium K"]), 155 | new Resource(["id" => "l", "title" => "Auditorium L"]), 156 | new Resource(["id" => "m", "title" => "Auditorium M"]), 157 | new Resource(["id" => "n", "title" => "Auditorium N"]), 158 | new Resource(["id" => "o", "title" => "Auditorium O"]), 159 | new Resource(["id" => "p", "title" => "Auditorium P"]), 160 | new Resource(["id" => "q", "title" => "Auditorium Q"]), 161 | new Resource(["id" => "r", "title" => "Auditorium R"]), 162 | new Resource(["id" => "s", "title" => "Auditorium S"]), 163 | new Resource(["id" => "t", "title" => "Auditorium T"]), 164 | new Resource(["id" => "u", "title" => "Auditorium U"]), 165 | new Resource(["id" => "v", "title" => "Auditorium V"]), 166 | new Resource(["id" => "w", "title" => "Auditorium W"]), 167 | new Resource(["id" => "x", "title" => "Auditorium X"]), 168 | new Resource(["id" => "y", "title" => "Auditorium Y"]), 169 | new Resource(["id" => "z", "title" => "Auditorium Z"]), 170 | ]; 171 | } 172 | 173 | /** 174 | * @param $id 175 | * @param $start 176 | * @param $end 177 | * @return array 178 | */ 179 | public function actionEvents($id, $start, $end) 180 | { 181 | \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 182 | return [ 183 | new Event(["id" => "1", "resourceId" => "b", "start" => "2016-05-07T02:00:00", "end" => "2016-05-07T07:00:00", "title" => "event 1"]), 184 | new Event(["id" => "2", "resourceId" => "c", "start" => "2016-05-07T05:00:00", "end" => "2016-05-07T22:00:00", "title" => "event 2"]), 185 | new Event(["id" => "3", "resourceId" => "d", "start" => "2016-05-06", "end" => "2016-05-08", "title" => "event 3"]), 186 | new Event(["id" => "4", "resourceId" => "e", "start" => "2016-05-07T03:00:00", "end" => "2016-05-07T08:00:00", "title" => "event 4"]), 187 | new Event(["id" => "5", "resourceId" => "f", "start" => "2016-05-07T00:30:00", "end" => "2016-05-07T02:30:00", "title" => "event 5"]), 188 | ]; 189 | } 190 | ``` 191 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "f97134ab0b7a2df28d109cffdb409682", 8 | "packages": [ 9 | { 10 | "name": "bower-asset/inputmask", 11 | "version": "3.3.11", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/RobinHerbots/Inputmask.git", 15 | "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/RobinHerbots/Inputmask/zipball/5e670ad62f50c738388d4dcec78d2888505ad77b", 20 | "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "bower-asset/jquery": ">=1.7" 25 | }, 26 | "type": "bower-asset-library", 27 | "extra": { 28 | "bower-asset-main": [ 29 | "./dist/inputmask/inputmask.js", 30 | "./dist/inputmask/inputmask.extensions.js", 31 | "./dist/inputmask/inputmask.date.extensions.js", 32 | "./dist/inputmask/inputmask.numeric.extensions.js", 33 | "./dist/inputmask/inputmask.phone.extensions.js", 34 | "./dist/inputmask/jquery.inputmask.js", 35 | "./dist/inputmask/global/document.js", 36 | "./dist/inputmask/global/window.js", 37 | "./dist/inputmask/phone-codes/phone.js", 38 | "./dist/inputmask/phone-codes/phone-be.js", 39 | "./dist/inputmask/phone-codes/phone-nl.js", 40 | "./dist/inputmask/phone-codes/phone-ru.js", 41 | "./dist/inputmask/phone-codes/phone-uk.js", 42 | "./dist/inputmask/dependencyLibs/inputmask.dependencyLib.jqlite.js", 43 | "./dist/inputmask/dependencyLibs/inputmask.dependencyLib.jquery.js", 44 | "./dist/inputmask/dependencyLibs/inputmask.dependencyLib.js", 45 | "./dist/inputmask/bindings/inputmask.binding.js" 46 | ], 47 | "bower-asset-ignore": [ 48 | "**/*", 49 | "!dist/*", 50 | "!dist/inputmask/*", 51 | "!dist/min/*", 52 | "!dist/min/inputmask/*" 53 | ] 54 | }, 55 | "license": [ 56 | "http://opensource.org/licenses/mit-license.php" 57 | ], 58 | "description": "Inputmask is a javascript library which creates an input mask. Inputmask can run against vanilla javascript, jQuery and jqlite.", 59 | "keywords": [ 60 | "form", 61 | "input", 62 | "inputmask", 63 | "jquery", 64 | "mask", 65 | "plugins" 66 | ], 67 | "time": "2017-11-21T11:46:23+00:00" 68 | }, 69 | { 70 | "name": "bower-asset/jquery", 71 | "version": "3.2.1", 72 | "source": { 73 | "type": "git", 74 | "url": "https://github.com/jquery/jquery-dist.git", 75 | "reference": "77d2a51d0520d2ee44173afdf4e40a9201f5964e" 76 | }, 77 | "dist": { 78 | "type": "zip", 79 | "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/77d2a51d0520d2ee44173afdf4e40a9201f5964e", 80 | "reference": "77d2a51d0520d2ee44173afdf4e40a9201f5964e", 81 | "shasum": "" 82 | }, 83 | "type": "bower-asset-library", 84 | "extra": { 85 | "bower-asset-main": "dist/jquery.js", 86 | "bower-asset-ignore": [ 87 | "package.json" 88 | ] 89 | }, 90 | "license": [ 91 | "MIT" 92 | ], 93 | "keywords": [ 94 | "browser", 95 | "javascript", 96 | "jquery", 97 | "library" 98 | ], 99 | "time": "2017-03-20T19:02:00+00:00" 100 | }, 101 | { 102 | "name": "bower-asset/jquery-ui", 103 | "version": "1.12.1", 104 | "source": { 105 | "type": "git", 106 | "url": "https://github.com/components/jqueryui.git", 107 | "reference": "44ecf3794cc56b65954cc19737234a3119d036cc" 108 | }, 109 | "dist": { 110 | "type": "zip", 111 | "url": "https://api.github.com/repos/components/jqueryui/zipball/44ecf3794cc56b65954cc19737234a3119d036cc", 112 | "reference": "44ecf3794cc56b65954cc19737234a3119d036cc", 113 | "shasum": "" 114 | }, 115 | "require": { 116 | "bower-asset/jquery": ">=1.6" 117 | }, 118 | "type": "bower-asset-library", 119 | "extra": { 120 | "bower-asset-main": [ 121 | "jquery-ui.js" 122 | ], 123 | "bower-asset-ignore": [] 124 | }, 125 | "license": [ 126 | "MIT" 127 | ], 128 | "time": "2016-09-16T05:47:55+00:00" 129 | }, 130 | { 131 | "name": "bower-asset/punycode", 132 | "version": "v1.3.2", 133 | "source": { 134 | "type": "git", 135 | "url": "https://github.com/bestiejs/punycode.js.git", 136 | "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" 137 | }, 138 | "dist": { 139 | "type": "zip", 140 | "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", 141 | "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3", 142 | "shasum": "" 143 | }, 144 | "type": "bower-asset-library", 145 | "extra": { 146 | "bower-asset-main": "punycode.js", 147 | "bower-asset-ignore": [ 148 | "coverage", 149 | "tests", 150 | ".*", 151 | "component.json", 152 | "Gruntfile.js", 153 | "node_modules", 154 | "package.json" 155 | ] 156 | } 157 | }, 158 | { 159 | "name": "bower-asset/yii2-pjax", 160 | "version": "2.0.7.1", 161 | "source": { 162 | "type": "git", 163 | "url": "https://github.com/yiisoft/jquery-pjax.git", 164 | "reference": "aef7b953107264f00234902a3880eb50dafc48be" 165 | }, 166 | "dist": { 167 | "type": "zip", 168 | "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/aef7b953107264f00234902a3880eb50dafc48be", 169 | "reference": "aef7b953107264f00234902a3880eb50dafc48be", 170 | "shasum": "" 171 | }, 172 | "require": { 173 | "bower-asset/jquery": ">=1.8" 174 | }, 175 | "type": "bower-asset-library", 176 | "extra": { 177 | "bower-asset-main": "./jquery.pjax.js", 178 | "bower-asset-ignore": [ 179 | ".travis.yml", 180 | "Gemfile", 181 | "Gemfile.lock", 182 | "CONTRIBUTING.md", 183 | "vendor/", 184 | "script/", 185 | "test/" 186 | ] 187 | }, 188 | "license": [ 189 | "MIT" 190 | ], 191 | "time": "2017-10-12T10:11:14+00:00" 192 | }, 193 | { 194 | "name": "cebe/markdown", 195 | "version": "1.1.2", 196 | "source": { 197 | "type": "git", 198 | "url": "https://github.com/cebe/markdown.git", 199 | "reference": "25b28bae8a6f185b5030673af77b32e1163d5c6e" 200 | }, 201 | "dist": { 202 | "type": "zip", 203 | "url": "https://api.github.com/repos/cebe/markdown/zipball/25b28bae8a6f185b5030673af77b32e1163d5c6e", 204 | "reference": "25b28bae8a6f185b5030673af77b32e1163d5c6e", 205 | "shasum": "" 206 | }, 207 | "require": { 208 | "lib-pcre": "*", 209 | "php": ">=5.4.0" 210 | }, 211 | "require-dev": { 212 | "cebe/indent": "*", 213 | "facebook/xhprof": "*@dev", 214 | "phpunit/phpunit": "4.1.*" 215 | }, 216 | "bin": [ 217 | "bin/markdown" 218 | ], 219 | "type": "library", 220 | "extra": { 221 | "branch-alias": { 222 | "dev-master": "1.1.x-dev" 223 | } 224 | }, 225 | "autoload": { 226 | "psr-4": { 227 | "cebe\\markdown\\": "" 228 | } 229 | }, 230 | "notification-url": "https://packagist.org/downloads/", 231 | "license": [ 232 | "MIT" 233 | ], 234 | "authors": [ 235 | { 236 | "name": "Carsten Brandt", 237 | "email": "mail@cebe.cc", 238 | "homepage": "http://cebe.cc/", 239 | "role": "Creator" 240 | } 241 | ], 242 | "description": "A super fast, highly extensible markdown parser for PHP", 243 | "homepage": "https://github.com/cebe/markdown#readme", 244 | "keywords": [ 245 | "extensible", 246 | "fast", 247 | "gfm", 248 | "markdown", 249 | "markdown-extra" 250 | ], 251 | "time": "2017-07-16T21:13:23+00:00" 252 | }, 253 | { 254 | "name": "ezyang/htmlpurifier", 255 | "version": "v4.9.3", 256 | "source": { 257 | "type": "git", 258 | "url": "https://github.com/ezyang/htmlpurifier.git", 259 | "reference": "95e1bae3182efc0f3422896a3236e991049dac69" 260 | }, 261 | "dist": { 262 | "type": "zip", 263 | "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/95e1bae3182efc0f3422896a3236e991049dac69", 264 | "reference": "95e1bae3182efc0f3422896a3236e991049dac69", 265 | "shasum": "" 266 | }, 267 | "require": { 268 | "php": ">=5.2" 269 | }, 270 | "require-dev": { 271 | "simpletest/simpletest": "^1.1" 272 | }, 273 | "type": "library", 274 | "autoload": { 275 | "psr-0": { 276 | "HTMLPurifier": "library/" 277 | }, 278 | "files": [ 279 | "library/HTMLPurifier.composer.php" 280 | ] 281 | }, 282 | "notification-url": "https://packagist.org/downloads/", 283 | "license": [ 284 | "LGPL" 285 | ], 286 | "authors": [ 287 | { 288 | "name": "Edward Z. Yang", 289 | "email": "admin@htmlpurifier.org", 290 | "homepage": "http://ezyang.com" 291 | } 292 | ], 293 | "description": "Standards compliant HTML filter written in PHP", 294 | "homepage": "http://htmlpurifier.org/", 295 | "keywords": [ 296 | "html" 297 | ], 298 | "time": "2017-06-03T02:28:16+00:00" 299 | }, 300 | { 301 | "name": "npm-asset/fullcalendar", 302 | "version": "3.8.0", 303 | "dist": { 304 | "type": "tar", 305 | "url": "https://registry.npmjs.org/fullcalendar/-/fullcalendar-3.8.0.tgz", 306 | "reference": null, 307 | "shasum": "4c0fe494a62b0a8d640c6de8eb883b49a212b5dc" 308 | }, 309 | "require": { 310 | "npm-asset/jquery": ">=2,<4.0", 311 | "npm-asset/moment": ">=2.9.0,<3.0.0" 312 | }, 313 | "require-dev": { 314 | "npm-asset/awesome-typescript-loader": ">=3.3.0,<4.0.0", 315 | "npm-asset/bootstrap": ">=3.3.7,<4.0.0", 316 | "npm-asset/components-jqueryui": "dev-github:components/jqueryui", 317 | "npm-asset/css-loader": ">=0.28.7,<0.29.0", 318 | "npm-asset/del": ">=2.2.1,<3.0.0", 319 | "npm-asset/dts-generator": ">=2.1.0,<3.0.0", 320 | "npm-asset/eslint": ">=4.13.1,<5.0.0", 321 | "npm-asset/eslint-config-standard": ">=11.0.0-beta.0,<12.0.0", 322 | "npm-asset/eslint-plugin-import": ">=2.8.0,<3.0.0", 323 | "npm-asset/eslint-plugin-node": ">=5.2.1,<6.0.0", 324 | "npm-asset/eslint-plugin-promise": ">=3.6.0,<4.0.0", 325 | "npm-asset/eslint-plugin-standard": ">=3.0.1,<4.0.0", 326 | "npm-asset/extract-text-webpack-plugin": ">=3.0.2,<4.0.0", 327 | "npm-asset/glob": ">=7.1.2,<8.0.0", 328 | "npm-asset/gulp": ">=3.9.1,<4.0.0", 329 | "npm-asset/gulp-cssmin": ">=0.1.7,<0.2.0", 330 | "npm-asset/gulp-eslint": ">=4.0.0,<5.0.0", 331 | "npm-asset/gulp-filter": ">=4.0.0,<5.0.0", 332 | "npm-asset/gulp-modify-file": ">=1.0.0,<2.0.0", 333 | "npm-asset/gulp-rename": ">=1.2.2,<2.0.0", 334 | "npm-asset/gulp-tslint": ">=8.1.2,<9.0.0", 335 | "npm-asset/gulp-uglify": ">=2.0.0,<3.0.0", 336 | "npm-asset/gulp-util": ">=3.0.7,<4.0.0", 337 | "npm-asset/gulp-watch": ">=4.3.11,<5.0.0", 338 | "npm-asset/gulp-zip": ">=3.2.0,<4.0.0", 339 | "npm-asset/jasmine-core": "2.5.2", 340 | "npm-asset/jasmine-fixture": ">=2.0.0,<3.0.0", 341 | "npm-asset/jasmine-jquery": ">=2.1.1,<3.0.0", 342 | "npm-asset/jquery-mockjax": ">=2.2.0,<3.0.0", 343 | "npm-asset/jquery-simulate": "dev-github:jquery/jquery-simulate", 344 | "npm-asset/karma": ">=0.13.22,<0.14.0", 345 | "npm-asset/karma-jasmine": ">=1.0.2,<2.0.0", 346 | "npm-asset/karma-phantomjs-launcher": ">=1.0.0,<2.0.0", 347 | "npm-asset/karma-sourcemap-loader": ">=0.3.7,<0.4.0", 348 | "npm-asset/karma-verbose-reporter": "0.0.6", 349 | "npm-asset/moment-timezone": ">=0.5.5,<0.6.0", 350 | "npm-asset/native-promise-only": ">=0.8.1,<0.9.0", 351 | "npm-asset/node-sass": ">=4.7.2,<5.0.0", 352 | "npm-asset/phantomjs-prebuilt": ">=2.1.7,<3.0.0", 353 | "npm-asset/sass-loader": ">=6.0.6,<7.0.0", 354 | "npm-asset/tslib": ">=1.8.0,<2.0.0", 355 | "npm-asset/tslint": ">=5.8.0,<6.0.0", 356 | "npm-asset/tslint-config-standard": ">=7.0.0,<8.0.0", 357 | "npm-asset/types--jquery": "2.0.47", 358 | "npm-asset/typescript": ">=2.6.1,<3.0.0", 359 | "npm-asset/webpack": ">=3.8.1,<4.0.0", 360 | "npm-asset/webpack-stream": ">=4.0.0,<5.0.0", 361 | "npm-asset/yargs": ">=4.8.1,<5.0.0" 362 | }, 363 | "type": "npm-asset-library", 364 | "extra": { 365 | "npm-asset-bugs": { 366 | "url": "https://fullcalendar.io/wiki/Reporting-Bugs/" 367 | }, 368 | "npm-asset-files": [ 369 | "dist/*.js", 370 | "dist/*.css", 371 | "dist/*.d.ts", 372 | "dist/locale/*.js", 373 | "README.*", 374 | "LICENSE.*", 375 | "CHANGELOG.*", 376 | "CONTRIBUTING.*" 377 | ], 378 | "npm-asset-main": "dist/fullcalendar.js", 379 | "npm-asset-directories": [], 380 | "npm-asset-repository": { 381 | "type": "git", 382 | "url": "git+https://github.com/fullcalendar/fullcalendar.git" 383 | }, 384 | "npm-asset-scripts": { 385 | "clean": "gulp clean", 386 | "dist": "gulp dist", 387 | "lint": "gulp lint", 388 | "test": "gulp test:single" 389 | } 390 | }, 391 | "license": [ 392 | "MIT" 393 | ], 394 | "authors": [ 395 | { 396 | "name": "Adam Shaw", 397 | "email": "arshaw@arshaw.com", 398 | "url": "http://arshaw.com/" 399 | } 400 | ], 401 | "description": "Full-sized drag & drop event calendar", 402 | "homepage": "https://fullcalendar.io/", 403 | "keywords": [ 404 | "calendar", 405 | "event", 406 | "full-sized", 407 | "jquery-plugin" 408 | ], 409 | "time": "2017-12-18T05:59:22+00:00" 410 | }, 411 | { 412 | "name": "npm-asset/fullcalendar-scheduler", 413 | "version": "1.9.1", 414 | "dist": { 415 | "type": "tar", 416 | "url": "https://registry.npmjs.org/fullcalendar-scheduler/-/fullcalendar-scheduler-1.9.1.tgz", 417 | "reference": null, 418 | "shasum": "a9f5d7af913e9fe4a16cbc4589964f40b76bf01f" 419 | }, 420 | "require": { 421 | "npm-asset/fullcalendar": "~3.8.0", 422 | "npm-asset/jquery": ">=2,<4.0", 423 | "npm-asset/moment": ">=2.9.0,<3.0.0" 424 | }, 425 | "require-dev": { 426 | "npm-asset/awesome-typescript-loader": ">=3.4.0,<4.0.0", 427 | "npm-asset/components-jqueryui": "dev-github:components/jqueryui", 428 | "npm-asset/css-loader": ">=0.28.7,<0.29.0", 429 | "npm-asset/del": ">=2.2.0,<3.0.0", 430 | "npm-asset/dts-generator": ">=2.1.0,<3.0.0", 431 | "npm-asset/eslint": ">=4.13.1,<5.0.0", 432 | "npm-asset/eslint-config-standard": ">=11.0.0-beta.0,<12.0.0", 433 | "npm-asset/eslint-plugin-import": ">=2.8.0,<3.0.0", 434 | "npm-asset/eslint-plugin-jasmine": ">=2.9.1,<3.0.0", 435 | "npm-asset/eslint-plugin-node": ">=5.2.1,<6.0.0", 436 | "npm-asset/eslint-plugin-promise": ">=3.6.0,<4.0.0", 437 | "npm-asset/eslint-plugin-standard": ">=3.0.1,<4.0.0", 438 | "npm-asset/extract-text-webpack-plugin": ">=3.0.2,<4.0.0", 439 | "npm-asset/gulp": ">=3.9.0,<4.0.0", 440 | "npm-asset/gulp-concat": ">=2.6.0,<3.0.0", 441 | "npm-asset/gulp-cssmin": ">=0.1.7,<0.2.0", 442 | "npm-asset/gulp-eslint": ">=4.0.0,<5.0.0", 443 | "npm-asset/gulp-filter": ">=4.0.0,<5.0.0", 444 | "npm-asset/gulp-modify-file": ">=1.0.0,<2.0.0", 445 | "npm-asset/gulp-plumber": ">=1.0.1,<2.0.0", 446 | "npm-asset/gulp-rename": ">=1.2.2,<2.0.0", 447 | "npm-asset/gulp-tslint": ">=8.1.2,<9.0.0", 448 | "npm-asset/gulp-uglify": ">=1.2.0,<2.0.0", 449 | "npm-asset/gulp-util": ">=3.0.7,<4.0.0", 450 | "npm-asset/gulp-watch": ">=4.3.11,<5.0.0", 451 | "npm-asset/gulp-zip": ">=3.0.2,<4.0.0", 452 | "npm-asset/jasmine-core": "2.5.2", 453 | "npm-asset/jasmine-fixture": ">=2.0.0,<3.0.0", 454 | "npm-asset/jasmine-jquery": ">=2.1.1,<3.0.0", 455 | "npm-asset/jquery-mockjax": ">=2.2.1,<3.0.0", 456 | "npm-asset/jquery-simulate": "dev-github:jquery/jquery-simulate", 457 | "npm-asset/karma": ">=1.1.1,<2.0.0", 458 | "npm-asset/karma-jasmine": ">=1.0.2,<2.0.0", 459 | "npm-asset/karma-phantomjs-launcher": ">=1.0.1,<2.0.0", 460 | "npm-asset/karma-sourcemap-loader": ">=0.3.7,<0.4.0", 461 | "npm-asset/native-promise-only": ">=0.8.1,<0.9.0", 462 | "npm-asset/node-sass": ">=4.7.2,<5.0.0", 463 | "npm-asset/phantomjs-prebuilt": ">=2.1.7,<3.0.0", 464 | "npm-asset/sass-loader": ">=6.0.6,<7.0.0", 465 | "npm-asset/tslib": ">=1.8.0,<2.0.0", 466 | "npm-asset/tslint": ">=5.8.0,<6.0.0", 467 | "npm-asset/tslint-config-standard": ">=7.0.0,<8.0.0", 468 | "npm-asset/types--jquery": "2.0.47", 469 | "npm-asset/typescript": ">=2.6.2,<3.0.0", 470 | "npm-asset/webpack": ">=3.8.1,<4.0.0", 471 | "npm-asset/webpack-stream": ">=4.0.0,<5.0.0", 472 | "npm-asset/yargs": ">=4.6.0,<5.0.0" 473 | }, 474 | "type": "npm-asset-library", 475 | "extra": { 476 | "npm-asset-bugs": { 477 | "url": "https://github.com/fullcalendar/fullcalendar-scheduler/issues" 478 | }, 479 | "npm-asset-files": [ 480 | "dist/*.js", 481 | "dist/*.css", 482 | "dist/*.d.ts", 483 | "README.*", 484 | "LICENSE.*", 485 | "CHANGELOG.*", 486 | "CONTRIBUTING.*" 487 | ], 488 | "npm-asset-main": "dist/scheduler.js", 489 | "npm-asset-directories": [], 490 | "npm-asset-repository": { 491 | "type": "git", 492 | "url": "git+https://github.com/fullcalendar/fullcalendar-scheduler.git" 493 | }, 494 | "npm-asset-scripts": { 495 | "clean": "gulp clean", 496 | "dist": "gulp dist", 497 | "lint": "gulp lint", 498 | "test": "gulp test:single", 499 | "test-side-effects": "./bin/test-side-effects.sh" 500 | } 501 | }, 502 | "license": [ 503 | "SEE LICENSE IN LICENSE.md" 504 | ], 505 | "description": "A premium add-on to FullCalendar for displaying events and resources", 506 | "homepage": "https://fullcalendar.io/scheduler/", 507 | "time": "2017-12-18T06:00:21+00:00" 508 | }, 509 | { 510 | "name": "npm-asset/jquery", 511 | "version": "3.2.1", 512 | "dist": { 513 | "type": "tar", 514 | "url": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", 515 | "reference": null, 516 | "shasum": "5c4d9de652af6cd0a770154a631bba12b015c787" 517 | }, 518 | "require-dev": { 519 | "npm-asset/babel-preset-es2015": "6.6.0", 520 | "npm-asset/commitplease": "2.6.1", 521 | "npm-asset/core-js": "2.2.2", 522 | "npm-asset/cross-spawn": "2.2.3", 523 | "npm-asset/eslint-config-jquery": "1.0.0", 524 | "npm-asset/grunt": "1.0.1", 525 | "npm-asset/grunt-babel": "6.0.0", 526 | "npm-asset/grunt-cli": "1.2.0", 527 | "npm-asset/grunt-compare-size": "0.4.2", 528 | "npm-asset/grunt-contrib-uglify": "1.0.1", 529 | "npm-asset/grunt-contrib-watch": "1.0.0", 530 | "npm-asset/grunt-eslint": "19.0.0", 531 | "npm-asset/grunt-git-authors": "3.2.0", 532 | "npm-asset/grunt-jsonlint": "1.0.7", 533 | "npm-asset/grunt-newer": "1.2.0", 534 | "npm-asset/grunt-npmcopy": "0.1.0", 535 | "npm-asset/gzip-js": "0.3.2", 536 | "npm-asset/husky": "0.11.4", 537 | "npm-asset/insight": "0.8.1", 538 | "npm-asset/jsdom": "5.6.1", 539 | "npm-asset/load-grunt-tasks": "3.5.0", 540 | "npm-asset/native-promise-only": "0.8.1", 541 | "npm-asset/promises-aplus-tests": "2.1.2", 542 | "npm-asset/q": "1.4.1", 543 | "npm-asset/qunit-assert-step": "1.0.3", 544 | "npm-asset/qunitjs": "1.23.1", 545 | "npm-asset/requirejs": "2.2.0", 546 | "npm-asset/sinon": "1.17.3", 547 | "npm-asset/sizzle": "2.3.3", 548 | "npm-asset/strip-json-comments": "2.0.1", 549 | "npm-asset/testswarm": "1.1.0" 550 | }, 551 | "type": "npm-asset-library", 552 | "extra": { 553 | "npm-asset-bugs": { 554 | "url": "https://github.com/jquery/jquery/issues" 555 | }, 556 | "npm-asset-main": "dist/jquery.js", 557 | "npm-asset-directories": [], 558 | "npm-asset-repository": { 559 | "type": "git", 560 | "url": "git+https://github.com/jquery/jquery.git" 561 | }, 562 | "npm-asset-scripts": { 563 | "build": "npm install && grunt", 564 | "start": "grunt watch", 565 | "test": "grunt && grunt test:slow", 566 | "precommit": "grunt lint:newer", 567 | "commitmsg": "node node_modules/commitplease" 568 | } 569 | }, 570 | "license": [ 571 | "MIT" 572 | ], 573 | "authors": [ 574 | { 575 | "name": "JS Foundation and other contributors", 576 | "url": "https://github.com/jquery/jquery/blob/3.2.1/AUTHORS.txt" 577 | } 578 | ], 579 | "description": "JavaScript library for DOM operations", 580 | "homepage": "https://jquery.com", 581 | "keywords": [ 582 | "browser", 583 | "javascript", 584 | "jquery", 585 | "library" 586 | ] 587 | }, 588 | { 589 | "name": "npm-asset/moment", 590 | "version": "2.20.1", 591 | "dist": { 592 | "type": "tar", 593 | "url": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", 594 | "reference": null, 595 | "shasum": "d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" 596 | }, 597 | "require-dev": { 598 | "npm-asset/benchmark": "dev-default|*", 599 | "npm-asset/coveralls": ">=2.11.2,<3.0.0", 600 | "npm-asset/es6-promise": "dev-default|*", 601 | "npm-asset/grunt": "~0.4", 602 | "npm-asset/grunt-benchmark": "dev-default|*", 603 | "npm-asset/grunt-cli": "dev-default|*", 604 | "npm-asset/grunt-contrib-clean": "dev-default|*", 605 | "npm-asset/grunt-contrib-concat": "dev-default|*", 606 | "npm-asset/grunt-contrib-copy": "dev-default|*", 607 | "npm-asset/grunt-contrib-jshint": "dev-default|*", 608 | "npm-asset/grunt-contrib-uglify": "dev-default|*", 609 | "npm-asset/grunt-contrib-watch": "dev-default|*", 610 | "npm-asset/grunt-env": "dev-default|*", 611 | "npm-asset/grunt-exec": "dev-default|*", 612 | "npm-asset/grunt-jscs": "dev-default|*", 613 | "npm-asset/grunt-karma": "dev-default|*", 614 | "npm-asset/grunt-nuget": "dev-default|*", 615 | "npm-asset/grunt-string-replace": "dev-default|*", 616 | "npm-asset/karma": "dev-default|*", 617 | "npm-asset/karma-chrome-launcher": "dev-default|*", 618 | "npm-asset/karma-firefox-launcher": "dev-default|*", 619 | "npm-asset/karma-qunit": "dev-default|*", 620 | "npm-asset/karma-sauce-launcher": "dev-default|*", 621 | "npm-asset/load-grunt-tasks": "dev-default|*", 622 | "npm-asset/nyc": ">=2.1.4,<3.0.0", 623 | "npm-asset/qunit": ">=0.7.5,<0.8.0", 624 | "npm-asset/qunit-cli": ">=0.1.4,<0.2.0", 625 | "npm-asset/rollup": "dev-default|*", 626 | "npm-asset/spacejam": "dev-default|*", 627 | "npm-asset/typescript": ">=1.8.10,<2.0.0", 628 | "npm-asset/uglify-js": "dev-default|*" 629 | }, 630 | "type": "npm-asset-library", 631 | "extra": { 632 | "npm-asset-bugs": { 633 | "url": "https://github.com/moment/moment/issues" 634 | }, 635 | "npm-asset-main": "./moment.js", 636 | "npm-asset-directories": [], 637 | "npm-asset-repository": { 638 | "type": "git", 639 | "url": "git+https://github.com/moment/moment.git" 640 | }, 641 | "npm-asset-scripts": { 642 | "typescript-test": "tsc --project typing-tests", 643 | "test": "grunt test", 644 | "coverage": "nyc npm test && nyc report", 645 | "coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls" 646 | }, 647 | "npm-asset-engines": { 648 | "node": "*" 649 | } 650 | }, 651 | "license": [ 652 | "MIT" 653 | ], 654 | "authors": [ 655 | { 656 | "name": "Iskren Ivov Chernev", 657 | "email": "iskren.chernev@gmail.com", 658 | "url": "https://github.com/ichernev" 659 | }, 660 | { 661 | "name": "Tim Wood", 662 | "email": "washwithcare@gmail.com", 663 | "url": "http://timwoodcreates.com/" 664 | }, 665 | { 666 | "name": "Rocky Meza", 667 | "url": "http://rockymeza.com" 668 | }, 669 | { 670 | "name": "Matt Johnson", 671 | "email": "mj1856@hotmail.com", 672 | "url": "http://codeofmatt.com" 673 | }, 674 | { 675 | "name": "Isaac Cambron", 676 | "email": "isaac@isaaccambron.com", 677 | "url": "http://isaaccambron.com" 678 | }, 679 | { 680 | "name": "Andre Polykanine", 681 | "email": "andre@oire.org", 682 | "url": "https://github.com/oire" 683 | } 684 | ], 685 | "description": "Parse, validate, manipulate, and display dates", 686 | "homepage": "http://momentjs.com", 687 | "keywords": [ 688 | "date", 689 | "ender", 690 | "format", 691 | "i18n", 692 | "l10n", 693 | "moment", 694 | "parse", 695 | "time", 696 | "validate" 697 | ], 698 | "time": "2017-12-19T04:44:18+00:00" 699 | }, 700 | { 701 | "name": "yiisoft/yii2", 702 | "version": "2.0.13.1", 703 | "source": { 704 | "type": "git", 705 | "url": "https://github.com/yiisoft/yii2-framework.git", 706 | "reference": "7af96d8da5ea3e9a5dd05d0e734b21c5726a6ddf" 707 | }, 708 | "dist": { 709 | "type": "zip", 710 | "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/7af96d8da5ea3e9a5dd05d0e734b21c5726a6ddf", 711 | "reference": "7af96d8da5ea3e9a5dd05d0e734b21c5726a6ddf", 712 | "shasum": "" 713 | }, 714 | "require": { 715 | "bower-asset/inputmask": "~3.2.2 | ~3.3.5", 716 | "bower-asset/jquery": "3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", 717 | "bower-asset/punycode": "1.3.*", 718 | "bower-asset/yii2-pjax": "~2.0.1", 719 | "cebe/markdown": "~1.0.0 | ~1.1.0", 720 | "ext-ctype": "*", 721 | "ext-mbstring": "*", 722 | "ezyang/htmlpurifier": "~4.6", 723 | "lib-pcre": "*", 724 | "php": ">=5.4.0", 725 | "yiisoft/yii2-composer": "~2.0.4" 726 | }, 727 | "bin": [ 728 | "yii" 729 | ], 730 | "type": "library", 731 | "extra": { 732 | "branch-alias": { 733 | "dev-master": "2.0.x-dev" 734 | } 735 | }, 736 | "autoload": { 737 | "psr-4": { 738 | "yii\\": "" 739 | } 740 | }, 741 | "notification-url": "https://packagist.org/downloads/", 742 | "license": [ 743 | "BSD-3-Clause" 744 | ], 745 | "authors": [ 746 | { 747 | "name": "Qiang Xue", 748 | "email": "qiang.xue@gmail.com", 749 | "homepage": "http://www.yiiframework.com/", 750 | "role": "Founder and project lead" 751 | }, 752 | { 753 | "name": "Alexander Makarov", 754 | "email": "sam@rmcreative.ru", 755 | "homepage": "http://rmcreative.ru/", 756 | "role": "Core framework development" 757 | }, 758 | { 759 | "name": "Maurizio Domba", 760 | "homepage": "http://mdomba.info/", 761 | "role": "Core framework development" 762 | }, 763 | { 764 | "name": "Carsten Brandt", 765 | "email": "mail@cebe.cc", 766 | "homepage": "http://cebe.cc/", 767 | "role": "Core framework development" 768 | }, 769 | { 770 | "name": "Timur Ruziev", 771 | "email": "resurtm@gmail.com", 772 | "homepage": "http://resurtm.com/", 773 | "role": "Core framework development" 774 | }, 775 | { 776 | "name": "Paul Klimov", 777 | "email": "klimov.paul@gmail.com", 778 | "role": "Core framework development" 779 | }, 780 | { 781 | "name": "Dmitry Naumenko", 782 | "email": "d.naumenko.a@gmail.com", 783 | "role": "Core framework development" 784 | }, 785 | { 786 | "name": "Boudewijn Vahrmeijer", 787 | "email": "info@dynasource.eu", 788 | "homepage": "http://dynasource.eu", 789 | "role": "Core framework development" 790 | } 791 | ], 792 | "description": "Yii PHP Framework Version 2", 793 | "homepage": "http://www.yiiframework.com/", 794 | "keywords": [ 795 | "framework", 796 | "yii2" 797 | ], 798 | "time": "2017-11-14T11:08:21+00:00" 799 | }, 800 | { 801 | "name": "yiisoft/yii2-composer", 802 | "version": "2.0.5", 803 | "source": { 804 | "type": "git", 805 | "url": "https://github.com/yiisoft/yii2-composer.git", 806 | "reference": "3f4923c2bde6caf3f5b88cc22fdd5770f52f8df2" 807 | }, 808 | "dist": { 809 | "type": "zip", 810 | "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/3f4923c2bde6caf3f5b88cc22fdd5770f52f8df2", 811 | "reference": "3f4923c2bde6caf3f5b88cc22fdd5770f52f8df2", 812 | "shasum": "" 813 | }, 814 | "require": { 815 | "composer-plugin-api": "^1.0" 816 | }, 817 | "require-dev": { 818 | "composer/composer": "^1.0" 819 | }, 820 | "type": "composer-plugin", 821 | "extra": { 822 | "class": "yii\\composer\\Plugin", 823 | "branch-alias": { 824 | "dev-master": "2.0.x-dev" 825 | } 826 | }, 827 | "autoload": { 828 | "psr-4": { 829 | "yii\\composer\\": "" 830 | } 831 | }, 832 | "notification-url": "https://packagist.org/downloads/", 833 | "license": [ 834 | "BSD-3-Clause" 835 | ], 836 | "authors": [ 837 | { 838 | "name": "Qiang Xue", 839 | "email": "qiang.xue@gmail.com" 840 | } 841 | ], 842 | "description": "The composer plugin for Yii extension installer", 843 | "keywords": [ 844 | "composer", 845 | "extension installer", 846 | "yii2" 847 | ], 848 | "time": "2016-12-20T13:26:02+00:00" 849 | }, 850 | { 851 | "name": "yiisoft/yii2-jui", 852 | "version": "2.0.7", 853 | "source": { 854 | "type": "git", 855 | "url": "https://github.com/yiisoft/yii2-jui.git", 856 | "reference": "ce45c16d4fbbe7d1c516d8d0e8311e07f6138eed" 857 | }, 858 | "dist": { 859 | "type": "zip", 860 | "url": "https://api.github.com/repos/yiisoft/yii2-jui/zipball/ce45c16d4fbbe7d1c516d8d0e8311e07f6138eed", 861 | "reference": "ce45c16d4fbbe7d1c516d8d0e8311e07f6138eed", 862 | "shasum": "" 863 | }, 864 | "require": { 865 | "bower-asset/jquery-ui": "~1.12.1", 866 | "yiisoft/yii2": "~2.0.4" 867 | }, 868 | "type": "yii2-extension", 869 | "extra": { 870 | "branch-alias": { 871 | "dev-master": "2.0.x-dev" 872 | } 873 | }, 874 | "autoload": { 875 | "psr-4": { 876 | "yii\\jui\\": "" 877 | } 878 | }, 879 | "notification-url": "https://packagist.org/downloads/", 880 | "license": [ 881 | "BSD-3-Clause" 882 | ], 883 | "authors": [ 884 | { 885 | "name": "Qiang Xue", 886 | "email": "qiang.xue@gmail.com" 887 | } 888 | ], 889 | "description": "The Jquery UI extension for the Yii framework", 890 | "keywords": [ 891 | "jQuery UI", 892 | "yii2" 893 | ], 894 | "time": "2017-11-25T15:32:29+00:00" 895 | } 896 | ], 897 | "packages-dev": [], 898 | "aliases": [], 899 | "minimum-stability": "stable", 900 | "stability-flags": [], 901 | "prefer-stable": false, 902 | "prefer-lowest": false, 903 | "platform": { 904 | "php": ">=5.5.0" 905 | }, 906 | "platform-dev": [] 907 | } 908 | --------------------------------------------------------------------------------