DHTMLX Docs & Samples Explorer

Useful solutions for dhtmlxScheduler

Get next event

    var evs = scheduler.getEvents(new Date(), new Date(9999,1,1);	
    //evs - list of all oncoming events
    evs.sort(function(a,b){ return (a.start_date > b.start_date ? 1 : -1); });
    //evs[0] - nearest oncoming event

Recurring events - drag all sequence

Add the next code before scheduler initialization

	var old = scheduler._on_mouse_up;
	scheduler._on_mouse_up = function(){
		if (this._drag_id){
			var parts = this._drag_id.toString().split("#");
			if (parts.length > 1) {
				var dev = this.getEvent(this._drag_id);
				this._drag_id= parts[0];	
				var ev = this.getEvent(parts[0]);
				ev._end_date = ev.end_date;
				ev.start_date = dev.start_date;
				ev.end_date = dev.end_date;
			}
		}
		return old.apply(this,arguments);
	}

Multiple users

Relates samples : samples/shared_events

While there is no such concept as different calendars, you can use multiple data feeds in the same scheduler to mimic such behavior.

   //load two data feeds
   scheduler.load("events_shared.php?user=1");
   scheduler.load("events_shared.php?user=2");
   scheduler.config.readonly = true;

and on server side

$scheduler->render_sql("select * from events_shared where event_type=1 AND userId = ".$user_id,"event_id","start_date,end_date,text,event_type,userId");

With such approach it possible to load and show data from multiple sources. userId in above code used just for sample purpose - it may be any different set of rules in your case.

The same code can be used in more complex scenario - see all, edit only own events

 
   //enable saving for first data feed
   var dp = new dataProcessor("events.php?user=1");
   dp.init(scheduler);
 
   //allow edit operations only for own events
   function allow_own(id){
	var ev = this.getEvent(id);
	return ev.userId == 1;
   }
   scheduler.attachEvent("onClick",allow_own);
   scheduler.attachEvent("onDblClick",allow_own);
 
   //default properties of new event
   scheduler.attachEvent("onEventCreated",function(id){
      var ev = this.getEvent(id);
	  ev.userId = 1; //just for rendering on client, will not affect server data
   });