Planning::showPlanning PHP Method

showPlanning() static public method

Function name change since version 0.84 show() => showPlanning Function prototype changes in 9.1 (no more parameters)
static public showPlanning ( $fullview = true ) : Nothing
return Nothing (display function)
    static function showPlanning($fullview = true)
    {
        global $CFG_GLPI, $DB;
        if (!static::canView()) {
            return false;
        }
        $fullview_str = $fullview ? "true" : "false";
        $pl_height = "\$(document).height()-280";
        if ($_SESSION['glpilayout'] == "vsplit") {
            $pl_height = "\$('.ui-tabs-panel').height()-30";
        }
        $date_formats = array(0 => 'YYYY MMM DD', 1 => 'DD MMM YYYY', 2 => 'MMM DD YYYY');
        $date_format = $date_formats[$_SESSION["glpidate_format"]];
        self::initSessionForCurrentUser();
        if ($fullview) {
            Planning::showPlanningFilter();
            $default_view = "agendaWeek";
            $header = "{\n            left:   'prev,next,today',\n            center: 'title',\n            right:  'month,agendaWeek,agendaDay,listYear'\n         }";
        } else {
            $default_view = "listYear";
            $header = "false";
            $pl_height = "400";
        }
        echo "<div id='planning'></div>";
        echo Html::scriptBlock("\n      \$(document).ready(function() {\n         var disable_qtip = false,\n             disable_edit = false;\n         \$('html')\n            .mousedown(function() {\n               disable_qtip = true;\n               \$('.qtip').hide();\n            })\n            .mouseup(function() {\n               disable_qtip = false;\n            });\n\n         var window_focused = true;\n         var loaded = false;\n         window.onblur = function() { window_focused = false; }\n         window.onfocus = function() { window_focused = true; }\n\n         \$('#planning').fullCalendar({\n            height:      {$pl_height},\n            theme:       true,\n            weekNumbers: " . ($fullview ? 'true' : 'false') . ",\n            defaultView: '{$default_view}',\n            timeFormat:  'H:mm',\n            eventLimit:  true, // show 'more' button when too mmany events\n            minTime:     '" . $CFG_GLPI['planning_begin'] . "',\n            maxTime:     '" . $CFG_GLPI['planning_end'] . "',\n            listDayAltFormat: false,\n            windowResize: function(view) {\n               \$(this).fullCalendar('option', 'height', {$pl_height});\n            },\n            header: {$header},\n            views: {\n               month: {\n                  titleFormat: '{$date_format}'\n               },\n               agendaWeek: {\n                  titleFormat: '{$date_format}'\n               },\n               agendaDay: {\n                  titleFormat: '{$date_format}'\n               }\n            },\n            viewRender: function(view){ // on date changes, replicate to datepicker\n               var currentdate = view.intervalStart;\n               \$('#planning_datepicker').datepicker('setDate', new Date(currentdate));\n            },\n            eventRender: function(event, element, view) {\n               var eventtype_marker = '<span class=\"event_type\" style=\"background-color: '+event.typeColor+'\"></span>';\n               element.find('.fc-content').after(eventtype_marker);\n               element.find('.fc-list-item-title > a').prepend(eventtype_marker);\n\n               var content = event.content;\n               var tooltip = event.tooltip;\n               if(view.name !== 'month' && view.name !== 'listYear' && !event.allDay){\n                  element\n                     .append('<div class=\"content\">'+content+'</div>');\n               }\n\n               // add classes to current event\n               if (typeof event.end !== 'undefined'\n                   && event.end !== null) {\n                  added_classes = event.end.isBefore(moment())      ? ' event_past'   : '';\n                  added_classes+= event.end.isAfter(moment())       ? ' event_future' : '';\n                  added_classes+= event.end.isSame(moment(), 'day') ? ' event_today'  : '';\n               }\n               if (event.state != '') {\n                  added_classes+= event.state == 0 ? ' event_info'\n                                : event.state == 1 ? ' event_todo'\n                                : event.state == 2 ? ' event_done'\n                                : '';\n               }\n               if (added_classes != '') {\n                  element.addClass(added_classes);\n               }\n\n               // add tooltip to event\n               if (!disable_qtip) {\n                  var qtip_position = {\n                     viewport: 'auto'\n                  };\n                  if (view.name === 'listYear') {\n                     qtip_position.target= element.find('a');\n                  }\n                  element.qtip({\n                     position: qtip_position,\n                     content: tooltip,\n                     style: {\n                        classes: 'qtip-shadow qtip-bootstrap'\n                     },\n                     show: {\n                        solo: true,\n                        delay: 400\n                     },\n                     hide: {\n                        fixed: true,\n                        delay: 100\n                     },\n                     events: {\n                        show: function(event, api) {\n                           if(!window_focused) {\n                              event.preventDefault();\n                           }\n                        }\n                     }\n                  });\n               }\n            },\n            viewRender: function(view, element) {\n               // force refetch events from ajax on view change (don't refetch on firt load)\n               if (loaded) {\n                  \$('#planning').fullCalendar('refetchEvents')\n               }\n            },\n            eventAfterAllRender: function(view) {\n               // set a var to force refetch events (see viewRender callback)\n               loaded = true;\n\n               // scroll div to first element needed to be viewed\n               var scrolltoevent = \$('#planning .event_past.event_todo').first();\n               if (scrolltoevent.length == 0) {\n                  scrolltoevent = \$('#planning .event_today').first();\n               }\n               if (scrolltoevent.length == 0) {\n                  scrolltoevent = \$('#planning .event_future').first();\n               }\n               if (scrolltoevent.length == 0) {\n                  scrolltoevent = \$('#planning .event_past').last();\n               }\n               if (scrolltoevent.length) {\n                  \$('#planning .fc-scroller').scrollTop(scrolltoevent.prop('offsetTop')-25);\n               }\n            },\n            eventSources: [{\n               url:  '" . $CFG_GLPI['root_doc'] . "/ajax/planning.php',\n               type: 'POST',\n               data: function() {\n                  var view_name = \$('#planning').fullCalendar('getView').name;\n                  var display_done_events = 1;\n                  if (view_name == 'listYear') {\n                     display_done_events = 0;\n                  }\n                  return {\n                     'action': 'get_events',\n                     'display_done_events': display_done_events\n                  };\n               },\n               success: function(data) {\n                  if (!{$fullview_str} && data.length == 0) {\n                     \$('#planning').fullCalendar('option', 'height', 0);\n                  }\n               },\n               error: function() {\n                  console.log('there was an error while fetching events!');\n               }\n            }],\n\n            // EDIT EVENTS\n            editable: true, // we can drag and resize events\n            eventResize: function(event, delta, revertFunc) {\n               editEventTimes(event, revertFunc);\n            },\n            eventResizeStart: function() {\n               disable_edit = true;\n            },\n            eventResizeStop: function() {\n               setTimeout(function(){\n                  disable_edit = false;\n               }, 300);\n            },\n            eventDrop: function(event, delta, revertFunc) {\n               editEventTimes(event, revertFunc);\n            },\n            eventClick: function(event) {\n               if (event.ajaxurl && event.editable && !disable_edit) {\n                  \$('<div>')\n                     .dialog({\n                        modal:  true,\n                        width:  'auto',\n                        height: 'auto'\n                     })\n                     .load(event.ajaxurl, function() {\n                        \$(this).dialog('option', 'position', ['center', 'center'] );\n                     });\n                  return false;\n               };\n            },\n\n\n            // ADD EVENTS\n            selectable: true,\n            /*selectHelper: function(start, end) {\n               return \$('<div class=\"planning-select-helper\" />').text(start+' '+end);\n            },*/ // doesn't work anymore: see https://github.com/fullcalendar/fullcalendar/issues/2832\n            select: function(start, end, jsEvent) {\n               \$('<div>').dialog({\n                  modal:  true,\n                  width:  'auto',\n                  height: 'auto',\n                  open: function () {\n                      \$(this).load(\n                        '" . $CFG_GLPI['root_doc'] . "/ajax/planning.php?action=add_event_fromselect',\n                        {\n                           begin: start.format(),\n                           end:   end.format()\n                        },\n                        function() {\n                           \$(this).dialog('option', 'position', ['center', 'center'] );\n                        }\n                      );\n                  },\n                  position: {\n                     my: 'center',\n                     at: 'center',\n                     viewport: \$(window)\n                  }\n               });\n\n               \$('#planning').fullCalendar('unselect');\n            }\n         });\n\n\n         // send ajax for event storage (on event drag/resize)\n         var editEventTimes = function(event, revertFunc) {\n            if (event._allDay) {\n               var start = event.start.format()+'T00:00:00';\n               var end = start;\n               if (typeof event.end != 'undefined') {\n                  if (event.end == null) {\n                     end = \$.fullCalendar.moment(event.start)\n                              .add(1, 'days')\n                              .format()+'T00:00:00';\n                  } else {\n                     end = event.end.format()+'T00:00:00';\n                  }\n               }\n\n            } else {\n               var start = event.start.format();\n               if (event.end == null) {\n                  var end = \$.fullCalendar.moment(event.start)\n                              .add(2, 'hours')\n                              .format();\n               } else {\n                  var end = event.end.format();\n               }\n            }\n\n            \$.ajax({\n               url:  '" . $CFG_GLPI['root_doc'] . "/ajax/planning.php',\n               type: 'POST',\n               data: {\n                  action:   'update_event_times',\n                  start:    start,\n                  end:      end,\n                  itemtype: event.itemtype,\n                  items_id: event.items_id\n               },\n               success: function(html) {\n                  if (!html) {\n                     revertFunc();\n                  }\n                  \$('#planning').fullCalendar('updateEvent', event);\n                  displayAjaxMessageAfterRedirect();\n               },\n               error: function() {\n                  revertFunc();\n               }\n            });\n         };\n\n         // attach button (planning and refresh) in planning header\n         \$('#planning .fc-toolbar .fc-center h2')\n            .after(\n               \$('<img id=\"refresh_planning\" class=\"pointer\" src=\"" . $CFG_GLPI['root_doc'] . "/pics/refresh.png\">')\n            ).after(\n               \$('<input type=\"hidden\" id=\"planning_datepicker\">')\n            );\n\n         \$('#refresh_planning').click(function() {\n            \$('#planning').fullCalendar('refetchEvents')\n         })\n\n         // datepicker behavior\n         \$('#planning_datepicker').datepicker({\n            changeMonth:     true,\n            changeYear:      true,\n            numberOfMonths:  3,\n            showOn:          'button',\n            buttonImage:     '" . $CFG_GLPI['root_doc'] . "/pics/calendar.png',\n            buttonImageOnly: true,\n            dateFormat:      'DD, d MM, yy',\n            onSelect: function(dateText, inst) {\n               var selected_date = \$(this).datepicker('getDate');\n               \$('#planning').fullCalendar('gotoDate', selected_date);\n            }\n         });\n      });");
        return;
    }

Usage Example

示例#1
0
 static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0)
 {
     if ($item->getType() == __CLASS__) {
         switch ($tabnum) {
             case 1:
                 // all
                 Planning::showSelectionForm($_POST['type'], $_POST['date'], 'my', 0, $_POST["limititemtype"]);
                 Planning::showPlanning($_SESSION['glpiID'], $_POST["gID"], $_POST["date"], $_POST["type"], $_POST["limititemtype"]);
                 break;
             case 2:
                 Planning::showSelectionForm($_POST['type'], $_POST['date'], 'mygroups', 0, $_POST["limititemtype"]);
                 Planning::showPlanning($_SESSION['glpiID'], 'mine', $_POST["date"], $_POST["type"], $_POST["limititemtype"]);
                 break;
             case 3:
                 Planning::showSelectionForm($_POST['type'], $_POST['date'], 'users', $_POST["uID"], $_POST["limititemtype"]);
                 Planning::showPlanning($_POST['uID'], 0, $_POST["date"], $_POST["type"], $_POST["limititemtype"]);
                 break;
             case 4:
                 Planning::showSelectionForm($_POST['type'], $_POST['date'], 'groups', $_POST["gID"], $_POST["limititemtype"]);
                 Planning::showPlanning(0, $_POST['gID'], $_POST["date"], $_POST["type"], $_POST["limititemtype"]);
                 break;
         }
     }
     return true;
 }
All Usage Examples Of Planning::showPlanning