Hello,
I Cannot save/load scheduler data since last modifications. Probably a mapping probelm
PLease can somewone help me !
my init function
function init(){
//window.resizeTo(950,700)
//modSchedHeight();
//===============
// CONFIG
//===============
scheduler.locale.labels.timeline_tab = "Jour";
scheduler.locale.labels.workweek_tab = "Semaine";
scheduler.config.click_create = false;
scheduler.config.dblclick_create = false;
scheduler.config.xml_date="%Y-%m-%d %H:%i";
scheduler.xy.editor_width = 0; //disable editor's auto-size
var is_admin = <?php echo json_encode(is_admin()) ; ?>;
if (is_admin){
scheduler.config.details_on_create=true;
scheduler.config.details_on_dblclick=true;
scheduler.config.details_on_click=true;
}else{
scheduler.config.details_on_create=false;
scheduler.config.details_on_dblclick=false;
scheduler.config.details_on_click=false;
scheduler.config.readonly_form = true;
}
//scheduler.config.details_on_click=true;
//scheduler.config.quick_info_detached = true;
// scheduler.config.first_hour = 6
// scheduler.config.last_hour = 23
//===============
//Data loading
//===============
var planning = <?php echo json_encode($planning) ; ?>;
var phases = <?php echo json_encode($phases) ; ?>;
var users = <?php echo json_encode($users) ; ?>;
scheduler.serverList("planning",planning);
scheduler.serverList("userslist",users);
scheduler.serverList("phase_id",phases);
//console.log(phases);
//===============
//Configuration
//===============
scheduler.createTimelineView({
section_autoheight: false,
name: "timeline",
x_unit: "minute",
x_date: "%H:%i",
x_step: 30,
x_size: 24,
x_start: 16,
x_length: 48,
y_unit: scheduler.serverList("planning"),
y_property: "section_id",
render: "tree",
folder_dy:20,
dy:60
});
scheduler.createTimelineView({
section_autoheight: false,
name: "workweek",
x_unit: "day",
x_date: "Week #%W",
x_step: 1,
x_size: 12,
x_start: 0,
x_length: 12,
y_unit: scheduler.serverList("planning"),
y_property: "section_id",
render: "tree",
folder_dy:20,
dy:60
/*,
second_scale: { // adding such object to createTimelineView parameters enables second header
x_unit: "day", // size of unit which should be used for second scale
x_date: "%F %d" // would be translated to "July 01" for example
}*/
});
//===============
// VUE WEEK
//===============
scheduler.attachEvent("onTemplatesReady",function(){
//work week
scheduler.date.workweek_start = scheduler.date.week_start;
scheduler.templates.workweek_date = scheduler.templates.week_date;
scheduler.templates.workweek_scale_date = scheduler.templates.week_scale_date;
scheduler.date.add_workweek=function(date,inc){ return scheduler.date.add(date,inc*7,"day"); }
scheduler.date.get_workweek_end=function(date){ return scheduler.date.add(date,5,"day"); }
});
//===============
// FONCTIONS
//===============
function getPhaseLabelById(id){
var res = "";
for (var i = 0; i < phases.length; i++) {
if (phases[i]["id"] == id) {
res = phases[i]["label"];
}
}
return res;
}
function getPhaseIdByLabel(label){
var res = 0;
for (var i = 0; i < phases.length; i++) {
if (phases[i]["label"] ==label) {
res = phases[i]["id"];
}
}
return res;
}
function updateSecondList(){
var newList = getUserListByKey(this.value);
var html='';
for (var i=0; i < newList.length; i++) {
var k= newList[i]["key"];
var v=newList[i]["label"];
html += '<option value="'+k+'">'+v+'</option>';
};
$('div.dhx_cal_ltext select:last').html(html);
return true;
}
function getChildrenByProjectId(key){
var i=0;
var planning = scheduler.serverList("planning");
for (var i = 0; i < planning.length; i++) {
if (planning[i]["key"]==key){
return planning[i]["children"];
}
}
}
function getPlanningByProjectId(key){
var i=0;
var result = new Array();
var planning = scheduler.serverList("planning");
for (var i = 0; i < planning.length; i++) {
if (planning[i]["key"]==key){
result[0] = planning[i];
return result;
}
}
}
function getUserListByKey(key){
var planning = scheduler.serverList("planning");
for(var i=0;i<planning.length;i++){
if (planning[i]["key"]==key){
return planning[i]["children"];
}
}
}
function is_mantis_event(event){
// var res = false;
// if (event.start_field_id){
// res = event.start_field_id > 0 ;
// }
// if (event.end_field_id){
// res = res || event.end_field_id > 0 ;
// }
// return res;
return (event != null) && ((event.start_field_id != null && event.start_field_id > 0) || (event.end_field_id != null && event.end_field_id > 0));
// return (event.start_field_id > 0 || event.end_field_id > 0);
}
//===============
// INIT
//===============
scheduler.init('scheduler_here',new Date(),"timeline");
scheduler.load("events.php");
var dp = new dataProcessor("events.php");
dp.init(scheduler);
//===============
// EVENTS
//===============
scheduler.attachEvent("onEventSave",function(id,data,is_new_event){
console.log(id);
console.log(data);
return true;
})
// scheduler.attachEvent("onBeforeEventDelete", function(event_id,event_object){
// if (is_mantis_event(event_object)){
// return false;
// }
// });
// function displayUsersSections(ev){
// if (ev.projet_id != null){
// var newList = getUserListByKey(ev.projet_id);
// var html=’’;
// for (var i=0; i < newList.length; i++) {
// var k= newList[i][“key”];
// var v=newList[i][“label”];
// if (ev.key == k){
// html += ‘’+v+’’;
// }else{
// html += ‘’+v+’’;
// }
// };
// $('div.dhx_cal_ltext select:last').html(html);
// //scheduler.updateCollection("firstUsers", newList);
// }
// }
function hideSection(sectionIndex){
var section = document.getElementById(scheduler.config.lightbox.sections[sectionIndex].id);
//console.log(section);
$(section).parent().hide();
// section.style.display="none";
// section.nextSibling.style.display="none";
// section.style.display="block";
// section.nextSibling.style.display="block";
scheduler.setLightboxSize();
};
scheduler.attachEvent("onBeforeDrag", function (event_id, mode, native_event_object){
//allow edit operations only for admin
if (!is_admin){ return false;}
var ev = scheduler.getEvent(event_id);
if (is_mantis_event(ev)){
return false;
}
return true;
});
//allow edit operations only for admin
if (!is_admin){
//scheduler.attachEvent("onBeforeDrag",function(){return false;});
scheduler.attachEvent("onClick",function(){return false;});
scheduler.attachEvent("onDblClick",function(){return false;});
}
var parent_onchange = function(event) {
var new_child_options = getChildrenByProjectId(this.value);
update_select_options(scheduler.formSection('userselect').control, new_child_options);
};
var update_select_options = function(select, options) { // helper function
select.options.length = 0;
for (var i=0; i<options.length; i++) {
var option = options[i];
select[i] = new Option(option.label, option.key);
}
};
scheduler.attachEvent("onBeforeLightbox", function(id){
var ev = scheduler.getEvent(id);
//console.log(ev);
if (!ev.child_id) {
var planning = scheduler.serverList("planning");
var parent_id = ev.parent_id||planning[0].key;
//console.log(parent_id);
var new_child_options = getChildrenByProjectId(parent_id);
//console.log(new_child_options);
update_select_options(scheduler.formSection('userselect').control, new_child_options);
}
return true;
});
// scheduler.attachEvent("onLightbox", function (event_id){
// var ev = scheduler.getEvent(event_id);
// displayUsersSections(ev);
// if (is_mantis_event(ev)){
// hideSection(1);//phases
// hideSection(2);//projets
// hideSection(3);//users
// }
// return true;
// });
// scheduler.attachEvent(“onAfterLightbox”, function (){
// // scheduler.resetLightbox();
// // showSection(1);//phases
// // showSection(2);//projets
// // showSection(3);//users
// });
scheduler.templates.event_class=function(start, end, event){
//console.log(event);
var res = phases[0]["label"];
if (event.phase_id != null){
res = getPhaseLabelById(event.phase_id);
}
return res;
}
//===============
// LIGHTBOX
//===============
scheduler.locale.labels.section_userselect = "Users";
scheduler.locale.labels.section_projetselect = "Projets";
scheduler.locale.labels.section_description = "Description";
scheduler.locale.labels.section_details = "Details";
scheduler.locale.labels.section_phases = "Phase";
scheduler.config.lightbox.sections=[
{name:"description", height:100, map_to:"text", type:"textarea" , focus:true},
//{name:"details", height:20, type:"textarea", map_to:"details", focus:true },
{name:"phases", height:23, type:"select", options:scheduler.serverList("phase_id"), map_to:"phase_id" },
// {name:"projetselect", height:23, type:"select", options: scheduler.serverList("planning") , map_to:"projet_id" ,onchange:updateSecondList},
{name:"projetselect", height:23, type:"select", options: scheduler.serverList("planning") , map_to:"projet_id" ,onchange:parent_onchange},
{name:"userselect", height:23, type:"select", options:scheduler.serverList("userslist") , map_to:"section_id"},
{name:"time", height:72, type:"time", map_to:"auto"}
];
$('#selectedProject').on('change',function(){
var index = this.value;
// console.log(index);
// console.log(scheduler.serverList("planning"));
if (index != "all"){
var newPlanning = getPlanningByProjectId(index);
//var newUsers = getUsersForProject(index);
}
else {
//all users and all planning
newPlanning = scheduler.serverList("planning");
newUsers = users;
}
scheduler.updateCollection("planning", newPlanning);
//scheduler.updateCollection("key", newUsers);
scheduler.updateCollection("y_unit", newPlanning);
// scheduler.clearAll();
// scheduler.setCurrentView();
});
my event.php file content
$scheduler = new SchedulerConnector($res, $dbtype);
$scheduler->enable_log(“log.txt”,true);
$cross = new CrossOptionsConnector($res, $dbtype);
$cross->dynamic_loading(true);
$cross->options->render_table("phase","id","id(value),label(label), color, background-color");
$scheduler->set_options("phase_id", $cross->options);
$list = new OptionsConnector($res, $dbtype);
$list->dynamic_loading(true);
$list->render_array($users, "key", "key, user_id,projet_id,label");
$scheduler->set_options("userlist", $list);
if (is_admin()!=1){
$scheduler->access->deny("insert");
$scheduler->access->deny("update");
$scheduler->access->deny("delete");
}
function is_mantis_bug_deleted($data){
//interdiction de supprimer les events mantis depuis le planning
LogMaster::log("suppression event debut");
LogMaster::log($data);
LogMaster::log($data->get_value('event_id'));
LogMaster::log($data->get_value('start_field_id'));
LogMaster::log($data->get_value('end_field_id'));
LogMaster::log("suppression event fin");
if ($data->get_value('start_field_id') > 0 || $data->get_value('end_field_id') > 0){
$scheduler->access->deny("delete");
}
}
function is_mantis_bug_updated($data){
LogMaster::log("is_mantis_bug_updated");
LogMaster::log($data->get_value('event_id'));
// LogMaster::log($data->get_value('event_name'));
// LogMaster::log($data->get_value('bug_id'));
// LogMaster::log($data->get_value('bug_text_id'));
// LogMaster::log($data->get_value('start_field_id'));
// LogMaster::log($data->get_value('end_field_id'));
if ($data->get_value('start_field_id') > 0 || $data->get_value('end_field_id') > 0){
$description = $data->get_value('event_name');
$bug_id = $data->get_value('bug_id');
$field_id_start = $data->get_value('start_field_id');
$field_id_end = $data->get_value('end_field_id');
$start_date = $data->get_value('start_date');
$end_date = $data->get_value('end_date');
$value_start = strtotime($data->get_value('start_date'));
$value_end = strtotime($data->get_value('end_date'));
$bug_text_id = $data->get_value('bug_text_id');
$step = $data->get_value('step');
if (strcmp($step,"to_deliver") == 0) {
LogMaster::log("duree modifie");
$value_start = $value_end - $value_start;
$value_start = $value_start/3600;
}
$query_start = "UPDATE mantis_custom_field_string_table SET value='$value_start' WHERE field_id=$field_id_start AND bug_id=$bug_id";
$query_end = "UPDATE mantis_custom_field_string_table SET value='$value_end' WHERE field_id=$field_id_end AND bug_id=$bug_id";
$query_text = "UPDATE mantis_bug_text_table SET description='$description' WHERE id=$bug_text_id";
mysql_query($query_start);
mysql_query($query_end);
mysql_query($query_text);
// $bug = array(
// 'bug_id' => $data->get_value('bug_id'),
// 'start_field_id' => $data->get_value('start_field_id'),
// 'end_field_id' => $data->get_value('end_field_id'),
// 'start_date' => $data->get_value('start_date'),
// 'end_date' => $data->get_value('end_date'),
// );
// $status = update_mantis_bug($bug);
return false;
}
}
$scheduler->event->attach("beforeUpdate","is_mantis_bug_updated");
$scheduler->event->attach("beforeDelete","is_mantis_bug_deleted");
//$scheduler->sql->attach("Update","Update mantis_custom_field_string_table set value='{value}' where field_id={field_id} AND bug_id={bug_id}");
$scheduler->render_table("events_ms","event_id","start_date,end_date,event_name,projet_id,user_id,section_id,phase_id,bug_id,bug_text_id,step,start_field_id,end_field_id");