function delete_palm_events($login)
{
    $res = dbi_query("SELECT cal_id FROM webcal_import_data " . "WHERE cal_login = '******'");
    if ($res) {
        while ($row = dbi_fetch_row($res)) {
            dbi_query("DELETE FROM webcal_entry_user WHERE cal_id = {$row['0']}");
            dbi_query("DELETE FROM webcal_entry_repeats WHERE cal_id = {$row['0']}");
            dbi_query("DELETE FROM webcal_entry_repeats_not WHERE cal_id = {$row['0']}");
            dbi_query("DELETE FROM webcal_entry_log WHERE cal_entry_id = {$row['0']}");
            dbi_query("DELETE FROM webcal_site_extras WHERE cal_id = {$row['0']}");
            dbi_query("DELETE FROM webcal_reminder_log WHERE cal_id = {$row['0']}");
            dbi_query("DELETE FROM webcal_import_data WHERE cal_id = {$row['0']}");
            dbi_query("DELETE FROM webcal_entry WHERE cal_id = {$row['0']}");
        }
    }
    dbi_free_result($res);
    return 1;
}
示例#2
0
文件: register.php 项目: rhertzog/lcs
function check_email($uemail)
{
    global $control, $error;
    if (!strlen($uemail)) {
        $error = translate('Email address cannot be blank.');
        return false;
    }
    $res = dbi_execute('SELECT cal_email FROM webcal_user WHERE cal_email = ?', array($uemail));
    if ($res) {
        $row = dbi_fetch_row($res);
        if ($row[0] == $uemail) {
            $control = '';
            $error = translate('Email address already exists.');
            return false;
        }
    }
    return true;
}
function db_load_config()
{
    global $webcalConfig;
    while (list($key, $val) = each($webcalConfig)) {
        $res = dbi_execute('SELECT cal_value FROM webcal_config
      WHERE cal_setting = ?', array($key), false, false);
        $sql = 'INSERT INTO webcal_config ( cal_setting, cal_value ) VALUES (?,?)';
        if (!$res) {
            dbi_execute($sql, array($key, $val));
        } else {
            // SQLite returns $res always.
            $row = dbi_fetch_row($res);
            if (!isset($row[0])) {
                dbi_execute($sql, array($key, $val));
            }
            dbi_free_result($res);
        }
    }
}
示例#4
0
function delete_palm_events($login)
{
    $res = dbi_execute('SELECT cal_id FROM webcal_import_data
    WHERE cal_login = ? AND cal_import_type = ?', array($login, 'palm'));
    if ($res) {
        while ($row = dbi_fetch_row($res)) {
            dbi_execute('DELETE FROM webcal_blob WHERE cal_id = ?', array($row[0]));
            dbi_execute('DELETE FROM webcal_entry_log WHERE cal_entry_id = ?', array($row[0]));
            dbi_execute('DELETE FROM webcal_entry_repeats WHERE cal_id = ?', array($row[0]));
            dbi_execute('DELETE FROM webcal_entry_repeats_not WHERE cal_id = ?', array($row[0]));
            dbi_execute('DELETE FROM webcal_import_data WHERE cal_id = ?', array($row[0]));
            dbi_execute('DELETE FROM webcal_reminders WHERE cal_id = ?', array($row[0]));
            dbi_execute('DELETE FROM webcal_site_extras WHERE cal_id = ?', array($row[0]));
            dbi_execute('DELETE FROM webcal_entry_user WHERE cal_id = ?', array($row[0]));
            dbi_execute('DELETE FROM webcal_entry WHERE cal_id = ?', array($row[0]));
        }
    }
    dbi_free_result($res);
    return 1;
}
示例#5
0
function save_layer($layer_user, $layeruser, $layercolor, $dups, $id)
{
    global $error, $layers;
    if ($layer_user == $layeruser) {
        $error = translate('You cannot create a layer for yourself.');
    }
    load_user_layers($layer_user, 1);
    if (!empty($layeruser) && $error == '') {
        // Existing layer entry.
        if (!empty($layers[$id]['cal_layeruser'])) {
            // Update existing layer entry for this user.
            $layerid = $layers[$id]['cal_layerid'];
            dbi_execute('UPDATE webcal_user_layers SET cal_layeruser = ?,
        cal_color = ?, cal_dups = ? WHERE cal_layerid = ?', array($layeruser, $layercolor, $dups, $layerid));
        } else {
            // New layer entry.
            // Check for existing layer for user. Can only have one layer per user.
            $res = dbi_execute('SELECT COUNT( cal_layerid ) FROM webcal_user_layers
        WHERE cal_login = ? AND cal_layeruser = ?', array($layer_user, $layeruser));
            if ($res) {
                $row = dbi_fetch_row($res);
                if ($row[0] > 0) {
                    $error = translate('You can only create one layer for each user.');
                }
                dbi_free_result($res);
            }
            if ($error == '') {
                $res = dbi_execute('SELECT MAX( cal_layerid ) FROM webcal_user_layers');
                if ($res) {
                    $row = dbi_fetch_row($res);
                    $layerid = $row[0] + 1;
                } else {
                    $layerid = 1;
                }
                dbi_execute('INSERT INTO webcal_user_layers ( cal_layerid, cal_login,
          cal_layeruser, cal_color, cal_dups ) VALUES ( ?, ?, ?, ?, ? )', array($layerid, $layer_user, $layeruser, $layercolor, $dups));
            }
        }
    }
}
function doDbSanityCheck()
{
    global $db_database, $db_host, $db_login;
    $dieMsgStr = 'Error finding WebCalendar tables in database "' . $db_database . '" using db login "' . $db_login . '" on db server "' . $db_host . '".<br /><br />
Have you created the database tables as specified in the
<a href="docs/WebCalendar-SysAdmin.html" ' . '  target="other">WebCalendar System Administrator\'s Guide</a>?';
    $res = @dbi_execute('SELECT COUNT( cal_value ) FROM webcal_config', array(), false, false);
    if ($res) {
        if ($row = dbi_fetch_row($res)) {
            // Found database. All is peachy.
            dbi_free_result($res);
        } else {
            // Error accessing table.
            // User has wrong db name or has not created tables.
            // Note: can't translate this since translate.php is not included yet.
            dbi_free_result($res);
            die_miserable_death($dieMsgStr);
        }
    } else {
        die_miserable_death($dieMsgStr);
    }
}
示例#7
0
function doDbSanityCheck()
{
    global $db_login, $db_host, $db_database;
    $res = @dbi_query("SELECT COUNT(cal_value) FROM webcal_config", false, false);
    if ($res) {
        if ($row = dbi_fetch_row($res)) {
            // Found database.  All is peachy.
            dbi_free_result($res);
        } else {
            // Error accessing table.
            // User has wrong db name or has not created tables.
            // Note: cannot translate this since we have not included
            // translate.php yet.
            dbi_free_result($res);
            die_miserable_death("Error finding WebCalendar tables in database '{$db_database}' " . "using db login '{$db_login}' on db server '{$db_host}'.<br/><br/>\n" . "Have you created the database tables as specified in the " . "<a href=\"docs/WebCalendar-SysAdmin.html\" target=\"other\">WebCalendar " . "System Administrator's Guide</a>?");
        }
    } else {
        // Error accessing table.
        // User has wrong db name or has not created tables.
        // Note: cannot translate this since we have not included translate.php yet.
        die_miserable_death("Error finding WebCalendar tables in database '{$db_database}' " . "using db login '{$db_login}' on db server '{$db_host}'.<br/><br/>\n" . "Have you created the database tables as specified in the " . "<a href=\"docs/WebCalendar-SysAdmin.html\" target=\"other\">WebCalendar " . "System Administrator's Guide</a>?");
    }
}
示例#8
0
文件: purge.php 项目: rhertzog/lcs
function get_ids($sql, $ALL = '')
{
    global $sqlLog;
    $ids = array();
    $sqlLog .= $sql . "<br />\n";
    $res = dbi_execute($sql);
    if ($res) {
        while ($row = dbi_fetch_row($res)) {
            if ($ALL == 1) {
                $ids[] = $row[0];
            } else {
                //ONLY Delete event if no other participants.
                $ID = $row[0];
                $res2 = dbi_execute('SELECT COUNT( * ) FROM webcal_entry_user
          WHERE cal_id = ?', array($ID));
                if ($res2) {
                    if ($row2 = dbi_fetch_row($res2)) {
                        if ($row2[0] == 1) {
                            $ids[] = $ID;
                        }
                    }
                    dbi_free_result($res2);
                }
            }
            // End if ($ALL)
        }
        // End while
    }
    dbi_free_result($res);
    return $ids;
}
示例#9
0
文件: user-nis.php 项目: rhertzog/lcs
/**
 * Get a list of users and return info in an array.
 *
 * @return array Array of user info
 */
function user_get_users($publicOnly = false)
{
    global $PUBLIC_ACCESS, $PUBLIC_ACCESS_FULLNAME, $USER_SORT_ORDER;
    $count = 0;
    $ret = array();
    if ($PUBLIC_ACCESS == 'Y') {
        $ret[$count++] = array('cal_login' => '__public__', 'cal_lastname' => '', 'cal_firstname' => '', 'cal_is_admin' => 'N', 'cal_email' => '', 'cal_password' => '', 'cal_fullname' => $PUBLIC_ACCESS_FULLNAME);
    }
    if ($publicOnly) {
        return $ret;
    }
    0 - ($order1 = empty($USER_SORT_ORDER) ? 'cal_lastname, cal_firstname,' : "{$USER_SORT_ORDER},");
    $res = dbi_execute('SELECT cal_login, cal_lastname, cal_firstname,
    cal_is_admin, cal_email, cal_passwd FROM webcal_user
    ORDER BY $order1 cal_login');
    if ($res) {
        while ($row = dbi_fetch_row($res)) {
            if (strlen($row[1]) && strlen($row[2])) {
                $fullname = $order1 == 'cal_lastname, cal_firstname,' ? "{$row['1']} {$row['2']}" : "{$row['2']} {$row['1']}";
            } else {
                $fullname = $row[0];
            }
            $ret[$count++] = array('cal_login' => $row[0], 'cal_lastname' => $row[1], 'cal_firstname' => $row[2], 'cal_is_admin' => $row[3], 'cal_email' => empty($row[4]) ? '' : $row[4], 'cal_password' => $row[5], 'cal_fullname' => $fullname);
        }
        dbi_free_result($res);
    }
    //no need to call sort_users () as the sql can sort for us
    return $ret;
}
示例#10
0
function user_get_users()
{
    global $public_access, $PUBLIC_ACCESS_FULLNAME;
    $count = 0;
    $ret = array();
    if ($public_access == "Y") {
        $ret[$count++] = array("cal_login" => "__public__", "cal_lastname" => "", "cal_firstname" => "", "cal_is_admin" => "N", "cal_email" => "", "cal_password" => "", "cal_fullname" => $PUBLIC_ACCESS_FULLNAME);
    }
    $res = dbi_query("SELECT cal_login, cal_lastname, cal_firstname, " . "cal_is_admin, cal_email, cal_passwd FROM webcal_user " . "ORDER BY cal_lastname, cal_firstname, cal_login");
    if ($res) {
        while ($row = dbi_fetch_row($res)) {
            if (strlen($row[1]) && strlen($row[2])) {
                $fullname = "{$row['2']} {$row['1']}";
            } else {
                $fullname = $row[0];
            }
            $ret[$count++] = array("cal_login" => $row[0], "cal_lastname" => $row[1], "cal_firstname" => $row[2], "cal_is_admin" => $row[3], "cal_email" => empty($row[4]) ? "" : $row[4], "cal_password" => $row[5], "cal_fullname" => $fullname);
        }
        dbi_free_result($res);
    }
    return $ret;
}
示例#11
0
function process_event($id, $name, $event_date, $event_time)
{
    global $site_extras, $debug, $only_testing;
    global $EXTRA_REMINDER_WITH_OFFSET, $EXTRA_REMINDER_WITH_DATE;
    if ($debug) {
        printf("Event %d: \"%s\" at %s on %s <br />\n", $id, $name, $event_time, $event_date);
    }
    // Check to see if this event has any reminders
    $extras = get_site_extra_fields($id);
    for ($j = 0; $j < count($site_extras); $j++) {
        $extra_name = $site_extras[$j][0];
        $extra_type = $site_extras[$j][2];
        $extra_arg1 = $site_extras[$j][3];
        $extra_arg2 = $site_extras[$j][4];
        //if ( $debug )
        //  printf ( "  name: %s\n  type: %d\n  arg1: %s\n  arg2: %s\n",
        //  $extra_name, $extra_type, $extra_arg1, $extra_arg2 );
        if (!empty($extras[$extra_name]['cal_remind'])) {
            if ($debug) {
                echo "  Reminder set for event. <br />\n";
            }
            // how many minutes before event should we send the reminder?
            $ev_h = (int) ($event_time / 10000);
            $ev_m = $event_time / 100 % 100;
            $ev_year = substr($event_date, 0, 4);
            $ev_month = substr($event_date, 4, 2);
            $ev_day = substr($event_date, 6, 2);
            $event_time = mktime($ev_h, $ev_m, 0, $ev_month, $ev_day, $ev_year);
            if (($extra_arg2 & $EXTRA_REMINDER_WITH_OFFSET) > 0) {
                $minsbefore = $extras[$extra_name]['cal_data'];
                $remind_time = $event_time - $minsbefore * 60;
            } else {
                if (($extra_arg2 & $EXTRA_REMINDER_WITH_DATE) > 0) {
                    $rd = $extras[$extra_name]['cal_date'];
                    $r_year = substr($rd, 0, 4);
                    $r_month = substr($rd, 4, 2);
                    $r_day = substr($rd, 6, 2);
                    $remind_time = mktime(0, 0, 0, $r_month, $r_day, $r_year);
                } else {
                    $minsbefore = $extra_arg1;
                    $remind_time = $event_time - $minsbefore * 60;
                }
            }
            if ($debug) {
                echo "  Mins Before: {$minsbefore} <br />\n";
            }
            if ($debug) {
                echo "  Event time is: " . date("m/d/Y H:i", $event_time) . "<br />\n";
                echo "  Remind time is: " . date("m/d/Y H:i", $remind_time) . "<br />\n";
            }
            if (time() >= $remind_time) {
                // It's remind time or later. See if one has already been sent
                $last_sent = 0;
                $res = dbi_query("SELECT MAX(cal_last_sent) FROM " . "webcal_reminder_log WHERE cal_id = " . $id . " AND cal_event_date = {$event_date}" . " AND cal_name = '" . $extra_name . "'");
                if ($res) {
                    if ($row = dbi_fetch_row($res)) {
                        $last_sent = $row[0];
                    }
                    dbi_free_result($res);
                }
                if ($debug) {
                    echo "  Last sent on: " . date("m/d/Y H:i", $last_sent) . "<br />\n";
                }
                if ($last_sent < $remind_time) {
                    // Send a reminder
                    if ($debug) {
                        echo "  SENDING REMINDER! <br />\n";
                    }
                    send_reminder($id, $event_date);
                    // now update the db...
                    log_reminder($id, $extra_name, $event_date);
                }
            }
        }
    }
}
function get_users_event_ids($user)
{
    $events = array();
    $res = dbi_execute('SELECT we.cal_id FROM webcal_entry we, webcal_entry_user weu
    WHERE we.cal_id = weu.cal_id AND weu.cal_login = ?', array($user));
    if ($res) {
        while ($row = dbi_fetch_row($res)) {
            $events[] = $row[0];
        }
    }
    return $events;
}
示例#13
0
文件: access.php 项目: rhertzog/lcs
function access_load_user_functions($user)
{
    global $is_admin;
    static $permissions;
    if (!empty($permissions[$user])) {
        return $permissions[$user];
    }
    $ret = '';
    $rets = array();
    $users = array($user, '__default__');
    for ($i = 0, $cnt = count($users); $i < $cnt && empty($ret); $i++) {
        $res = dbi_execute('SELECT cal_permissions FROM webcal_access_function
      WHERE cal_login = ?', array($users[$i]));
        assert('$res');
        if ($row = dbi_fetch_row($res)) {
            $rets[$users[$i]] = $row[0];
        }
        dbi_free_result($res);
    }
    // If still no setting found, then assume access to everything
    // if an admin user, otherwise access to all non-admin functions.
    if (!empty($rets[$user])) {
        $ret = $rets[$user];
    } else {
        if (!empty($rets['__default__'])) {
            $ret = $rets['__default__'];
        } else {
            for ($i = 0; $i < ACCESS_NUMBER_FUNCTIONS; $i++) {
                $ret .= get_default_function_access($i, $user);
            }
        }
    }
    // do_debug ( $user . " " . $ret);
    $permissions[$user] = $ret;
    return $ret;
}
 $user = $nid;
 // Get event ids for all events this user is a participant
 $events = array();
 $res = dbi_query("SELECT webcal_entry.cal_id " . "FROM webcal_entry, webcal_entry_user " . "WHERE webcal_entry.cal_id = webcal_entry_user.cal_id " . "AND webcal_entry_user.cal_login = '******'");
 if ($res) {
     while ($row = dbi_fetch_row($res)) {
         $events[] = $row[0];
     }
 }
 // Now count number of participants in each event...
 // If just 1, then save id to be deleted
 $delete_em = array();
 for ($i = 0; $i < count($events); $i++) {
     $res = dbi_query("SELECT COUNT(*) FROM webcal_entry_user " . "WHERE cal_id = " . $events[$i]);
     if ($res) {
         if ($row = dbi_fetch_row($res)) {
             if ($row[0] == 1) {
                 $delete_em[] = $events[$i];
             }
         }
         dbi_free_result($res);
     }
 }
 // Now delete events that were just for this user
 for ($i = 0; $i < count($delete_em); $i++) {
     dbi_query("DELETE FROM webcal_entry WHERE cal_id = " . $delete_em[$i]);
 }
 // Delete user participation from events
 dbi_query("DELETE FROM webcal_entry_user WHERE cal_login = '******'");
 // Delete any layers other users may have that point to this user.
 dbi_query("DELETE FROM webcal_user_layers WHERE cal_layeruser = '******'");
function export_pilot_csv($id)
{
    /* to be imported to a Palm with:
     *    pilot-datebook -r csv -f webcalendar-export.txt -w hotsync
     */
    $res = export_get_event_entry($id);
    echo "uid,attributes,category,untimed,beginDate,beginTime,endDate,endTime,description,note,alarm,advance,advanceUnit,repeatType,repeatForever,repeatEnd,repeatFrequency,repeatDay,repeatWeekdays,repeatWeekstart\n";
    while ($row = dbi_fetch_row($res)) {
        // uid (long)
        echo $row[0], ',';
        // attributes (int)
        //  128 = 0x80 : Deleted
        //   64 = 0x40 : Dirty
        //   32 = 0x20 : Busy
        //   16 = 0x10 : Secret/Private
        echo $row[7] == 'R' ? '16,' : '0,';
        // category (int: 0=Unfiled)
        echo '0,';
        // untimed (int: 0=Appointment, 1=Untimed)
        // note: Palm "Untimed" is WebCalendar "AllDay"
        if ($row[4] < 0) {
            echo '1,', substr($row[3], 0, 4), '-', substr($row[3], 4, 2), '-', substr($row[3], 6, 2), ',00:00:00,', substr($row[3], 0, 4), '-', substr($row[3], 4, 2), '-', substr($row[3], 6, 2), ',00:00:00,';
        } else {
            echo '0,', pilot_date_time($row[3], $row[4], 0, ','), ',', pilot_date_time($row[3], $row[4], $row[8], ','), ',';
            //endDate,endTime
        }
        //end if ( $row[4] < 0 )
        // description (str)
        echo '"', preg_replace("/\r?\n/", "\\n", $row[1]), '",';
        // note (str)
        echo '"', preg_replace("/\r?\n/", "\\n", $row[9]), '",';
        // alarm, advance, advanceUnit
        // alarm (int: 0=no alarm, 1=alarm)
        // FIXME: verify if WebCal. DB interpreted correctly
        // advance (int), advanceUnit (int: 0=minutes, 1=hours, 2=days)
        // FIXME: better adjust unit
        $ext = get_cal_ent_extras($row[0], 'webcal_site_extras', "cal_name = 'Reminder' AND cal_remind = 1");
        if ($ext) {
            echo '1,', $ext[5], ',0,';
        } else {
            echo '0,0,0,';
        }
        // repeat:
        // repeatType (int: 0=none, 1=daily, 2=weekly, 3=monthly, 4=monthly/weekday,
        // repeatForever (int: 0=not forever, 1=forever)                   5=yearly)
        // repeatEnd (time)
        // repeatFrequency (int)
        // repeatDay (int: day# or 0..6=Sun..Sat 1st, 7..13 2nd, 14..20 3rd,
        //          21..27 4th,  28-34 last week)
        // repeatWeekdays (int: add - 1=Sun,2=Mon,4=Tue,8=Wed,16=Thu,32=Fri,64=Sat)
        // repeatWeekstart (int)
        $ext = get_cal_ent_extras($row[0], 'webcal_entry_repeats');
        if ($ext) {
            switch ($ext[1]) {
                case 'daily':
                    $repType = 1;
                    break;
                case 'weekly':
                    $repType = 2;
                    break;
                case 'monthlyByDate':
                    $repType = 3;
                    break;
                case 'monthlyByDay':
                    $repType = 4;
                    break;
                case 'yearly':
                    $repType = 5;
                    break;
                default:
                    $repType = 0;
            }
        } else {
            $repType = 0;
        }
        if ($repType) {
            echo $repType, ',';
            // repeatType
            if ($ext[2]) {
                echo '0,', substr($ext[2], 0, 4), '-', substr($ext[2], 4, 2), '-', substr($ext[2], 6, 2), ' 00:00:00,';
            } else {
                echo '1,,';
            }
            // repeatForever,repeatEnd
            echo $ext[3], ',';
            // repeatFrequency
            switch ($repType) {
                case 2:
                    // weekly
                    echo '0,', bindec(strtr(strrev($ext[4]), 'yn', '10')), ",1\n";
                    break;
                case 3:
                    // monthly/weekday
                    // repeatDay (0..6=Sun..Sat 1st, 7..13 2nd, 14..20 3rd,
                    // 21..27 4th,  28-34 last week)
                    echo floor(substr($row[3], 6, 2) / 7) * 7 + date('w', date_to_epoch($row[3])), ",0,0\n";
                    break;
                case 1:
                    // daily
                // daily
                case 4:
                    // monthly
                // monthly
                case 5:
                    // yearly
                    echo "0,0,0\n";
            }
            //end switch
        } else {
            echo "0,0,,0,0,0,0\n";
        }
    }
    //end if ( $repType )
}
示例#16
0
function list_unapproved($user)
{
    global $temp_fullname, $key, $login;
    //echo "Listing events for $user <br>";
    $sql = "SELECT webcal_entry.cal_id, webcal_entry.cal_name, " . "webcal_entry.cal_description, " . "webcal_entry.cal_priority, webcal_entry.cal_date, " . "webcal_entry.cal_time, webcal_entry.cal_duration, " . "webcal_entry_user.cal_status " . "FROM webcal_entry, webcal_entry_user " . "WHERE webcal_entry.cal_id = webcal_entry_user.cal_id " . "AND ( webcal_entry.cal_ext_for_id IS NULL " . "OR webcal_entry.cal_ext_for_id = 0 ) AND " . "webcal_entry_user.cal_login = '******' AND " . "webcal_entry_user.cal_status = 'W' " . "ORDER BY webcal_entry.cal_date";
    $res = dbi_query($sql);
    $count = 0;
    $eventinfo = "";
    if ($res) {
        while ($row = dbi_fetch_row($res)) {
            if ($count == 0) {
                echo "<ul>\n";
            }
            $key++;
            $id = $row[0];
            $name = $row[1];
            $description = $row[2];
            $pri = $row[3];
            $date = $row[4];
            $time = $row[5];
            $duration = $row[6];
            $status = $row[7];
            $divname = "eventinfo-{$id}-{$key}";
            echo "<li><a title=\"" . translate("View this entry") . "\" class=\"entry\" href=\"view_entry.php?id={$id}&amp;user={$user}";
            echo "\" onmouseover=\"window.status='" . translate("View this entry") . "'; show(event, '{$divname}'); return true;\" onmouseout=\"hide('{$divname}'); return true;\">";
            $timestr = "";
            if ($time > 0) {
                $timestr = display_time($time);
                if ($duration > 0) {
                    // calc end time
                    $h = (int) ($time / 10000);
                    $m = $time / 100 % 100;
                    $m += $duration;
                    $d = $duration;
                    while ($m >= 60) {
                        $h++;
                        $m -= 60;
                    }
                    $end_time = sprintf("%02d%02d00", $h, $m);
                    $timestr .= " - " . display_time($end_time);
                }
            }
            echo htmlspecialchars($name);
            echo "</a>";
            echo " (" . date_to_str($date) . ")\n";
            //approve
            echo ": <a title=\"" . translate("Approve/Confirm") . "\"  href=\"approve_entry.php?id={$id}&amp;ret=list&amp;user={$user}";
            if ($user == "__public__") {
                echo "&amp;public=1";
            }
            echo "\" class=\"nav\" onclick=\"return confirm('" . translate("Approve this entry?") . "');\">" . translate("Approve/Confirm") . "</a>, ";
            //reject
            echo "<a title=\"" . translate("Reject") . "\" href=\"reject_entry.php?id={$id}&amp;ret=list&amp;user={$user}";
            if ($user == "__public__") {
                echo "&amp;public=1";
            }
            echo "\" class=\"nav\" onclick=\"return confirm('" . translate("Reject this entry?") . "');\">" . translate("Reject") . "</a>";
            //delete
            echo ", <a title=\"" . translate("Delete") . "\" href=\"del_entry.php?id={$id}&amp;ret=list";
            if ($user != $login) {
                echo "&amp;user={$user}";
            }
            echo "\" class=\"nav\" onclick=\"return confirm('" . translate("Are you sure you want to delete this entry?") . "');\">" . translate("Delete") . "</a>";
            echo "\n</li>\n";
            $eventinfo .= build_event_popup($divname, $user, $description, $timestr, site_extras_for_popup($id));
            $count++;
        }
        dbi_free_result($res);
        if ($count > 0) {
            echo "</ul>\n";
        }
    }
    if ($count == 0) {
        user_load_variables($user, "temp_");
        echo "<span class=\"nounapproved\">" . translate("No unapproved events for") . "&nbsp;" . $temp_fullname . ".</span>\n";
    } else {
        if (!empty($eventinfo)) {
            echo $eventinfo;
        }
    }
}
function list_unapproved($user)
{
    global $temp_fullname, $key, $login;
    //echo "Listing events for $user <BR>";
    echo "<UL>\n";
    $sql = "SELECT webcal_entry.cal_id, webcal_entry.cal_name, " . "webcal_entry.cal_description, " . "webcal_entry.cal_priority, webcal_entry.cal_date, " . "webcal_entry.cal_time, webcal_entry.cal_duration, " . "webcal_entry_user.cal_status " . "FROM webcal_entry, webcal_entry_user " . "WHERE webcal_entry.cal_id = webcal_entry_user.cal_id " . "AND ( webcal_entry.cal_ext_for_id IS NULL " . "OR webcal_entry.cal_ext_for_id = 0 ) AND " . "webcal_entry_user.cal_login = '******' AND " . "webcal_entry_user.cal_status = 'W' " . "ORDER BY webcal_entry.cal_date";
    $res = dbi_query($sql);
    $count = 0;
    $eventinfo = "";
    if ($res) {
        while ($row = dbi_fetch_row($res)) {
            $key++;
            $id = $row[0];
            $name = $row[1];
            $description = $row[2];
            $pri = $row[3];
            $date = $row[4];
            $time = $row[5];
            $duration = $row[6];
            $status = $row[7];
            $divname = "eventinfo-{$id}-{$key}";
            echo "<LI><A CLASS=\"entry\" HREF=\"view_entry.php?id={$id}";
            echo "\" onMouseOver=\"window.status='" . translate("View this entry") . "'; show(event, '{$divname}'); return true;\" onMouseOut=\"hide('{$divname}'); return true;\">";
            $timestr = "";
            if ($time > 0) {
                $timestr = display_time($time);
                if ($duration > 0) {
                    // calc end time
                    $h = (int) ($time / 10000);
                    $m = $time / 100 % 100;
                    $m += $duration;
                    $d = $duration;
                    while ($m >= 60) {
                        $h++;
                        $m -= 60;
                    }
                    $end_time = sprintf("%02d%02d00", $h, $m);
                    $timestr .= " - " . display_time($end_time);
                }
            }
            echo htmlspecialchars($name);
            echo "</A>";
            echo " (" . date_to_str($date) . ")\n";
            echo ": <A HREF=\"approve_entry.php?id={$id}&ret=list";
            if ($user == "__public__") {
                echo "&public=1";
            }
            echo "\" CLASS=\"navlinks\" onClick=\"return confirm('" . translate("Approve this entry?") . "');\">" . translate("Approve/Confirm") . "</A>, ";
            echo "<A HREF=\"reject_entry.php?id={$id}&ret=list";
            if ($user == "__public__") {
                echo "&public=1";
            }
            echo "\" CLASS=\"navlinks\" onClick=\"return confirm('" . translate("Reject this entry?") . "');\">" . translate("Reject") . "</A>";
            $eventinfo .= build_event_popup($divname, $user, $description, $timestr, $time);
            $count++;
        }
        dbi_free_result($res);
    }
    echo "</UL><P>\n";
    if ($count == 0) {
        user_load_variables($user, "temp_");
        echo translate("No unapproved events for") . " " . $temp_fullname . ".";
    } else {
        echo $eventinfo;
    }
}
示例#18
0
 if (empty($id) || $do_override) {
     $res = dbi_query("SELECT MAX(cal_id) FROM webcal_entry");
     if ($res) {
         $row = dbi_fetch_row($res);
         $id = $row[0] + 1;
         dbi_free_result($res);
     } else {
         $id = 1;
     }
 } else {
     $newevent = false;
     // save old status values of participants
     $sql = "SELECT cal_login, cal_status, cal_category FROM webcal_entry_user " . "WHERE cal_id = {$id} ";
     $res = dbi_query($sql);
     if ($res) {
         for ($i = 0; $tmprow = dbi_fetch_row($res); $i++) {
             $old_status[$tmprow[0]] = $tmprow[1];
             $old_category[$tmprow[0]] = $tmprow[2];
         }
         dbi_free_result($res);
     } else {
         $error = translate("Database error") . ": " . dbi_error();
     }
     if (empty($error)) {
         dbi_query("DELETE FROM webcal_entry WHERE cal_id = {$id}");
         dbi_query("DELETE FROM webcal_entry_user WHERE cal_id = {$id}");
         dbi_query("DELETE FROM webcal_entry_ext_user WHERE cal_id = {$id}");
         dbi_query("DELETE FROM webcal_entry_repeats WHERE cal_id = {$id}");
         dbi_query("DELETE FROM webcal_site_extras WHERE cal_id = {$id}");
     }
     $newevent = false;
示例#19
0
function load_nonuser_preferences($nonuser)
{
    global $prefarray;
    $res = dbi_query("SELECT cal_setting, cal_value FROM webcal_user_pref " . "WHERE cal_login = '******'");
    if ($res) {
        while ($row = dbi_fetch_row($res)) {
            $setting = $row[0];
            $value = $row[1];
            $sys_setting = "sys_" . $setting;
            // save system defaults
            // ** don't override ones set by load_user_prefs
            if (!empty($GLOBALS[$setting]) && empty($GLOBALS["sys_" . $setting])) {
                $GLOBALS["sys_" . $setting] = $GLOBALS[$setting];
            }
            $GLOBALS[$setting] = $value;
            $prefarray[$setting] = $value;
        }
        dbi_free_result($res);
    }
}
示例#20
0
function user_delete_user($user)
{
    // Get event ids for all events this user is a participant
    $events = get_users_event_ids($user);
    // Now count number of participants in each event...
    // If just 1, then save id to be deleted
    $delete_em = array();
    for ($i = 0; $i < count($events); $i++) {
        $res = dbi_query("SELECT COUNT(*) FROM webcal_entry_user " . "WHERE cal_id = " . $events[$i]);
        if ($res) {
            if ($row = dbi_fetch_row($res)) {
                if ($row[0] == 1) {
                    $delete_em[] = $events[$i];
                }
            }
            dbi_free_result($res);
        }
    }
    // Now delete events that were just for this user
    for ($i = 0; $i < count($delete_em); $i++) {
        dbi_query("DELETE FROM webcal_entry WHERE cal_id = " . $delete_em[$i]);
    }
    // Delete user participation from events
    dbi_query("DELETE FROM webcal_entry_user WHERE cal_login = '******'");
    // Delete preferences
    dbi_query("DELETE FROM webcal_user_pref WHERE cal_login = '******'");
    // Delete from groups
    dbi_query("DELETE FROM webcal_group_user WHERE cal_login = '******'");
    // Delete bosses & assistants
    dbi_query("DELETE FROM webcal_asst WHERE cal_boss = '{$user}'");
    dbi_query("DELETE FROM webcal_asst WHERE cal_assistant = '{$user}'");
    // Delete user's views
    $delete_em = array();
    $res = dbi_query("SELECT cal_view_id FROM webcal_view " . "WHERE cal_owner = '{$user}'");
    if ($res) {
        while ($row = dbi_fetch_row($res)) {
            $delete_em[] = $row[0];
        }
        dbi_free_result($res);
    }
    for ($i = 0; $i < count($delete_em); $i++) {
        dbi_query("DELETE FROM webcal_view_user WHERE cal_view_id = " . $delete_em[$i]);
    }
    dbi_query("DELETE FROM webcal_view WHERE cal_owner = '{$user}'");
    // Delete layers
    dbi_query("DELETE FROM webcal_user_layers WHERE cal_login = '******'");
    // Delete any layers other users may have that point to this user.
    dbi_query("DELETE FROM webcal_user_layers WHERE cal_layeruser = '******'");
}
示例#21
0
    } else {
        if ($wday == 0 || $wday == 6) {
            echo "<td class=\"weekend\">";
        } else {
            echo "<td class=\"reg\">";
        }
    }
    //  echo "<td style=\"width:90%; background-color:$color;\">";
    if (empty($add_link_in_views) || $add_link_in_views != "N") {
        echo html_for_add_icon(date("Ymd", $date), "", "", $user);
    }
    // Parametres par defaut
    if ($prefarray["WORK_DAY_START_HOUR"] == NULL || $prefarray["WORK_DAY_END_HOUR"] == NULL) {
        $val = dbi_fetch_row(dbi_query("SELECT cal_value FROM webcal_config where cal_setting=\"WORK_DAY_START_HOUR\""));
        $prefarray["WORK_DAY_START_HOUR"] = $val[0];
        $val = dbi_fetch_row(dbi_query("SELECT cal_value FROM webcal_config where cal_setting=\"WORK_DAY_END_HOUR\""));
        $prefarray["WORK_DAY_END_HOUR"] = $val[0];
    }
    print_header_timebar($prefarray["WORK_DAY_START_HOUR"], $prefarray["WORK_DAY_END_HOUR"]);
    print_date_entries_timebar(date("Ymd", $date), $GLOBALS["login"], true);
    echo "</td>";
    echo "</tr>\n";
}
echo "</table>\n<br />\n";
$user = "";
// reset
echo $eventinfo;
echo "<a title=\"" . translate("Generate printer-friendly version") . "\" class=\"printer\" href=\"view_t.php?timeb={$timeb}&amp;id={$id}&amp;date={$thisdate}&amp;friendly=1\" target=\"cal_printer_friendly\" onmouseover=\"window.status='" . translate("Generate printer-friendly version") . "'\">[" . translate("Printer Friendly") . "]</a>\n";
print_trailer();
?>
</body>
function export_install_datebook($res)
{
    while ($row = dbi_fetch_row($res)) {
        $start_time = pilot_date_time($row[3], $row[4], 0);
        $end_time = pilot_date_time($row[3], $row[4], $row[8]);
        printf("%s\t%s\t\t%s\n", $start_time, $end_time, $row[1]);
        echo "Start time: {$start_time}\n";
        echo "End time: {$end_time}\n";
        echo "Duration: {$row['8']}\n";
        echo "Name: {$row['1']}\n";
    }
}
示例#23
0
function user_has_boss($assistant)
{
    $ret = false;
    $res = dbi_query("SELECT * FROM webcal_asst as b " . "WHERE b.cal_assistant = '{$assistant}'");
    if ($res) {
        if (dbi_fetch_row($res)) {
            $ret = true;
        }
        dbi_free_result($res);
    }
    return $ret;
}
示例#24
0
    exit;
}
$error = '';
if ($action == 'Delete' || $action == translate('Delete')) {
    // delete this nonuser calendar
    $user = $nid;
    // Get event ids for all events this user is a participant.
    $events = get_users_event_ids($user);
    // Now count number of participants in each event...
    // If just 1, then save id to be deleted.
    $delete_em = array();
    for ($i = 0, $cnt = count($events); $i < $cnt; $i++) {
        $res = dbi_execute('SELECT COUNT( * ) FROM webcal_entry_user
      WHERE cal_id = ?', array($events[$i]));
        if ($res) {
            if ($row = dbi_fetch_row($res) && $row[0] == 1) {
                $delete_em[] = $events[$i];
            }
            dbi_free_result($res);
        }
    }
    // Now delete events that were just for this user
    for ($i = 0, $cnt = count($delete_em); $i < $cnt; $i++) {
        dbi_execute('DELETE FROM webcal_entry WHERE cal_id = ?', array($delete_em[$i]));
    }
    // Delete user participation from events
    dbi_execute('DELETE FROM webcal_entry_user WHERE cal_login = ?', array($user));
    // Delete any layers other users may have that point to this user.
    dbi_execute('DELETE FROM webcal_user_layers WHERE cal_layeruser = ?', array($user));
    // Delete user
    if (!dbi_execute('DELETE FROM webcal_nonuser_cals WHERE cal_login = ?', array($user))) {
示例#25
0
function export_ical()
{
    global $publish_fullname, $user;
    $res = get_events_for_publish();
    $entry_array = array();
    $count = 0;
    while ($entry = dbi_fetch_row($res)) {
        $entry_array[$count++] = $entry;
    }
    if ($count > 0) {
        echo "BEGIN:VCALENDAR\r\n";
        $title = "X-WR-CALNAME;VALUE=TEXT:" . (empty($publish_fullname) ? $user : translate($publish_fullname));
        $title = str_replace(",", "\\,", $title);
        echo "{$title}\r\n";
        if (preg_match("/WebCalendar v(\\S+)/", $PROGRAM_NAME, $match)) {
            echo "PRODID:-//WebCalendar-{$match['1']}\r\n";
        } else {
            echo "PRODID:-//WebCalendar-UnknownVersion\r\n";
        }
        echo "VERSION:2.0\r\n";
        echo "METHOD:PUBLISH\r\n";
    }
    while (list($key, $row) = each($entry_array)) {
        $uid = $row[0];
        $export_uid = generate_uid($uid);
        $name = $row[1];
        $priority = $row[2];
        $date = $row[3];
        $time = $row[4];
        $status = $row[5];
        $create_by = $row[6];
        $access = $row[7];
        $duration = $row[8];
        $description = $row[9];
        /* Start of event */
        echo "BEGIN:VEVENT\r\n";
        /* UID of the event (folded to 76 char) */
        $array = export_fold_lines("UID:{$export_uid}");
        while (list($key, $value) = each($array)) {
            echo "{$value}\r\n";
        }
        $name = preg_replace("/\r/", "", $name);
        $name = preg_replace("/\n/", "\\n", $name);
        $name = preg_replace("/\\\\/", "\\\\\\", $name);
        // ??
        $description = preg_replace("/\r/", "", $description);
        $description = preg_replace("/\n/", "\\n", $description);
        $description = preg_replace("/\\\\/", "\\\\\\", $description);
        // ??
        /* SUMMARY of the event (folded to 76 char) */
        $name = "SUMMARY:" . $name;
        $array = export_fold_lines($name, "utf8");
        while (list($key, $value) = each($array)) {
            echo "{$value}\r\n";
        }
        /* DESCRIPTION if any (folded to 76 char) */
        if ($description != "") {
            $description = "DESCRIPTION:" . $description;
            $array = export_fold_lines($description, "utf8");
            while (list($key, $value) = each($array)) {
                echo "{$value}\r\n";
            }
        }
        /* CLASS either "PRIVATE" or "PUBLIC" (the default) */
        if ($access == "R") {
            echo "CLASS:PRIVATE\r\n";
        } else {
            echo "CLASS:PUBLIC\r\n";
        }
        /* Time - all times are utc */
        export_time($date, $duration, $time, "ical");
        /* Recurrence */
        export_recurrence_ical($uid, $date);
        /* handle alarms */
        export_alarm_ical($uid, $description);
        /* Goodbye event */
        echo "END:VEVENT\r\n";
    }
    if ($count > 0) {
        echo "END:VCALENDAR\r\n";
    }
}
示例#26
0
function dbtable_genid($tablename, $field)
{
    $ret = 1;
    $sql = "SELECT MAX(" . $field . ") FROM " . $tablename;
    $res = dbi_query($sql);
    if ($res) {
        if ($row = dbi_fetch_row($res)) {
            $ret = $row[0] + 1;
        }
        dbi_free_result($res);
    }
    return $ret;
}
示例#27
0
</span>
</div></div><br />

<?php 
// The table has names across the top and dates for rows.  Since we need
// to spit out an entire row before we can move to the next date, we'll
// save up all the HTML for each cell and then print it out when we're
// done..
// Additionally, we only want to put at most 6 users in one table since
// any more than that doesn't really fit in the page.
// get users in this view
$res = dbi_query("SELECT cal_login FROM webcal_view_user WHERE cal_view_id = {$id}");
$viewusers = array();
$all_users = false;
if ($res) {
    while ($row = dbi_fetch_row($res)) {
        $viewusers[] = $row[0];
        if ($row[0] == "__all__") {
            $all_users = true;
        }
    }
    dbi_free_result($res);
} else {
    $error = translate("Database error") . ": " . dbi_error();
}
if ($all_users) {
    $viewusers = array();
    $users = get_my_users();
    for ($i = 0; $i < count($users); $i++) {
        $viewusers[] = $users[$i]['cal_login'];
    }
示例#28
0
if (!empty($startid)) {
    $sql .= 'AND wel.cal_log_id <= ? ';
    $sql_params[] = $startid;
}
$sql .= 'ORDER BY wel.cal_log_id DESC';
if (!empty($WS_DEBUG) && $WS_DEBUG) {
    ws_log_message('SQL> ' . $sql . "\n\n");
}
$res = dbi_execute($sql, $sql_params);
$out = '
<activitylog>';
if ($res) {
    $out .= '
<!-- in if -->';
    $cnt = 0;
    while (($row = dbi_fetch_row($res)) && $cnt < $num) {
        $out .= '
<!-- in while type: $row[2] -->
  <log>
    <login>' . ws_escape_xml($row[0]) . '</login>
    <calendar>' . ws_escape_xml($row[1]) . '</calendar>
    <type>' . ws_escape_xml($row[2]) . '</type>
    <date>' . ws_escape_xml($row[3]) . '</date>
    <time>' . ws_escape_xml($row[4]) . '</time>
    <action>' . ws_escape_xml($row[5]) . '</action>
    <id>' . ws_escape_xml($row[6]) . '</id>
  </log>
';
        $cnt++;
    }
    dbi_free_result($res);
示例#29
0
/**
 * Prints the common trailer.
 *
 * @param bool $include_nav_links Should the standard navigation links be
 *                               included in the trailer?
 * @param bool $closeDb           Close the database connection when finished?
 * @param bool $disableCustom     Disable the custom trailer the administrator
 *                                has setup?  (This is useful for small popup
 *                                windows and pages being used in an iframe.)
 */
function print_trailer($include_nav_links = true, $closeDb = true, $disableCustom = false)
{
    global $CUSTOM_TRAILER, $c, $STARTVIEW;
    global $login, $user, $cat_id, $categories_enabled, $thisyear, $thismonth, $thisday, $DATE_FORMAT_MY, $WEEK_START, $DATE_FORMAT_MD, $readonly, $is_admin, $public_access, $public_access_can_add, $single_user, $use_http_auth, $login_return_path, $require_approvals, $is_nonuser_admin, $public_access_others, $allow_view_other, $views, $reports_enabled, $LAYER_STATUS, $nonuser_enabled, $groups_enabled, $fullname, $has_boss;
    if ($include_nav_links) {
        include_once "includes/trailer.php";
    }
    // Add custom trailer if enabled
    if ($CUSTOM_TRAILER == 'Y' && !$disableCustom && isset($c)) {
        $res = dbi_query("SELECT cal_template_text FROM webcal_report_template " . "WHERE cal_template_type = 'T' and cal_report_id = 0");
        if ($res) {
            if ($row = dbi_fetch_row($res)) {
                echo $row[0];
            }
            dbi_free_result($res);
        }
    }
    if ($closeDb) {
        if (isset($c)) {
            dbi_close($c);
        }
        unset($c);
    }
}
function import_data($data, $overwrite, $type)
{
    global $login, $count_con, $count_suc, $error_num, $ImportType, $LOG_CREATE;
    global $single_user, $single_user_login, $allow_conflicts;
    global $numDeleted, $errormsg;
    global $calUser, $H2COLOR, $sqlLog;
    $oldUIDs = array();
    $oldIds = array();
    $firstEventId = 0;
    $importId = 1;
    // Generate a unique import id
    $res = dbi_query("SELECT MAX(cal_import_id) FROM webcal_import");
    if ($res) {
        if ($row = dbi_fetch_row($res)) {
            $importId = $row[0] + 1;
        }
        dbi_free_result($res);
    }
    $sql = "INSERT INTO webcal_import ( cal_import_id, cal_name, " . "cal_date, cal_type, cal_login ) VALUES ( {$importId}, NULL, " . date("Ymd") . ", '{$type}', '{$login}' )";
    if (!dbi_query($sql)) {
        $errormsg = translate("Database error") . ": " . dbi_error();
        return;
    }
    foreach ($data as $Entry) {
        $priority = 2;
        $participants[0] = $calUser;
        // Some additional date/time info
        $START = $Entry['StartTime'] > 0 ? localtime($Entry['StartTime']) : 0;
        $END = $Entry['EndTime'] > 0 ? localtime($Entry['EndTime']) : 0;
        $Entry['StartMinute'] = sprintf("%02d", $START[1]);
        $Entry['StartHour'] = sprintf("%02d", $START[2]);
        $Entry['StartDay'] = sprintf("%02d", $START[3]);
        $Entry['StartMonth'] = sprintf("%02d", $START[4] + 1);
        $Entry['StartYear'] = sprintf("%04d", $START[5] + 1900);
        $Entry['EndMinute'] = sprintf("%02d", $END[1]);
        $Entry['EndHour'] = sprintf("%02d", $END[2]);
        $Entry['EndDay'] = sprintf("%02d", $END[3]);
        $Entry['EndMonth'] = sprintf("%02d", $END[4] + 1);
        $Entry['EndYear'] = sprintf("%04d", $END[5] + 1900);
        if ($overwrite && !empty($Entry['UID'])) {
            $oldUIDs[$Entry['UID']]++;
        }
        // Check for untimed
        if ($Entry['Untimed'] == 1) {
            $Entry['StartMinute'] = '';
            $Entry['StartHour'] = '';
            $Entry['EndMinute'] = '';
            $Entry['EndHour'] = '';
        }
        // first check for any schedule conflicts
        if (empty($allow_conflicts) && $Entry['Duration'] != 0) {
            $date = mktime(0, 0, 0, $Entry['StartMonth'], $Entry['StartDay'], $Entry['StartYear']);
            $endt = !empty($Entry['Repeat']['EndTime']) ? $Entry['Repeat']['EndTime'] : 'NULL';
            $dayst = !empty($Entry['Repeat']['RepeatDays']) ? $Entry['Repeat']['RepeatDays'] : "nnnnnnn";
            $ex_days = array();
            if (!empty($Entry['Repeat']['Exceptions'])) {
                foreach ($Entry['Repeat']['Exceptions'] as $ex_date) {
                    $ex_days[] = date("Ymd", $ex_date);
                }
            }
            $dates = get_all_dates($date, RepeatType($Entry['Repeat']['Interval']), $endt, $dayst, $ex_days, $Entry['Repeat']['Frequency']);
            $overlap = overlap($dates, $Entry['Duration'], $Entry['StartHour'], $Entry['StartMinute'], $participants, $login, 0);
        }
        if (empty($error) && !empty($overlap)) {
            $error = translate("The following conflicts with the suggested time") . ":<ul>{$overlap}</ul>\n";
        }
        if (empty($error)) {
            $updateMode = false;
            // See if event already is there from prior import.
            // The same UID is used for all events imported at once with iCal.
            // So, we still don't have enough info to find the exact
            // event we want to replace.  We could just delete all
            // existing events that correspond to the UID.
            /************************************************************************
              Not sure what to do with this code since I don't know how Palm and vCal
              use the UID stuff yet...
              
                  if ( ! empty ( $Entry['UID'] ) ) {
                    $res = dbi_query ( "SELECT webcal_import_data.cal_id " .
                      "FROM webcal_import_data, webcal_entry_user " .
                      "WHERE cal_import_type = 'ical' AND " .
                      "webcal_import_data.cal_id = webcal_entry_user.cal_id AND " .
                      "webcal_entry_user.cal_login = '******' AND " .
                      "cal_external_id = '$Entry[UID]'" );
                    if ( $res ) {
                      if ( $row = dbi_fetch_row ( $res ) ) {
                        if ( ! empty ( $row[0] ) ) {
                          $id = $row[0];
                          $updateMode = true;
                          // update rather than add a new event
                        }
                      }
                    }
                  }
            ************************************************************************/
            // Add the Event
            $res = dbi_query("SELECT MAX(cal_id) FROM webcal_entry");
            if ($res) {
                $row = dbi_fetch_row($res);
                $id = $row[0] + 1;
                dbi_free_result($res);
            } else {
                $id = 1;
                //$error = "Unable to select MAX cal_id: " . dbi_error () . "<br /><br />\n<b>SQL:</b> $sql";
                //break;
            }
            if ($firstEventId == 0) {
                $firstEventId = $id;
            }
            $names = array();
            $values = array();
            $names[] = 'cal_id';
            $values[] = "{$id}";
            if (!$updateMode) {
                $names[] = 'cal_create_by';
                $values[] = "'{$login}'";
            }
            $names[] = 'cal_date';
            $values[] = sprintf("%04d%02d%02d", $Entry['StartYear'], $Entry['StartMonth'], $Entry['StartDay']);
            $names[] = 'cal_time';
            $values[] = $Entry['Untimed'] == 1 ? "-1" : sprintf("%02d%02d00", $Entry['StartHour'], $Entry['StartMinute']);
            $names[] = 'cal_mod_date';
            $values[] = date("Ymd");
            $names[] = 'cal_mod_time';
            $values[] = date("Gis");
            $names[] = 'cal_duration';
            $values[] = sprintf("%d", $Entry['Duration']);
            $names[] = 'cal_priority';
            $values[] = $priority;
            $names[] = 'cal_access';
            $values[] = $Entry['Private'] == 1 ? "'R'" : "'P'";
            $names[] = 'cal_type';
            $values[] = $Entry['Repeat'] ? "'M'" : "'E'";
            if (strlen($Entry['Summary']) == 0) {
                $Entry['Summary'] = translate("Unnamed Event");
            }
            if (strlen($Entry['Description']) == 0) {
                $Entry['Description'] = $Entry['Summary'];
            }
            $Entry['Summary'] = str_replace("\\n", "\n", $Entry['Summary']);
            $Entry['Summary'] = str_replace("\\'", "'", $Entry['Summary']);
            $Entry['Summary'] = str_replace("\\\"", "\"", $Entry['Summary']);
            $Entry['Summary'] = str_replace("'", "\\'", $Entry['Summary']);
            $names[] = 'cal_name';
            $values[] = "'" . $Entry['Summary'] . "'";
            $Entry['Description'] = str_replace("\\n", "\n", $Entry['Description']);
            $Entry['Description'] = str_replace("\\'", "'", $Entry['Description']);
            $Entry['Description'] = str_replace("\\\"", "\"", $Entry['Description']);
            $Entry['Description'] = str_replace("'", "\\'", $Entry['Description']);
            // limit length to 1024 chars since we setup tables that way
            if (strlen($Entry['Description']) >= 1024) {
                $Entry['Description'] = substr($Entry['Description'], 0, 1019) . "...";
            }
            $names[] = 'cal_description';
            $values[] = "'" . $Entry['Description'] . "'";
            //echo "Summary:<p>" . nl2br ( htmlspecialchars ( $Entry['Summary'] ) ) . "</p>";
            //echo "Description:<p>" . nl2br ( htmlspecialchars ( $Entry['Description'] ) ) . "</p>"; exit;
            if ($updateMode) {
                $sql = "UPDATE webcal_entry SET ";
                for ($f = 0; $f < count($names); $f++) {
                    if ($f > 0) {
                        $sql .= ", ";
                    }
                    $sql .= $names[$f] . " = " . $values[$f];
                }
                $sql .= " WHERE cal_id = {$id}";
            } else {
                $sql = "INSERT INTO webcal_entry ( " . implode(", ", $names) . " ) VALUES ( " . implode(", ", $values) . " )";
            }
            if (empty($error)) {
                $sqlLog .= $sql . "<br />\n";
                //echo "SQL: $sql <br />\n";
                if (!dbi_query($sql)) {
                    $error .= "<p>" . translate("Database error") . ": " . dbi_error() . "</p>\n";
                    break;
                }
            }
            // log add/update
            activity_log($id, $login, $login, $updateMode ? $LOG_UPDATE : $LOG_CREATE, "Import from {$ImportType}");
            if ($single_user == "Y") {
                $participants[0] = $single_user_login;
            }
            // Now add to webcal_import_data
            if (!$updateMode) {
                if ($ImportType == "PALMDESKTOP") {
                    $sql = "INSERT INTO webcal_import_data ( cal_import_id, cal_id, " . "cal_login, cal_import_type, cal_external_id ) VALUES ( " . "{$importId}, {$id}, '{$calUser}', 'palm', '{$Entry['RecordID']}' )";
                    $sqlLog .= $sql . "<br />\n";
                    if (!dbi_query($sql)) {
                        $error = translate("Database error") . ": " . dbi_error();
                        break;
                    }
                } else {
                    if ($ImportType == "VCAL") {
                        $uid = empty($Entry['UID']) ? "null" : "'{$Entry['UID']}'";
                        if (strlen($uid) > 200) {
                            $uid = "NULL";
                        }
                        $sql = "INSERT INTO webcal_import_data ( cal_import_id, cal_id, " . "cal_login, cal_import_type, cal_external_id ) VALUES ( " . "{$importId}, {$id}, '{$calUser}', 'vcal', {$uid} )";
                        $sqlLog .= $sql . "<br />\n";
                        if (!dbi_query($sql)) {
                            $error = translate("Database error") . ": " . dbi_error();
                            break;
                        }
                    } else {
                        if ($ImportType == "ICAL") {
                            $uid = empty($Entry['UID']) ? "null" : "'{$Entry['UID']}'";
                            if (strlen($uid) > 200) {
                                $uid = "NULL";
                            }
                            $sql = "INSERT INTO webcal_import_data ( cal_import_id, cal_id, " . "cal_login, cal_import_type, cal_external_id ) VALUES ( " . "{$importId}, {$id}, '{$calUser}', 'ical', {$uid} )";
                            $sqlLog .= $sql . "<br />\n";
                            if (!dbi_query($sql)) {
                                $error = translate("Database error") . ": " . dbi_error();
                                break;
                            }
                        }
                    }
                }
            }
            // Now add participants
            if (!$updateMode) {
                $status = $login == "__public__" ? 'W' : 'A';
                if (empty($cat_id)) {
                    $cat_id = 'NULL';
                }
                $sql = "INSERT INTO webcal_entry_user " . "( cal_id, cal_login, cal_status, cal_category ) VALUES ( {$id}, '" . $participants[0] . "', '{$status}', {$cat_id} )";
                $sqlLog .= $sql . "<br />\n";
                if (!dbi_query($sql)) {
                    $error = translate("Database error") . ": " . dbi_error();
                    break;
                }
            }
            // Add repeating info
            if ($updateMode) {
                // remove old repeating info
                dbi_query("DELETE FROM webcal_entry_repeats WHERE cal_id = {$id}");
                dbi_query("DELETE FROM webcal_entry_repeats_not WHERE cal_id = {$id}");
            }
            if (!empty($Entry['Repeat']['Interval'])) {
                //while ( list($k,$v) = each ( $Entry['Repeat'] ) ) {
                //  echo "$k: $v <br />\n";
                //}
                $rpt_type = RepeatType($Entry['Repeat']['Interval']);
                $freq = $Entry['Repeat']['Frequency'] ? $Entry['Repeat']['Frequency'] : 1;
                if (strlen($Entry['Repeat']['EndTime'])) {
                    $REND = localtime($Entry['Repeat']['EndTime']);
                    $end = sprintf("%04d%02d%02d", $REND[5] + 1900, $REND[4] + 1, $REND[3]);
                } else {
                    $end = 'NULL';
                }
                $days = !empty($Entry['Repeat']['RepeatDays']) ? "'" . $Entry['Repeat']['RepeatDays'] . "'" : 'NULL';
                $sql = "INSERT INTO webcal_entry_repeats ( cal_id, " . "cal_type, cal_end, cal_days, cal_frequency ) VALUES " . "( {$id}, '{$rpt_type}', {$end}, {$days}, {$freq} )";
                $sqlLog .= $sql . "<br />\n";
                if (!dbi_query($sql)) {
                    $error = "Unable to add to webcal_entry_repeats: " . dbi_error() . "<br /><br />\n<b>SQL:</b> {$sql}";
                    break;
                }
                // Repeating Exceptions...
                if (!empty($Entry['Repeat']['Exceptions'])) {
                    foreach ($Entry['Repeat']['Exceptions'] as $ex_date) {
                        $ex_date = date("Ymd", $ex_date);
                        $sql = "INSERT INTO webcal_entry_repeats_not ( cal_id, cal_date ) VALUES ( {$id}, {$ex_date} )";
                        $sqlLog .= $sql . "<br />\n";
                        if (!dbi_query($sql)) {
                            $error = "Unable to add to webcal_entry_repeats_not: " . dbi_error() . "<br /><br />\n<b>SQL:</b> {$sql}";
                            break;
                        }
                    }
                }
            }
            // End Repeat
            // Add Alarm info -> site_extras
            if ($updateMode) {
                dbi_query("DELETE FROM webcal_site_extras WHERE cal_id = {$id}");
            }
            if ($Entry['AlarmSet'] == 1) {
                $RM = $Entry['AlarmAdvanceAmount'];
                if ($Entry['AlarmAdvanceType'] == 1) {
                    $RM = $RM * 60;
                }
                if ($Entry['AlarmAdvanceType'] == 2) {
                    $RM = $RM * 60 * 24;
                }
                $sql = "INSERT INTO webcal_site_extras ( cal_id, " . "cal_name, cal_type, cal_remind, cal_data ) VALUES " . "( {$id}, 'Reminder', 7, 1, {$RM} )";
                $sqlLog .= $sql . "<br />\n";
                if (!dbi_query($sql)) {
                    $error = translate("Database error") . ": " . dbi_error();
                }
            }
        }
        if (!empty($error) && empty($overlap)) {
            $error_num++;
            echo "<h2>" . translate("Error") . "</h2>\n<blockquote>\n";
            echo $error . "</blockquote>\n<br />\n";
        }
        // Conflicting
        if (!empty($overlap)) {
            echo "<b><h2>" . translate("Scheduling Conflict") . ": ";
            $count_con++;
            echo "</h2></b>";
            if ($Entry['Duration'] > 0) {
                $time = display_time($Entry['StartHour'] . $Entry['StartMinute'] . "00") . " - " . display_time($Entry['EndHour'] . $Entry['EndMinute'] . "00");
            }
            $dd = $Entry['StartMonth'] . "-" . $Entry['StartDay'] . "-" . $Entry['StartYear'];
            echo "<a class=\"entry\" href=\"view_entry.php?id={$id}";
            echo "\" onmouseover=\"window.status='" . translate("View this entry") . "'; return true;\" onmouseout=\"window.status=''; return true;\">";
            $Entry['Summary'] = str_replace("''", "'", $Entry['Summary']);
            $Entry['Summary'] = str_replace("'", "\\'", $Entry['Summary']);
            echo htmlspecialchars($Entry['Summary']);
            echo "</a> (" . $dd;
            $time = trim($time);
            if (!empty($time)) {
                echo "&nbsp; " . $time;
            }
            echo ")<br />\n";
            etranslate("conflicts with the following existing calendar entries");
            echo ":<ul>\n" . $overlap . "</ul>\n";
        } else {
            // No Conflict
            echo "<b><h2>" . translate("Event Imported") . ":</h2></b>\n";
            $count_suc++;
            if ($Entry['Duration'] > 0) {
                $time = display_time($Entry['StartHour'] . $Entry['StartMinute'] . "00") . " - " . display_time($Entry['EndHour'] . $Entry['EndMinute'] . "00");
            }
            $dateYmd = sprintf("%04d%02d%02d", $Entry['StartYear'], $Entry['StartMonth'], $Entry['StartDay']);
            $dd = date_to_str($dateYmd);
            echo "<a class=\"entry\" href=\"view_entry.php?id={$id}";
            echo "\" onmouseover=\"window.status='" . translate("View this entry") . "'; return true;\" onmouseout=\"window.status=''; return true;\">";
            $Entry['Summary'] = str_replace("''", "'", $Entry['Summary']);
            $Entry['Summary'] = str_replace("\\", "", $Entry['Summary']);
            echo htmlspecialchars($Entry['Summary']);
            echo "</a> (" . $dd;
            if (!empty($time)) {
                echo "&nbsp; " . $time;
            }
            echo ")<br />\n";
        }
        // Reset Variables
        $overlap = $error = $dd = $time = '';
    }
    // Mark old events from prior import as deleted.
    if ($overwrite && count($oldUIDs) > 0) {
        // We could do this with a single SQL using sub-select, but
        // I'm pretty sure MySQL does not support it.
        $old = array_keys($oldUIDs);
        for ($i = 0; $i < count($old); $i++) {
            $sql = "SELECT cal_id FROM webcal_import_data WHERE " . "cal_import_type = '{$type}' AND " . "cal_external_id = '{$old[$i]}' AND " . "cal_login = '******' AND " . "cal_id < {$firstEventId}";
            $res = dbi_query($sql);
            if ($res) {
                while ($row = dbi_fetch_row($res)) {
                    $oldIds[] = $row[0];
                }
                dbi_free_result($res);
            } else {
                echo translate("Database error") . ": " . dbi_error() . "<br />\n";
            }
        }
        for ($i = 0; $i < count($oldIds); $i++) {
            $sql = "UPDATE webcal_entry_user SET cal_status = 'D' " . "WHERE cal_id = {$oldIds[$i]}";
            $sqlLog .= $sql . "<br />\n";
            dbi_query($sql);
            $numDeleted++;
        }
    }
    //echo "<b>SQL:</b><br />\n$sqlLog\n";
}