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; }
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); } } }
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; }
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); } }
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>?"); } }
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; }
/** * 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; }
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; }
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; }
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 ) }
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}&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}&ret=list&user={$user}"; if ($user == "__public__") { echo "&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}&ret=list&user={$user}"; if ($user == "__public__") { echo "&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}&ret=list"; if ($user != $login) { echo "&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") . " " . $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; } }
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;
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); } }
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 = '******'"); }
} 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}&id={$id}&date={$thisdate}&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"; } }
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; }
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))) {
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"; } }
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; }
</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']; }
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);
/** * 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 " " . $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 " " . $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"; }