1 line
		
	
	
		
			14 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			1 line
		
	
	
		
			14 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var GLPIPlanning={calendar:null,dom_id:"",all_resources:[],visible_res:[],drag_object:null,last_view:null,display:function(e){var n=typeof e!=="undefined"?e:{};var t={full_view:true,default_view:"timeGridWeek",height:GLPIPlanning.getHeight,plugins:["dayGrid","interaction","list","timeGrid","resourceTimeline","rrule"],license_key:"",resources:[],now:null,rand:"",header:{left:"prev,next,today",center:"title",right:"dayGridMonth, timeGridWeek, timeGridDay, listFull, resourceWeek"}};n=Object.assign({},t,n);GLPIPlanning.dom_id="planning"+n.rand;var i=true;var a=false;var r=false;var l=false;this.all_resources=n.resources;this.visible_res=Object.keys(this.all_resources).filter((function(e){return GLPIPlanning.all_resources[e].is_visible}));if(n.full_view){$("#"+GLPIPlanning.dom_id).closest(".ui-tabs").width("98%")}this.calendar=new FullCalendar.Calendar(document.getElementById(GLPIPlanning.dom_id),{plugins:n.plugins,height:n.height,timeZone:"UTC",theme:true,weekNumbers:n.full_view?true:false,defaultView:n.default_view,timeFormat:"H:mm",eventLimit:true,minTime:CFG_GLPI.planning_begin,maxTime:CFG_GLPI.planning_end,schedulerLicenseKey:n.license_key,resourceAreaWidth:"15%",editable:true,droppable:false,nowIndicator:true,now:n.now,listDayAltFormat:false,agendaEventMinHeight:13,header:n.header,resources:function(e,t){var i=[];i=n.resources.filter((function(e,n){return GLPIPlanning.visible_res.indexOf(n.toString())!==-1}));t(i)},views:{listFull:{type:"list",titleFormat:function(){return""},visibleRange:function(e){var n=e.getFullYear();return{start:new Date(e.getTime()).setFullYear(n-5),end:new Date(e.getTime()).setFullYear(n+5)}}},resourceWeek:{type:"resourceTimeline",buttonText:"Timeline Week",duration:{weeks:1},groupByDateAndResource:true,slotLabelFormat:[{week:"short"},{weekday:"short",day:"numeric",month:"numeric",omitCommas:true},function(e){return e.date.hour}]}},resourceRender:function(e){var n="";var t=e.resource._resource.extendedProps.itemtype||"";switch(t.toLowerCase()){case"group":case"group_user":n="users";break;case"user":n="user"}$(e.el).find(".fc-cell-text").prepend('<i class="fas fa-'+n+'"></i> ');if(e.resource._resource.extendedProps.itemtype=="Group_User"){e.el.style.backgroundColor="lightgray"}},eventRender:function(e){var n=e.event;var t=n.extendedProps;var a=$(e.el);var l=e.view;a.data("myevent",n);var o='<span class="event_type" style="background-color: '+t.typeColor+'"></span>';a.append(o);var s=t.content;var c=t.tooltip;if(l.type!=="dayGridMonth"&&l.type.indexOf("list")<0&&n.rendering!="background"&&!n.allDay){a.append('<div class="content">'+s+"</div>")}if("icon"in t){var d="";if("icon_alt"in t){d=t.icon_alt}a.find(".fc-title, .fc-list-item-title").append(" <i class='"+t.icon+"' title='"+d+"'></i>")}var u="";if(typeof n.end!=="undefined"&&n.end!==null){var f=new Date;var p=n.end;u=p.getTime()<f.getTime()?" event_past":"";u+=p.getTime()>f.getTime()?" event_future":"";u+=p.toDateString()===f.toDateString()?" event_today":""}if(t.state!=""){u+=t.state==0?" event_info":t.state==1?" event_todo":t.state==2?" event_done":""}if(u!=""){a.addClass(u)}if(!r){var g={target:"mouse",adjust:{mouse:false},viewport:$(window)};if(l.type.indexOf("list")>=0){g.target=a.find("a")}a.qtip({position:g,content:c,style:{classes:"qtip-shadow qtip-bootstrap"},show:{solo:true,delay:100},hide:{fixed:true,delay:100},events:{show:function(e){if(!i){e.preventDefault()}}}})}a.on("contextmenu",(function(e){e.preventDefault();var t=a.offset();$(".planning-context-menu").remove();var i=$('<ul class="planning-context-menu" data-event-id="">                   <li class="clone-event"><i class="far fa-clone"></i>'+__("Clone")+'</li>                   <li class="delete-event"><i class="fas fa-trash"></i>'+__("Delete")+"</li>                </ul>");$("body").append(i);i.css({left:t.left+a.outerWidth()/4,top:t.top});var r=n.extendedProps;var l={};var o={};if(typeof n.getresources==="function"){l=n.getresources()}if(l.length===1){o={itemtype:l[0].extendedProps.itemtype||null,items_id:l[0].extendedProps.items_id||null}}$(".planning-context-menu .clone-event").click((function(){$.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"clone_event",event:{old_itemtype:r.itemtype,old_items_id:r.items_id,actor:o,start:n.start.toISOString(),end:n.end.toISOString()}},success:function(){GLPIPlanning.refresh()}})}));$(".planning-context-menu .delete-event").click((function(){var e=function(e){e=e||false;$.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"delete_event",event:{itemtype:r.itemtype,items_id:r.items_id,day:n.start.toISOString().substring(0,10),instance:e?1:0}},success:function(){GLPIPlanning.refresh()}})};if(!("is_recurrent"in r)||!r.is_recurrent){e()}else{$('<div title="'+__("Make a choice")+'"></div>').html(__("Delete the whole serie of the recurrent event")+"<br>"+__("or just add an exception by deleting this instance?")).dialog({resizable:false,height:"auto",width:"auto",modal:true,buttons:[{text:$("<div/>").html(__("Serie")).text(),icon:"ui-icon-trash",click:function(){e(false);$(this).dialog("close")}},{text:$("<div/>").html(__("Instance")).text(),icon:"ui-icon-trash",click:function(){e(true);$(this).dialog("close")}}]})}}))}))},datesRender:function(e){var n=e.view;if(a){GLPIPlanning.refresh()}else{a=true}$("#"+GLPIPlanning.dom_id+" .fc-toolbar .fc-center h2").after($('<i id="refresh_planning" class="fa fa-sync pointer"></i>')).after($('<div id="planning_datepicker"><a data-toggle><i class="far fa-calendar-alt fa-lg pointer"></i></a>'));if(n.type=="listFull"){if($("#planning_datepicker").length>0&&"_flatpickr"in $("#planning_datepicker")[0]){$("#planning_datepicker")[0]._flatpickr.destroy()}$("#planning_datepicker").hide();$("#planning .fc-left .fc-button-group").hide()}else{$("#planning_datepicker").show();GLPIPlanning.initFCDatePicker(new Date(n.currentStart));$("#planning .fc-left .fc-button-group").show()}GLPIPlanning.setEndofDays(e.view)},viewSkeletonRender:function(e){var n=e.view.type;GLPIPlanning.last_view=n;$.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"view_changed",view:n}});GLPIPlanning.setEndofDays(e.view)},events:{url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",extraParams:function(){var e=GLPIPlanning.calendar?GLPIPlanning.calendar.state.viewType:n.default_view;var t=1;if(e.indexOf("list")>=0){t=0}return{action:"get_events",display_done_events:t,view_name:e}},success:function(e){if(!n.full_view&&e.length==0){GLPIPlanning.calendar.setOption("height",0)}},failure:function(e){console.error("there was an error while fetching events!",e)}},eventResize:function(e){var n=e.event;var t=n.extendedProps;var i=t.is_recurrent||false;if(i){$("<div></div>").dialog({modal:true,title:__("Recurring event resized"),width:"auto",height:"auto",buttons:[{text:__("Serie"),click:function(){$(this).remove();GLPIPlanning.editEventTimes(e)}},{text:__("Instance"),click:function(){$(this).remove();GLPIPlanning.editEventTimes(e,true)}}]}).text(__("The resized event is a recurring event. Do you want to change the serie or instance ?"))}else{GLPIPlanning.editEventTimes(e)}},eventResizeStart:function(){l=true;r=true},eventResizeStop:function(){setTimeout((function(){l=false;r=false}),300)},eventDragStart:function(){r=true},eventDrop:function(e){r=false;var n=e.event;var t=n.extendedProps;var i=t.is_recurrent||false;if(i){$("<div></div>").dialog({modal:true,title:__("Recurring event dragged"),width:"auto",height:"auto",buttons:[{text:__("Serie"),click:function(){$(this).remove();GLPIPlanning.editEventTimes(e)}},{text:__("Instance"),click:function(){$(this).remove();GLPIPlanning.editEventTimes(e,true)}}]}).text(__("The dragged event is a recurring event. Do you want to move the serie or instance ?"))}else{GLPIPlanning.editEventTimes(e)}},eventClick:function(e){var n=e.event;var t=n.start;var i=n.extendedProps.ajaxurl+"&start="+t.toISOString();var a=n.extendedProps._editable;if(i&&a&&!l){e.jsEvent.preventDefault();$("<div></div>").dialog({modal:true,width:"auto",height:"auto",close:function(){GLPIPlanning.refresh()}}).load(i,(function(){$(this).dialog("option","position",["center","center"])}))}},selectable:true,select:function(e){var n=((((e||{}).resource||{})._resource||{}).extendedProps||{}).itemtype||"";var t=((((e||{}).resource||{})._resource||{}).extendedProps||{}).items_id||0;if(n==="Group_User"){GLPIPlanning.calendar.unselect();return false}var i=e.start;var a=e.end;$("<div></div>").dialog({modal:true,width:"auto",height:"auto",open:function(){$(this).load(CFG_GLPI.root_doc+"/ajax/planning.php",{action:"add_event_fromselect",begin:i.toISOString(),end:a.toISOString(),res_itemtype:n,res_items_id:t},(function(){$(this).dialog("option","position",["center","center"])}))},close:function(){$(this).dialog("close");$(this).remove()},position:{my:"center",at:"top",viewport:$(window),of:$("#page")}});GLPIPlanning.calendar.unselect()}});var o=Object.keys(FullCalendarLocales);if(o.length===1){GLPIPlanning.calendar.setOption("locale",o[0])}$(".planning_on_central a").mousedown((function(){r=true;$(".qtip").hide()})).mouseup((function(){r=false}));window.onblur=function(){i=false};window.onfocus=function(){i=true};GLPIPlanning.calendar.render();$("#refresh_planning").click((function(){GLPIPlanning.refresh()}));GLPIPlanning.initFCDatePicker();$(window).focus();$(document).click((function(){$(".planning-context-menu").remove()}))},refresh:function(){if(typeof GLPIPlanning.calendar.refetchResources=="function"){GLPIPlanning.calendar.refetchResources()}GLPIPlanning.calendar.refetchEvents();GLPIPlanning.calendar.rerenderEvents();window.displayAjaxMessageAfterRedirect()},toggleResource:function(e,n){var t=GLPIPlanning.all_resources.findIndex((function(n){return n.id==e}));if(t!==-1){if(n&&GLPIPlanning.visible_res.indexOf(t.toString())===-1){GLPIPlanning.visible_res.push(t.toString())}else if(!n){GLPIPlanning.visible_res.splice(GLPIPlanning.visible_res.indexOf(t.toString()),1)}}},setEndofDays:function(e){if(e.constructor.name==="ResourceTimelineView"){var n=CFG_GLPI.planning_begin.split(":");var t=CFG_GLPI.planning_end.split(":");var i=parseInt(n[0])*60+parseInt(n[1]);var a=parseInt(t[0])*60+parseInt(t[1]);var r=a-i;var l=Math.ceil(r/60);$("#planning .fc-time-area.fc-widget-header table tr:nth-child(2) th").addClass("end-of-day");$("#planning .fc-time-area.fc-widget-header table tr:nth-child(3) th:nth-child("+l+"n)").addClass("end-of-day");$("#planning .fc-time-area.fc-widget-content table td:nth-child("+l+"n)").addClass("end-of-day")}},planningFilters:function(){$("#planning_filter a.planning_add_filter").on("click",(function(e){e.preventDefault();var n=$(this).attr("href");$("<div></div>").dialog({modal:true,open:function(){$(this).load(n)},position:{my:"top",at:"center",of:$("#planning_filter")}})}));$("#planning_filter .filter_option").on("click",(function(){$(this).children("ul").toggle()}));$(document).click((function(e){if($(e.target).closest("#planning_filter .filter_option").length===0){$("#planning_filter .filter_option ul").hide()}}));$("#planning_filter .delete_planning").on("click",(function(){var e=$(this);var n=e.closest("ul.filters > li");$.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"delete_filter",filter:e.attr("value"),type:n.attr("event_type")},success:function(){n.remove();GLPIPlanning.refresh()}})}));var e=function(e,n){var t=e.parents("li");var i=null;if(t.parent("ul.group_listofusers").length==1){i=t.parent("ul.group_listofusers").parent("li").attr("event_name")}var a=t.attr("event_name");var r=t.attr("event_type");var l=e.is(":checked");return $.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"toggle_filter",name:a,type:r,parent:i,display:l},success:function(){GLPIPlanning.toggleResource(a,l);if(n){GLPIPlanning.refresh()}}})};$('#planning_filter li:not(li.group_users) input[type="checkbox"]').on("click",(function(){e($(this),true)}));$('#planning_filter li.group_users > span > input[type="checkbox"]').on("change",(function(){var n=$(this);var t=n.parents("li");var i=n.prop("checked");var a=t.attr("event_name");var r=n.parents("li.group_users").find('ul.group_listofusers input[type="checkbox"]');r.prop("checked",i);var l=[];r.each((function(){l.push(e($(this),false))}));GLPIPlanning.toggleResource(a,i);$.when.apply($,l).then((function(){GLPIPlanning.refresh()}))}));$("#planning_filter .color_input input").on("change",(function(){var e=$(this).parents("li");var n=null;if(e.length>=1){n=e.eq(1).attr("event_name");e=e.eq(0)}$.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"color_filter",name:e.attr("event_name"),type:e.attr("event_type"),parent:n,color:$(this).val()},success:function(){GLPIPlanning.refresh()}})}));$("#planning_filter li.group_users .toggle").on("click",(function(){$(this).parent().toggleClass("expanded")}));$("#planning_filter_toggle > a.toggle").on("click",(function(){$("#planning_filter_content").animate({width:"toggle"},300,"swing",(function(){$("#planning_filter").toggleClass("folded");$("#planning_container").toggleClass("folded")}))}))},editEventTimes:function(e,n){n=n||false;var t=e.event;var i=e.revert;var a=t.extendedProps;var r=null;var l=null;var o=null;var s=null;if("newResource"in e&&e.newResource!==null){var c=e.newResource._resource.extendedProps;o=c.itemtype;s=c.items_id}if("oldResource"in e&&e.oldResource!==null){var d=e.oldResource._resource.extendedProps;r=d.itemtype;l=d.items_id}var u=t.start;var f=t.end;if(typeof f==="undefined"||f===null){f=new Date(u.getTime());if(t.allDay){f.setDate(f.getDate()+1)}else{f.setHours(f.getHours()+2)}}var p=e.oldEvent||{};var g=p.start||u;$.ajax({url:CFG_GLPI.root_doc+"/ajax/planning.php",type:"POST",data:{action:"update_event_times",start:u.toISOString(),end:f.toISOString(),itemtype:a.itemtype,items_id:a.items_id,move_instance:n,old_start:g.toISOString(),new_actor_itemtype:o,new_actor_items_id:s,old_actor_itemtype:r,old_actor_items_id:l},success:function(e){if(!e){i()}GLPIPlanning.refresh()},error:function(){i()}})},initFCDatePicker:function(e){$("#planning_datepicker").flatpickr({defaultDate:e,onChange:function(e){var n=new Date(Date.UTC(e[0].getFullYear(),e[0].getMonth(),e[0].getDate()));GLPIPlanning.calendar.gotoDate(n)}})},getHeight:function(){var e=$(window).height()-272;if($("#debugajax").length>0){e-=$("#debugajax").height()}if(CFG_GLPI.glpilayout=="vsplit"){e=$(".ui-tabs-panel").height()-30}var n=300;if(e<n){e=n}return e}}; |