New event title not displaying after creation

Hi there,

Whenever I insert / create a new event the event name / title is not displayed in the Scheduler. It is only displayed when I manually refresh the page.

Client Side code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
        <title></title>
</head>

<script src="dhtmlxScheduler/codebase/dhtmlxscheduler.js"  type="text/javascript" charset="utf-8"></script>
<script src="dhtmlxScheduler/codebase/ext/dhtmlxscheduler_year_view.js"  type="text/javascript" charset="utf-8"></script>
<script src="dhtmlxScheduler/codebase/ext/dhtmlxscheduler_pdf.js"  type="text/javascript" charset="utf-8"></script>
<script src="dhtmlxScheduler/codebase/ext/dhtmlxscheduler_active_links.js"  type="text/javascript" charset="utf-8"></script>
<script src="dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js"  type="text/javascript" charset="utf-8"></script>
<script src="dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js" type="text/javascript" charset="utf-8"></script>
<script src="dhtmlxScheduler/codebase/ext/dhtmlxscheduler_week_agenda.js" type="text/javascript" charset="utf-8"></script>
<script src="dhtmlxScheduler/codebase/ext/dhtmlxscheduler_units.js" type="text/javascript" charset="utf-8"></script>
<script src="dhtmlxScheduler/codebase/ext/dhtmlxscheduler_key_nav.js" type="text/javascript" charset="utf-8"></script>

<link rel="stylesheet" href="dhtmlxScheduler/codebase/dhtmlxscheduler_glossy.css" type="text/css" media="screen" title="no title" charset="utf-8">
    <link rel="stylesheet" href="dhtmlxScheduler/codebase/ext/dhtmlxscheduler_ext.css" type="text/css" media="screen" title="no title" charset="utf-8">

        <style type="text/css" media="screen">
            html, body{
                margin:0px;
                padding:0px;
                height:100%;
                overflow:hidden;
            }

            .dhx_cal_event.user_site div, .dhx_cal_event_line.user_site{
                background-color:#D6F8CD !important;
                color:#000 !important;
            }

            .dhx_cal_event.user_course div , .dhx_cal_event_line.user_course{
                background-color:#FFD3BD !important;
                color:#000 !important;
            }

            .dhx_cal_event.user_group div , .dhx_cal_event_line.user_group{
                background-color:#FEE7AE !important;
                color:#000 !important;
            }

            .dhx_cal_event.user_user div , .dhx_cal_event_line.user_user{
                background-color:#DCE7EC !important;
                color:#000 !important;
            }
        </style>

        <script type="text/javascript" charset="utf-8">
            function init() {

                scheduler.config.mark_now = true;

                var eventtypes=[
                    {key:"site", label:"Global"},
                    {key:"course", label:"Course"},
                    {key:"group", label:"Group"},
                    {key:"user", label:"Admin User"}
                ];

                var group_select_options = {
                    site: [
                        { key: "0", label: "-" }
                    ],
                    course: [
                        { key: "0", label: "-" }
                    ],
                    group: [
                        { key: "4", label: "Group 1" },
                        { key: "5", label: "Group 2" }
                    ],
                    user: [
                        { key: "0", label: "-" }
                    ]
                };

                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);
                    }
                };

                var eventtype_onchange = function(event) {
                    var new_group_options = group_select_options[this.value];
                    update_select_options(scheduler.formSection('group').control, new_group_options);
                };

                scheduler.locale.labels.unit_tab = "Unit"
                scheduler.locale.labels.section_eventtype = "Type of event";
                scheduler.locale.labels.section_group = "Group";
                scheduler.config.details_on_create=true;
                scheduler.config.details_on_dblclick=true;
                scheduler.config.xml_date="%Y-%m-%d %H:%i";
                scheduler.config.time_step = 15;
                scheduler.config.multi_day = true;

                scheduler.templates.week_agenda_event_text = function(start_date, end_date, event, date, position) {
                    switch(position){
                        case "middle":
                            return "-- " + event.text;
                        case "end":
                            return "End: "+scheduler.templates.event_date(start_date) + " " + event.text;
                        case "start":
                            return "Start: "+scheduler.templates.event_date(start_date) + " " + event.text;
                        default:
                            return scheduler.templates.event_date(start_date) + " " + event.text;
                    }
                };

                scheduler.attachEvent("onBeforeLightbox", function(id){
                    var ev = scheduler.getEvent(id);
                    if (!ev.groupid) {
                        var eventtype = ev.eventtype||eventtypes[0].key;
                        var new_group_options = group_select_options[eventtype];
                        update_select_options(scheduler.formSection('group').control, new_group_options);
                    }
                    return true;
                });
        
                scheduler.config.lightbox.sections=[
                    {name:"name", height:30, type:"textarea", map_to:"name", focus:true },
                    {name:"description", height:30, map_to:"description", type:"textarea"},
                    {name:"eventtype", height:23, type:"select", options:eventtypes, map_to:"eventtype", onchange:eventtype_onchange },
                    {name:"group", height:23, type:"select", options: group_select_options, map_to:"groupid" },
                    {name:"time", height:72, type:"time", map_to:"auto"}
                ]

                scheduler.templates.event_class=function(start,end,event){
                    return "user_"+event.eventtype;
                }

                scheduler.createUnitsView({
                    name:"unit",
                    property:"eventtype",
                    list:eventtypes
                });

                scheduler.config.first_hour=8;
                scheduler.config.last_hour=18;

                scheduler.locale.labels.section_name="Name";
                scheduler.config.details_on_create=true;
                scheduler.config.details_on_dblclick=true;

                scheduler.init('scheduler_here',new Date(2012,11,1),"month");
                scheduler.setLoadMode("month")
                scheduler.load("dhtmlxScheduler/samples/01_initialization_loading/data/events.php?att_id=100");

                var dp = new dataProcessor("dhtmlxScheduler/samples/01_initialization_loading/data/events.php?att_id=100&userid=2&courseid=2");
                dp.init(scheduler);
        
                scheduler.attachEvent("onAfterUpdate", function(sid, action, tid, tag){
                    scheduler.updateEvent(tid);
                    scheduler.update_view(tid);
                    return true;
                });
        
            }

            function show_minical(){
                if (scheduler.isCalendarVisible())
                    scheduler.destroyCalendar();
                else
                    scheduler.renderCalendar({
                        position:"dhx_minical_icon",
                        date:scheduler._date,
                        navigation:true,
                        handler:function(date,calendar){
                            scheduler.setCurrentView(date);
                            scheduler.destroyCalendar()
                        }
                });
            }
        </script>

        <body onload="init();">

            <div id="scheduler_here" class="dhx_cal_container" style='width:735px; height:100%;'>
                <div class="dhx_cal_navline">
                    <input type="button" name="print" value="PDF" onclick="scheduler.toPDF('scheduler-pdf-php/generate.php')">

                        <div class="dhx_cal_prev_button">&nbsp;</div>
                        <div class="dhx_cal_next_button">&nbsp;</div>
                        <div class="dhx_cal_today_button"></div>
                        <div class="dhx_cal_date"></div>

                        <div class="dhx_minical_icon" id="dhx_minical_icon" onclick="show_minical()">&nbsp;</div>
                        <div class="dhx_cal_tab" name="unit_tab" style="right:250px;"></div>
                        <div class="dhx_cal_tab" name="week_agenda_tab" style="right:200px;"></div>
                        <div class="dhx_cal_tab" name="year_tab" style="right:150px;"></div>
                        <div class="dhx_cal_tab" name="day_tab" style="right:100px;"></div>
                        <div class="dhx_cal_tab" name="week_tab" style="right:50px;"></div>
                        <div class="dhx_cal_tab" name="month_tab" style="right:0px;"></div>

                </div>
                <div class="dhx_cal_header">
                </div>
                <div class="dhx_cal_data">
                </div>
            </div>
        </body>

Server Side code:

<?php

include ('../../../codebase/connector/scheduler_connector.php');
include ('../../common/config.php');

require_once('../../../../../../../config.php');

$att_id = required_param('att_id', PARAM_INT);

$scheduler = new stdClass();
$scheduler->att_id = $att_id;

$res = mysql_connect($CFG->dbhost, $CFG->dbuser, $CFG->dbpass);
mysql_select_db($CFG->dbname);

function after_processing($action) {

    global $scheduler;

    $status = $action->get_status();
    $session_start = $action->get_value("start_time");
    $courseid = $action->get_value("courseid");
    $userid = $action->get_value("userid");

    $new_event_id = $action->get_new_id();

    $updated_event_id = $action->get_id();

    $start = strtotime($session_start);

    $session_end = $action->get_value("end_time");
    $eventtype = $action->get_value("eventtype");

    $end = strtotime($session_end);

    $duration = $end - $start;

    if ($status == "inserted") {
        if ($eventtype == "group") {
            $scheduler->sql->query("UPDATE event SET timestart='" . $start . "' , timeduration='" . $duration . "' , courseid='0', userid='0' WHERE id='" . $new_event_id . "'");
        } else {
            if ($eventtype == "course") {
                $scheduler->sql->query("UPDATE event SET timestart='" . $start . "' , timeduration='" . $duration . "' , userid='0' , courseid='" . $courseid . "' , groupid='0' WHERE id='" . $new_event_id . "'");
            } else {
                if ($eventtype == "site") {
                    $scheduler->sql->query("UPDATE event SET timestart='" . $start . "' , timeduration='" . $duration . "' , userid='0' , courseid='0' , groupid='0' WHERE id='" . $new_event_id . "'");
                } else {
                    if ($eventtype == "user") {
                        $scheduler->sql->query("UPDATE event SET timestart='" . $start . "' , timeduration='" . $duration . "' , courseid='0' , userid='" . $userid . "' , groupid='0' WHERE id='" . $new_event_id . "'");
                    } else {
                        // eventtype not recognised
                    }
                }
            }
        }
        $action->success();
    } else {

        if ($status == "updated") {
            if ($eventtype == "group") {
                $scheduler->sql->query("UPDATE event SET timestart='" . $start . "' , timeduration='" . $duration . "' , courseid='0', userid='0' WHERE id='" . $updated_event_id . "'");
            } else {
                if ($eventtype == "course") {
                    $scheduler->sql->query("UPDATE event SET timestart='" . $start . "' , timeduration='" . $duration . "' , userid='0' , courseid='" . $courseid . "' , groupid='0' WHERE id='" . $updated_event_id . "'");
                } else {
                    if ($eventtype == "site") {
                        $scheduler->sql->query("UPDATE event SET timestart='" . $start . "' , timeduration='" . $duration . "' , userid='0' , courseid='0', groupid='0' WHERE id='" . $new_event_id . "'");
                    } else {
                        if ($eventtype == "user") {
                            $scheduler->sql->query("UPDATE event SET timestart='" . $start . "' , timeduration='" . $duration . "' , courseid='0' , userid='" . $userid . "' , groupid='0' WHERE id='" . $new_event_id . "'");
                        } else {
                            // eventtype not recognised
                        }
                    }
                }
            }
        } else {
            
        }
    }

    $action->success();
}

function custom_fields($action) {
    $action->add_field("userid", $_GET['userid']);
    $action->add_field("courseid", $_GET['courseid']);
    $action->success();
}

$scheduler = new schedulerConnector($res);
$scheduler->enable_log("log.txt", true);
$scheduler->event->attach("beforeInsert", 'custom_fields');
$scheduler->event->attach("beforeUpdate", 'custom_fields');
$scheduler->event->attach("afterProcessing", "after_processing");
$scheduler->render_table("event", "id", "start_time, end_time, name, description, eventtype, groupid");
?>

Everything updates fine in the db and when I refresh the page everything is displayed perfectly (but only if I refresh the page).

Any idea what I’m doing wrong?

Much appreciated.

Change first line of config as

{name:“name”, height:30, type:“textarea”, map_to:“text”, focus:true },

map_to:“text” instead of map_to:“name”

It doesn’t matter as field named in DB, first 3 fields will available on client side as start_date, end_date and text.

Hi Stanislav, that works brilliantly!

Thanks for your help,
Barry