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 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 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 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; }
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 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 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"; }
function delete_events($nid) { // Get event ids for all events this user is a participant. $events = get_users_event_ids($nid); // 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) { $row = dbi_fetch_row($res); if (!empty($row) && $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_repeats WHERE cal_id = ?', array($delete_em[$i])); dbi_execute('DELETE FROM webcal_entry_repeats_not WHERE cal_id = ?', array($delete_em[$i])); dbi_execute('DELETE FROM webcal_entry_log WHERE cal_entry_id = ?', array($delete_em[$i])); dbi_execute('DELETE FROM webcal_import_data WHERE cal_id = ?', array($delete_em[$i])); dbi_execute('DELETE FROM webcal_site_extras WHERE cal_id = ?', array($delete_em[$i])); dbi_execute('DELETE FROM webcal_entry_ext_user WHERE cal_id = ?', array($delete_em[$i])); dbi_execute('DELETE FROM webcal_reminders WHERE cal_id =? ', array($delete_em[$i])); dbi_execute('DELETE FROM webcal_blob WHERE cal_id = ?', array($delete_em[$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($nid)); }
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 export_alarm_ical($id, $description) { $sql = "SELECT cal_data FROM webcal_site_extras " . "WHERE cal_id = {$id} AND cal_type = 7 AND cal_remind = 1"; $res = dbi_query($sql); $row = dbi_fetch_row($res); dbi_free_result($res); if ($row) { echo "BEGIN:VALARM\r\n"; echo "TRIGGER:-PT" . $row[0] . "M\r\n"; echo "ACTION:DISPLAY\r\n"; $array = export_fold_lines($description, "utf8"); while (list($key, $value) = each($array)) { echo "{$value}\r\n"; } echo "END:VALARM\r\n"; } }
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 = '******'"); // Delete user if (!dbi_query("DELETE FROM webcal_nonuser_cals WHERE cal_login = '******'")) { $error = translate("Database error") . ": " . dbi_error(); } } else {
function get_installed_version($postinstall = false) { global $database_upgrade_matrix, $PROGRAM_VERSION, $settings, $show_all_errors; // Set this as the default value. $_SESSION['application_name'] = 'Title'; $_SESSION['blank_database'] = ''; // We will append the db_type to come up te proper filename. $_SESSION['install_file'] = 'tables'; $_SESSION['old_program_version'] = $postinstall ? $PROGRAM_VERSION : 'new_install'; // Suppress errors based on $show_all_errors. if (!$show_all_errors) { show_errors(false); } // This data is read from file upgrade_matrix.php. for ($i = 0, $dbCntStr = count($database_upgrade_matrix); $i < $dbCntStr; $i++) { $sql = $database_upgrade_matrix[$i][0]; if ($sql != '') { $res = dbi_execute($sql, array(), false, $show_all_errors); } if ($res) { $_SESSION['old_program_version'] = $database_upgrade_matrix[$i + 1][2]; $_SESSION['install_file'] = $database_upgrade_matrix[$i + 1][3]; $res = ''; $sql = $database_upgrade_matrix[$i][1]; if ($sql != '') { dbi_execute($sql, array(), false, $show_all_errors); } } } $response_msg = $_SESSION['old_program_version'] == 'pre-v0.9.07' ? translate('Perl script required') : translate('previous version requires updating several tables'); // v1.1 and after will have an entry in webcal_config to make this easier // $res = dbi_execute ( 'SELECT cal_value FROM webcal_config // WHERE cal_setting = \'WEBCAL_PROGRAM_VERSION\'', array (), false, false ); // if ( $res ) { // $row = dbi_fetch_row ( $res ); // if ( ! empty ( $row[0] ) ) { // $_SESSION['old_program_version'] = $row[0]; // $_SESSION['install_file'] = 'upgrade_' . $row[0]; // } // dbi_free_result ( $res ); // } // We need to determine if this is a blank database. // This may be due to a manual table setup. $res = dbi_execute('SELECT COUNT( cal_value ) FROM webcal_config', array(), false, $show_all_errors); if ($res) { $row = dbi_fetch_row($res); if (isset($row[0]) && $row[0] == 0) { $_SESSION['blank_database'] = true; } else { // Make sure all existing values in config and pref tables are UPPERCASE. make_uppercase(); // Clear db_cache. This will prevent looping when launching WebCalendar // if upgrading and WEBCAL_PROGRAM_VERSION is cached. if (!empty($settings['db_cachedir'])) { dbi_init_cache($settings['db_cachedir']); } else { if (!empty($settings['cachedir'])) { dbi_init_cache($settings['cachedir']); } } // Delete existing WEBCAL_PROGRAM_VERSION number. dbi_execute('DELETE FROM webcal_config WHERE cal_setting = \'WEBCAL_PROGRAM_VERSION\''); } dbi_free_result($res); // Insert webcal_config values only if blank. db_load_config(); // Check if an Admin account exists. $_SESSION['admin_exists'] = db_check_admin(); } // Determine if old data has been converted to GMT. // This seems lke a good place to put this. $res = dbi_execute('SELECT cal_value FROM webcal_config WHERE cal_setting = \'WEBCAL_TZ_CONVERSION\'', array(), false, $show_all_errors); if ($res) { $row = dbi_fetch_row($res); dbi_free_result($res); // If not 'Y', prompt user to do conversion from server time to GMT time. if (!empty($row[0])) { $_SESSION['tz_conversion'] = $row[0]; } else { // We'll test if any events even exist. $res = dbi_execute('SELECT COUNT( cal_id ) FROM webcal_entry ', array(), false, $show_all_errors); if ($res) { $row = dbi_fetch_row($res); dbi_free_result($res); } $_SESSION['tz_conversion'] = $row[0] > 0 ? 'NEEDED' : 'Y'; } dbi_free_result($res); } // Don't show TZ conversion if blank database. if ($_SESSION['blank_database'] == true) { $_SESSION['tz_conversion'] = 'Y'; } // Get existing server URL. // We could use the self-discvery value, but this may be a custom value. $res = dbi_execute('SELECT cal_value FROM webcal_config WHERE cal_setting = \'SERVER_URL\'', array(), false, $show_all_errors); if ($res) { $row = dbi_fetch_row($res); if (!empty($row[0]) && strlen($row[0])) { $_SESSION['server_url'] = $row[0]; } dbi_free_result($res); } // Get existing application name. $res = dbi_execute('SELECT cal_value FROM webcal_config WHERE cal_setting = \'APPLICATION_NAME\'', array(), false, $show_all_errors); if ($res) { $row = dbi_fetch_row($res); if (!empty($row[0])) { $_SESSION['application_name'] = $row[0]; } dbi_free_result($res); } // Enable warnings. show_errors(true); }
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; }
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_execute('SELECT COUNT( * ) FROM webcal_entry_user WHERE cal_id = ?', array($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_execute("DELETE FROM webcal_entry_repeats WHERE cal_id = ?", array($delete_em[$i])); dbi_execute("DELETE FROM webcal_entry_repeats_not WHERE cal_id = ?", array($delete_em[$i])); dbi_execute("DELETE FROM webcal_entry_log WHERE cal_entry_id = ?", array($delete_em[$i])); dbi_execute("DELETE FROM webcal_import_data WHERE cal_id = ?", array($delete_em[$i])); dbi_execute("DELETE FROM webcal_site_extras WHERE cal_id = ?", array($delete_em[$i])); dbi_execute("DELETE FROM webcal_entry_ext_user WHERE cal_id = ?", array($delete_em[$i])); dbi_execute("DELETE FROM webcal_reminders WHERE cal_id = ?", array($delete_em[$i])); dbi_execute("DELETE FROM webcal_blob WHERE cal_id = ?", array($delete_em[$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 preferences dbi_execute("DELETE FROM webcal_user_pref WHERE cal_login = ?", array($user)); // Delete from groups dbi_execute("DELETE FROM webcal_group_user WHERE cal_login = ?", array($user)); // Delete bosses & assistants dbi_execute("DELETE FROM webcal_asst WHERE cal_boss = ?", array($user)); dbi_execute("DELETE FROM webcal_asst WHERE cal_assistant = ?", array($user)); // Delete user's views $delete_em = array(); $res = dbi_execute("SELECT cal_view_id FROM webcal_view WHERE cal_owner = ?", array($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_execute("DELETE FROM webcal_view_user WHERE cal_view_id = ?", array($delete_em[$i])); } dbi_execute("DELETE FROM webcal_view WHERE cal_owner = ?", array($user)); //Delete them from any other user's views dbi_execute("DELETE FROM webcal_view_user WHERE cal_login = ?", array($user)); // Delete layers dbi_execute("DELETE FROM webcal_user_layers 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 dbi_execute("DELETE FROM webcal_user WHERE cal_login = ?", array($user)); // Delete function access dbi_execute("DELETE FROM webcal_access_function WHERE cal_login = ?", array($user)); // Delete user access dbi_execute("DELETE FROM webcal_access_user WHERE cal_login = ?", array($user)); dbi_execute("DELETE FROM webcal_access_user WHERE cal_other_user = ?", array($user)); // Delete user's categories dbi_execute("DELETE FROM webcal_categories WHERE cat_owner = ?", array($user)); dbi_execute("DELETE FROM webcal_entry_categories WHERE cat_owner = ?", array($user)); // Delete user's reports $delete_em = array(); $res = dbi_execute("SELECT cal_report_id FROM webcal_report WHERE cal_login = ?", array($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_execute("DELETE FROM webcal_report_template WHERE cal_report_id = ?", array($delete_em[$i])); } dbi_execute("DELETE FROM webcal_report WHERE cal_login = ?", array($user)); //not sure about this one??? dbi_execute("DELETE FROM webcal_report WHERE cal_user = ?", array($user)); // Delete user templates dbi_execute("DELETE FROM webcal_user_template WHERE cal_login = ?", array($user)); }
function dbtable_genid($tablename, $field) { $ret = 1; $sql = 'SELECT MAX( ' . $field . ' ) FROM ' . $tablename; $res = dbi_execute($sql); if ($res) { if ($row = dbi_fetch_row($res)) { $ret = $row[0] + 1; } dbi_free_result($res); } return $ret; }
function print_header($includes = '', $HeadX = '', $BodyX = '', $disableCustom = false, $disableStyle = false) { global $application_name; global $FONTS, $WEEKENDBG, $THFG, $THBG; global $TABLECELLFG, $TODAYCELLBG, $TEXTCOLOR; global $POPUP_FG, $BGCOLOR; global $LANGUAGE; global $CUSTOM_HEADER, $CUSTOM_SCRIPT; global $friendly; global $bodyid, $self, $popup; 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; $lang = ''; if (!empty($LANGUAGE)) { $lang = languageToAbbrev($LANGUAGE); } if (empty($lang)) { $lang = 'en'; } // Start the header & specify the charset // The charset is defined in the translation file if (!empty($LANGUAGE)) { $charset = translate("charset"); if ($charset != "charset") { echo "<?xml version=\"1.0\" encoding=\"{$charset}\"?>\r\n<!DOCTYPE html\r\n PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\r\n \"DTD/xhtml1-transitional.dtd\">\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"{$lang}\" lang=\"{$lang}\">\r\n<head>\r\n <title>" . translate($application_name) . "</title>\n"; } else { echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\r\n<!DOCTYPE html\r\n PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\r\n \"DTD/xhtml1-transitional.dtd\">\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\r\n<head>\r\n <title>" . translate($application_name) . "</title>\n"; } } // Any other includes? if (is_array($includes)) { foreach ($includes as $inc) { include_once 'includes/' . $inc; } } // Do we need anything else inside the header tag? if ($HeadX) { echo $HeadX . "\n"; } // Include the styles if (!$disableStyle) { echo '<link rel="stylesheet" type="text/css" href="includes/styles.php">'; } // Add custom script/stylesheet if enabled if ($CUSTOM_SCRIPT == 'Y' && !$disableCustom) { $res = dbi_query("SELECT cal_template_text FROM webcal_report_template " . "WHERE cal_template_type = 'S' and cal_report_id = 0"); if ($res) { if ($row = dbi_fetch_row($res)) { echo $row[0]; } dbi_free_result($res); } } // Include includes/print_styles.css as a media="print" stylesheet. When the // user clicks on the "Printer Friendly" link, $friendly will be non-empty, // including this as a normal stylesheet so they can see how it will look // when printed. This maintains backwards-compatibility for browsers that // don't support media="print" stylesheets echo "<link rel=\"stylesheet\" type=\"text/css\"" . (empty($friendly) ? " media=\"print\"" : "") . " href=\"includes/print_styles.css\" />\n"; // Link to favicon echo "<link rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image/x-icon\" />\n"; // encodage echo '<meta http-equiv="Content-Type" Content="text/html; charset=ISO-8859-1">' . "\n"; // fonctions vincent include_once 'includes/fonctions_vincent.php'; JSpopup(); // Finish the header echo "</head>\n<body"; // Find the filename of this page and give the <body> tag the corresponding id $thisPage = substr($self, strrpos($self, '/') + 1); if (isset($bodyid[$thisPage])) { echo " id=\"" . $bodyid[$thisPage] . "\""; } // Add any extra parts to the <body> tag if (!empty($BodyX)) { echo " {$BodyX}"; } // ajout du bandeau haras nationnaux if ($popup == true) { echo ">\n"; } else { echo " style=\"background-image:url(images_haras/fond_bandeau.jpg);background-repeat:no-repeat;\">\n"; } // Add custom header if enabled if ($CUSTOM_HEADER == 'Y' && !$disableCustom) { $res = dbi_query("SELECT cal_template_text FROM webcal_report_template " . "WHERE cal_template_type = 'H' and cal_report_id = 0"); if ($res) { if ($row = dbi_fetch_row($res)) { echo $row[0]; } dbi_free_result($res); } } // bandeau haras nationnaux if ($popup != true) { ?> <!-- <a href="http://xinf-prodlinux/hn2g/"><div style="position:fixed;top:30px;width:300px;height:70px;"></div></a> --> <script> function modPform(type) { //alert (type); if (type=='annuHN') { window.document.searchformentry.target='_new'; window.document.searchformentry.action='http://xinf-prodlinux/intra_drh/html/list_pers.php?lc_prmev[ro]=C&lc_prmev[typers]=I&lc_prmev[aff_pop]=Y&tf_PER_LLNOMPERS=INPLIKE&cfrf=true&tf_DRH_LLACTIVITE=LDMEG&sp_DRH_LLACTIVITE=ACTN:CPA:MTT:CMAT:CMATNR'; } else { window.document.searchformentry.target='_self'; window.document.searchformentry.action='search_handler.php'; } } </script> <div class="bandeauharas"> <form action="search_handler.php" name="searchformentry" method="POST" style="margin:0px;"> recherche <input class="gris11px" onfocus="modPform('intsearch')" type="text" style="width:100px" name="keywords" size="20"><img title="rechercher avec le moteur de recherche" src="images_haras/puce_rechercher.gif" alt="lancer la recherche" height="19" width="21" align="absmiddle" border="0" onclick="modPform('intsearch'); document.searchformentry.submit();"><img src="images_haras/separation_haut.gif" alt="" height="19" width="13" align="absmiddle" border="0"> annuaire HN <input class="gris11px" onfocus="modPform('annuHN')" type="text" style="width:100px" name="rq_PER_LLNOMPERS" size="20"><img title="rechercher dans l'annuaire des HN" src="images_haras/puce_rechercher.gif" alt="" height="19" width="21" align="absmiddle" border="0" onclick="modPform('annuHN'); window.document.searchformentry.submit()"><a href="http://xinf-prodlinux/intra_drh/html/req_rech_pers.php?prech=CI&lc_prmev[aff_pop]=Y" target=_"blank"> <img title="recherche avancée dans l'annuaire des HN" src="images_haras/puce_avance.gif" alt="" name="puce_avancee2" height="19" width="62" align="absmiddle" border="0"></a> <?php // les vues echo '<img src="images_haras/separation_haut.gif" alt="" height="19" width="13" align="absmiddle" border="0">'; if ($login != "__public__" && ($allow_view_other != "N" || $is_admin)) { ?> <select name="Vues" size="0" onchange="if(this.value) { location.href = this.value; }"> <option disabled selected>Vos vues</option> <option value="views.php">Gérer vos vues</option> <option disabled value="">----------</option> <?php for ($i = 0; $i < count($views); $i++) { echo '<option value="'; if ($views[$i]['cal_view_type'] == 'W') { echo "view_w.php?"; } elseif ($views[$i]['cal_view_type'] == 'D') { echo "view_d.php?"; } elseif ($views[$i]['cal_view_type'] == 'V') { echo "view_v.php?"; } elseif ($views[$i]['cal_view_type'] == 'T') { echo "view_t.php?timeb=0&"; } elseif ($views[$i]['cal_view_type'] == 'M') { echo "view_m.php?"; } elseif ($views[$i]['cal_view_type'] == 'L') { echo "view_l.php?"; } elseif ($views[$i]['cal_view_type'] == 'S') { echo "view_t.php?timeb=1&"; } else { echo "view_m.php?"; } echo "id=" . $views[$i]['cal_view_id']; if (!empty($thisdate)) { echo "&date={$thisdate}"; } echo '">' . $views[$i]['cal_name'] . '</option>'; } echo '</select>'; } else { echo '<select disabled="disabled"><option>Vos vues</option></select>'; } if ($login != '__public__') { echo '<img src="images_haras/separation_haut.gif" alt="" height="19" width="13" align="absmiddle" border="0"><a class="grisorange" href="import.php" title="Importez et exporter votre calendrier">Import / Export</a>'; } else { echo '<img src="images_haras/separation_haut.gif" alt="" height="19" width="13" align="absmiddle" border="0">Import / Export'; } ?> <img src="images_haras/separation_haut.gif" alt="" height="19" width="13" align="absmiddle" border="0"><a class="grisorange" href="#" onclick="window.open ( 'help_index.php', 'cal_help', 'dependent,menubar,scrollbars,height=400,width=400,innerHeight=420,outerWidth=420' );" onmouseover="window.status='Aide'" title="Obtenir de l'aide">Aide</a> <? if ( $is_admin ) { echo '<img src="images_haras/separation_haut.gif" alt="" height="19" width="13" align="absmiddle" border="0"><a class="grisorange" href="adminhome.php" title="Accéder À l\'espace d\'administration">Admin</a>'; } else { echo '<img src="images_haras/separation_haut.gif" alt="" height="19" width="13" align="absmiddle" border="0">Admin'; } ?> </span> </form> </div> <div style="top:45px;left:400px;position:absolute;font-size:12px;"> <div id="menu"> <?php $can_add = $readonly == "N" || $is_admin == "Y"; if ($public_access == "Y" && $public_access_can_add != "Y" && $login == "__public__") { $can_add = false; } if (!empty($GLOBALS['STARTVIEW'])) { $mycal = $GLOBALS['STARTVIEW'] . ".php"; } else { $mycal = "index.php"; } if ($single_user != "Y") { if (!empty($user) && $user != $login) { echo "<a title=\"Retour à mon agenda\" style=\"font-weight:bold;\" href=\"{$mycal}\">" . translate("Back to My Calendar") . "</a>"; } else { echo "<a title=\"" . translate("My Calendar") . "\" style=\"font-weight:bold;\" href=\"{$mycal}\">" . translate("My Calendar") . "</a>\n"; } if (!empty($user) && $user != $login) { $todayURL .= '?user='******'list_unapproved.php'; if ($is_nonuser_admin) { $url .= "?user={$user}"; } echo " | <a title=\"Permet de valider les évènement en attente d'approbation\" style=\"font-weight:bold;\" href=\"{$url}\">" . translate("Unapproved Events") . "</a>\n"; } if ($login == "__public__" && $public_access_others != "Y") { // don't allow them to see other people's calendar } else { if ($allow_view_other == "Y" || $is_admin) { //echo " | <a title=\"" . translate("Another User's Calendar") . "\" href=\"select_user.php\">" . translate("Another User's Calendar") . "</a>\n"; } } } else { echo "<a title=\"" . translate("My Calendar") . "\" style=\"font-weight:bold;\" href=\"{$mycal}\">" . translate("My Calendar") . "</a>\n"; echo " | <a title=\"" . translate("Today") . "\" style=\"font-weight:bold;\" href=\"{$todayURL}\">" . translate("Today") . "</a>\n"; } // only display some links if we're viewing our own calendar. if (empty($user) || $user == $login) { if ($can_add) { echo " | <a title=\"Ajouter un évènement\" style=\"font-weight:bold;\" href=\"edit_entry.php"; if (!empty($thisyear)) { print "?year={$thisyear}"; if (!empty($thismonth)) { print "&month={$thismonth}"; } if (!empty($thisday)) { print "&day={$thisday}"; } } echo "\">" . translate("Add New Entry") . "</a>\n"; } } if (empty($user) || $user == $login) { if ($login != '__public__') { echo " | <a title=\"Déconnexion\" style=\"font-weight:bold;\" href=\"login.php\">Déconnexion</a>\n"; } else { echo " | <a title=\"Déconnexion\" style=\"font-weight:bold;\" href=\"login.php\">Connexion</a>\n"; } } ?> </div> </div> <div style="padding-top:100px;"> <?php } }
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; }
function get_ids($sql) { $ids = array(); $res = dbi_query($sql); if ($res) { while ($row = dbi_fetch_row($res)) { $ids[] = $row['cal_id']; } } 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 lcs_import_data($data, $overwrite, $type) { global $login, $count_con, $count_suc, $error_num, $ImportType; global $single_user, $single_user_login, $numDeleted, $errormsg; global $ALLOW_CONFLICTS, $ALLOW_CONFLICT_OVERRIDE, $H2COLOR; global $calUser, $sqlLog, $message; $oldUIDs = array(); $oldIds = array(); $firstEventId = $count_suc = 0; $ImportType = 'ICAL'; // $importId = -1; $importId = 1; $subType = ''; if ($type == 'icalclient') { $ImportType = 'ICAL'; $type = 'ical'; $subType = 'icalclient'; } else { if ($type == 'remoteics' || $type == 'hcal') { $ImportType = 'RMTICS'; $type = 'rmtics'; $subType = 'remoteics'; } } if ($overwrite) { //on efface tous les evenement edt du user //recherche du cat_id $res = dbi_execute('SELECT cat_id FROM webcal_categories WHERE cat_owner = ? AND cat_name = ?', array($login, 'EDT')); if ($res) { if ($row = dbi_fetch_row($res)) { $id_cat = $row[0]; } dbi_free_result($res); } //recherche des cal_id $res = dbi_execute('SELECT cal_id FROM webcal_entry_categories WHERE cat_id = ' . $id_cat); if ($res) { $i = 0; while ($row = dbi_fetch_row($res)) { $id_cals[$i] = $row[0]; $i++; } dbi_free_result($res); } $message .= 'Evénements supprimés : ' . count($id_cals) . '<br />'; if (isset($id_cals)) { foreach ($id_cals as $id_cals) { // Delete event for this user dbi_execute('DELETE FROM webcal_entry WHERE cal_id = ?', array($id_cals)); dbi_execute('DELETE FROM webcal_entry_user WHERE cal_id = ?', array($id_cals)); dbi_execute('DELETE FROM webcal_import_data WHERE cal_id = ?', array($id_cals)); dbi_execute('DELETE FROM webcal_entry_log WHERE cal_entry_id = ?', array($id_cals)); } } dbi_execute('DELETE FROM webcal_entry_categories WHERE cat_id = ' . $id_cat); } // Generate a unique import id $res = dbi_execute('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 ( ?, NULL, ?, ?, ? )'; if (!dbi_execute($sql, array($importId, date('Ymd'), $type, $login))) { $errormsg = db_error(); $my_errormsg .= db_error(); return; } if (!is_array($data)) { return false; } foreach ($data as $Entry) { // do_debug ( "Entry Array " . print_r ( $Entry, true ) ); $participants[0] = $calUser; // $participants[0] = $login; $Entry['start_date'] = gmdate('Ymd', $Entry['StartTime']); $Entry['start_time'] = gmdate('His', $Entry['StartTime']); $Entry['end_date'] = gmdate('Ymd', $Entry['EndTime']); $Entry['end_time'] = gmdate('His', $Entry['EndTime']); // not in icalclient if ($overwrite && !empty($Entry['UID'])) { if (empty($oldUIDs[$Entry['UID']])) { $oldUIDs[$Entry['UID']] = 1; } else { $oldUIDs[$Entry['UID']]++; } } // Check for untimed if (!empty($Entry['Untimed']) && $Entry['Untimed'] == 1) { $Entry['start_time'] = 0; } // Check for all day if (!empty($Entry['AllDay']) && $Entry['AllDay'] == 1) { $Entry['start_time'] = 0; $Entry['end_time'] = 0; $Entry['Duration'] = '1440'; } $priority = !empty($Entry['Priority']) ? $Entry['Priority'] : 5; if (!empty($Entry['Completed'])) { $cal_completed = substr($Entry['Completed'], 0, 8); } else { $cal_completed = ''; } if (strlen($cal_completed < 8)) { $cal_completed = ''; } $months = !empty($Entry['Repeat']['ByMonth']) ? $Entry['Repeat']['ByMonth'] : ''; $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. // NOTE:(cek) commented out 'publish'. Will not work if event // was originally created from importing. if (!empty($Entry['UID'])) { $res = dbi_execute('SELECT wid.cal_id ' . 'FROM webcal_import_data wid, webcal_entry_user weu WHERE ' . 'wid.cal_id = weu.cal_id AND ' . 'weu.cal_login = ? AND ' . 'cal_external_id = ?', array($login, $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 } } } } if (!$updateMode && $subType != 'icalclient' && $subType != 'remoteics') { // first check for any schedule conflicts if ($ALLOW_CONFLICT_OVERRIDE == 'N' && $ALLOW_CONFLICTS == 'N' && $Entry['Duration'] != 0) { $ex_days = array(); if (!empty($Entry['Repeat']['Exceptions'])) { foreach ($Entry['Repeat']['Exceptions'] as $ex_date) { $ex_days[] = gmdate('Ymd', $ex_date); } } $inc_days = array(); if (!empty($Entry['Repeat']['Inclusions'])) { foreach ($Entry['Repeat']['Inclusions'] as $inc_date) { $inc_days[] = gmdate('Ymd', $inc_date); } } // test if all Repeat Elements exist $rep_interval = !empty($Entry['Repeat']['Interval']) ? $Entry['Repeat']['Interval'] : ''; $rep_bymonth = !empty($Entry['Repeat']['ByMonth']) ? $Entry['Repeat']['ByMonth'] : ''; $rep_byweekno = !empty($Entry['Repeat']['ByWeekNo']) ? $Entry['Repeat']['ByWeekNo'] : ''; $rep_byyearday = !empty($Entry['Repeat']['ByYearDay']) ? $Entry['Repeat']['ByYearDay'] : ''; $rep_byweekno = !empty($Entry['Repeat']['ByWeekNo']) ? $Entry['Repeat']['ByWeekNo'] : ''; $rep_byweekno = !empty($Entry['Repeat']['ByWeekNo']) ? $Entry['Repeat']['ByWeekNo'] : ''; $rep_byweekno = !empty($Entry['Repeat']['ByWeekNo']) ? $Entry['Repeat']['ByWeekNo'] : ''; $rep_bymonthday = !empty($Entry['Repeat']['ByMonthDay']) ? $Entry['Repeat']['ByMonthDay'] : ''; $rep_byday = !empty($Entry['Repeat']['ByDay']) ? $Entry['Repeat']['ByDay'] : ''; $rep_bysetpos = !empty($Entry['Repeat']['BySetPos']) ? $Entry['Repeat']['BySetPos'] : ''; $rep_count = !empty($Entry['Repeat']['Count']) ? $Entry['Repeat']['Count'] : ''; $rep_until = !empty($Entry['Repeat']['Until']) ? $Entry['Repeat']['Until'] : ''; $rep_wkst = !empty($Entry['Repeat']['Wkst']) ? $Entry['Repeat']['Wkst'] : ''; $dates = get_all_dates($Entry['StartTime'], RepeatType($Entry['Repeat']['Frequency']), $rep_interval, array($rep_bymonth, $rep_byweekno, $rep_byyearday, $rep_bymonthday, $rep_byday, $rep_bysetpos), $rep_count, $rep_until, $rep_wkst, $ex_days, $inc_days); $overlap = check_for_conflicts($dates, $Entry['Duration'], $Entry['StartTime'], $participants, $login, 0); } } //end $subType != 'icalclient' && != 'remoteics' if (empty($error)) { if (!$updateMode) { // Add the Event $res = dbi_execute('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; } } // not in icalclient if ($firstEventId == 0) { $firstEventId = $id; } $names = array(); $values = array(); $names[] = 'cal_id'; $values[] = $id; if (!$updateMode) { $names[] = 'cal_create_by'; $values[] = $ImportType == 'RMTICS' ? $calUser : $login; } $names[] = 'cal_date'; $values[] = $Entry['start_date']; $names[] = 'cal_time'; $values[] = !empty($Entry['Untimed']) && $Entry['Untimed'] == 1 ? '-1' : $Entry['start_time']; $names[] = 'cal_mod_date'; $values[] = gmdate('Ymd'); $names[] = 'cal_mod_time'; $values[] = gmdate('Gis'); $names[] = 'cal_duration'; $values[] = sprintf("%d", $Entry['Duration']); $names[] = 'cal_priority'; $values[] = $priority; if (!empty($Entry['Class'])) { $names[] = 'cal_access'; $entryclass = $Entry['Class']; $values[] = $entryclass; } if (!empty($Entry['Location'])) { $names[] = 'cal_location'; $entryclass = $Entry['Location']; $values[] = $entryclass; } if (!empty($Entry['URL'])) { $names[] = 'cal_url'; $entryclass = $Entry['URL']; $values[] = $entryclass; } if (!empty($cal_completed)) { $names[] = 'cal_completed'; $values[] = $cal_completed; } if (!empty($Entry['Due'])) { $names[] = 'cal_due_date'; $values[] = sprintf("%d", substr($Entry['Due'], 0, 8)); $names[] = 'cal_due_time'; $values[] = sprintf("%d", substr($Entry['Due'], 9, 6)); } if (!empty($Entry['CalendarType'])) { $names[] = 'cal_type'; if ($Entry['CalendarType'] == 'VEVENT' || $Entry['CalendarType'] == 'VFREEBUSY') { $values[] = !empty($Entry['Repeat']) ? 'M' : 'E'; } else { if ($Entry['CalendarType'] == 'VTODO') { $values[] = !empty($Entry['Repeat']) ? 'N' : 'T'; } } } if (strlen($Entry['Summary']) == 0) { $Entry['Summary'] = translate('Unnamed Event'); } if (empty($Entry['Description'])) { $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']); // added these to try and compensate for Sunbird escaping html $Entry['Description'] = str_replace("\\;", ";", $Entry['Description']); $Entry['Description'] = str_replace("\\,", ",", $Entry['Description']); // Mozilla will send this goofy string, so replace it with real html $Entry['Description'] = str_replace('=0D=0A=', '<br />', $Entry['Description']); $Entry['Description'] = str_replace('=0D=0A', '', $Entry['Description']); // Allow option to not limit description size // This will only be practical for mysql and MSSQL/Postgres as // these do not have limits on the table definition // TODO Add this option to preferences if (empty($LIMIT_DESCRIPTION_SIZE) || $LIMIT_DESCRIPTION_SIZE == 'Y') { // 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']; // do_debug ( "descr='" . $Entry['Description'] . "'" ); $sql_params = array(); $namecnt = count($names); if ($updateMode) { $sql = 'UPDATE webcal_entry SET '; for ($f = 0; $f < $namecnt; $f++) { if ($f > 0) { $sql .= ', '; } $sql .= $names[$f] . ' = ?'; $sql_params[] = $values[$f]; } $sql .= ' WHERE cal_id = ?'; $sql_params[] = $id; } else { $string_names = ''; $string_values = ''; for ($f = 0; $f < $namecnt; $f++) { if ($f > 0) { $string_names .= ', '; $string_values .= ', '; } $string_names .= $names[$f]; $string_values .= '?'; $sql_params[] = $values[$f]; } $sql = 'INSERT INTO webcal_entry ( ' . $string_names . ' ) VALUES ( ' . $string_values . ' )'; } //do_debug ( date("H:i:s")." entry SQL> $sql" ); if (empty($error)) { if (!dbi_execute($sql, $sql_params)) { $error .= db_error(); // do_debug ( $error ); break; } else { if ($ImportType == 'RMTICS') { $count_suc++; } } } // log add/update if ($Entry['CalendarType'] == 'VTODO') { activity_log($id, $login, $calUser, $updateMode ? LOG_UPDATE_T : LOG_CREATE_T, 'Import from ' . $ImportType); } else { activity_log($id, $login, $calUser, $updateMode ? LOG_UPDATE : LOG_CREATE, 'Import from ' . $ImportType); } // not in icalclient if ($single_user == 'Y') { $participants[0] = $single_user_login; } // Now add to webcal_import_data if (!$updateMode) { // only in icalclient // add entry to webcal_import and webcal_import_data $uid = generate_uid($id); $uid = empty($Entry['UID']) ? $uid : $Entry['UID']; if ($importId < 0) { $importId = create_import_instance(); } if ($ImportType == 'PALMDESKTOP') { $sql = 'INSERT INTO webcal_import_data ( cal_import_id, cal_id, cal_login, cal_import_type, cal_external_id ) VALUES ( ?, ?, ?, ?, ? )'; $sqlLog .= $sql . "<br />\n"; if (!dbi_execute($sql, array($importId, $id, $calUser, 'palm', $Entry['RecordID']))) { $error = db_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 ( ?, ?, ?, ?, ? )'; $sqlLog .= $sql . "<br />\n"; if (!dbi_execute($sql, array($importId, $id, $calUser, 'vcal', $uid))) { $error = db_error(); break; } } else { if ($ImportType == 'ICAL') { $uid = empty($Entry['UID']) ? null : $Entry['UID']; // This may cause problems if (strlen($uid) > 200) { $uid = substr($uid, 0, 200); } $sql = 'INSERT INTO webcal_import_data ( cal_import_id, cal_id, cal_login, cal_import_type, cal_external_id ) VALUES ( ?, ?, ?, ?, ? )'; $sqlLog .= $sql . "<br />\n"; if (!dbi_execute($sql, array($importId, $id, $calUser, 'ical', $uid))) { $error = db_error(); break; } } } } } // Now add participants $status = !empty($Entry['Status']) ? $Entry['Status'] : 'A'; $percent = !empty($Entry['Percent']) ? $Entry['Percent'] : '0'; if (!$updateMode) { $sql = 'INSERT INTO webcal_entry_user ( cal_id, cal_login, cal_status, cal_percent ) VALUES ( ?, ?, ?, ? )'; //( date("H:i:s")."add part SQL> $sql" ); if (!dbi_execute($sql, array($id, $participants[0], $status, $percent))) { $error = db_error(); // do_debug ( "Error: " . $error ); break; } } else { // ( date("H:i:s")." up part SQL> $sql" ); $sql = 'UPDATE webcal_entry_user SET cal_status = ? WHERE cal_id = ?'; if (!dbi_execute($sql, array($status, $id))) { $error = db_error(); // do_debug ( "Error: " . $error ); break; } // update percentage only if set if ($percent != '') { $sql = 'UPDATE webcal_entry_user SET cal_percent = ? WHERE cal_id = ?'; if (!dbi_execute($sql, array($percent, $id))) { $error = db_error(); // do_debug ( "Error: " . $error ); break; } } dbi_execute('DELETE FROM webcal_entry_categories WHERE cal_id = ?', array($id)); } // update Categories if (!empty($Entry['Categories'])) { $cat_ids = $Entry['Categories']; $cat_order = 1; foreach ($cat_ids as $cat_id) { $sql = 'INSERT INTO webcal_entry_categories ( cal_id, cat_id, cat_order, cat_owner ) VALUES ( ?, ?, ?, ? )'; if (!dbi_execute($sql, array($id, $cat_id, $cat_order++, $login))) { $error = db_error(); // do_debug ( "Error: " . $error ); break; } } } // Add repeating info if ($updateMode) { // remove old repeating info dbi_execute('DELETE FROM webcal_entry_repeats WHERE cal_id = ?', array($id)); dbi_execute('DELETE FROM webcal_entry_repeats_not WHERE cal_id = ?', array($id)); } $names = array(); $values = array(); if (!empty($Entry['Repeat']['Frequency'])) { $names[] = 'cal_id'; $values[] = $id; $names[] = 'cal_type'; $values[] = RepeatType($Entry['Repeat']['Frequency']); $names[] = 'cal_frequency'; $values[] = !empty($Entry['Repeat']['Interval']) ? $Entry['Repeat']['Interval'] : 1; if (!empty($Entry['Repeat']['ByMonth'])) { $names[] = 'cal_bymonth'; $values[] = $Entry['Repeat']['ByMonth']; } if (!empty($Entry['Repeat']['ByMonthDay'])) { $names[] = 'cal_bymonthday'; $values[] = $Entry['Repeat']['ByMonthDay']; } if (!empty($Entry['Repeat']['ByDay'])) { $names[] = 'cal_byday'; $values[] = $Entry['Repeat']['ByDay']; } if (!empty($Entry['Repeat']['BySetPos'])) { $names[] = 'cal_bysetpos'; $values[] = $Entry['Repeat']['BySetPos']; } if (!empty($Entry['Repeat']['ByWeekNo'])) { $names[] = 'cal_byweekno'; $values[] = $Entry['Repeat']['ByWeekNo']; } if (!empty($Entry['Repeat']['ByYearDay'])) { $names[] = 'cal_byyearday'; $values[] = $Entry['Repeat']['ByYearDay']; } if (!empty($Entry['Repeat']['Wkst'])) { $names[] = 'cal_wkst'; $values[] = $Entry['Repeat']['Wkst']; } if (!empty($Entry['Repeat']['Count'])) { $names[] = 'cal_count'; $values[] = $Entry['Repeat']['Count']; } if (!empty($Entry['Repeat']['Until'])) { $REND = localtime($Entry['Repeat']['Until']); if (!empty($Entry['Repeat']['Count'])) { // Get end time from DTSTART $RENDTIME = $Entry['start_time']; } else { $RENDTIME = gmdate('His', $Entry['Repeat']['Until']); } $names[] = 'cal_end'; $values[] = gmdate('Ymd', $Entry['Repeat']['Until']); // if ( $RENDTIME != '000000' ) { $names[] = 'cal_endtime'; $values[] = $RENDTIME; // } } $string_names = ''; $string_values = ''; $sql_params = array(); $namecnt = count($names); for ($f = 0; $f < $namecnt; $f++) { if ($f > 0) { $string_names .= ', '; $string_values .= ', '; } $string_names .= $names[$f]; $string_values .= '?'; $sql_params[] = $values[$f]; } $sql = 'INSERT INTO webcal_entry_repeats ( ' . $string_names . ' ) VALUES ( ' . $string_values . ' )'; if (!dbi_execute($sql, $sql_params)) { $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 = gmdate('Ymd', $ex_date); $sql = 'INSERT INTO webcal_entry_repeats_not ( cal_id, cal_date, cal_exdate ) VALUES ( ?,?,? )'; if (!dbi_execute($sql, array($id, $ex_date, 1))) { $error = 'Unable to add to webcal_entry_repeats_not: ' . dbi_error() . "<br /><br />\n<b>SQL:</b> {$sql}"; break; } } } // Repeating Inclusions... if (!empty($Entry['Repeat']['Inclusions'])) { foreach ($Entry['Repeat']['Inclusions'] as $inc_date) { $inc_date = gmdate('Ymd', $inc_date); $sql = 'INSERT INTO webcal_entry_repeats_not ( cal_id, cal_date, cal_exdate ) VALUES ( ?,?,? )'; if (!dbi_execute($sql, array($id, $inc_date, 0))) { $error = 'Unable to add to webcal_entry_repeats_not: ' . dbi_error() . "<br /><br />\n<b>SQL:</b> {$sql}"; break; } } } } // End Repeat // Add Alarm info if ($updateMode) { dbi_execute('DELETE FROM webcal_reminders WHERE cal_id = ?', array($id)); } if (!empty($Entry['AlarmSet']) && $Entry['AlarmSet'] == 1) { $names = array(); $values = array(); $names[] = 'cal_id'; $values[] = $id; if (!empty($Entry['ADate'])) { $names[] = 'cal_date'; $values[] = $Entry['ADate']; } if (!empty($Entry['AOffset'])) { $names[] = 'cal_offset'; $values[] = $Entry['AOffset']; } if (!empty($Entry['ADuration'])) { $names[] = 'cal_duration'; $values[] = $Entry['ADuration']; } if (!empty($Entry['ARepeat'])) { $names[] = 'cal_repeats'; $values[] = $Entry['ARepeat']; } if (!empty($Entry['ABefore'])) { $names[] = 'cal_before'; $values[] = $Entry['ABefore']; } if (!empty($Entry['ARelated'])) { $names[] = 'cal_related'; $values[] = $Entry['ARelated']; } if (!empty($Entry['AAction'])) { $names[] = 'cal_action'; $values[] = $Entry['AAction']; } $string_names = ''; $string_values = ''; $sql_params = array(); $namecnt = count($names); for ($f = 0; $f < $namecnt; $f++) { if ($f > 0) { $string_names .= ', '; $string_values .= ', '; } $string_names .= $names[$f]; $string_values .= '?'; $sql_params[] = $values[$f]; } $sql = 'INSERT INTO webcal_reminders (' . $string_names . ' ) ' . ' VALUES ( ' . $string_values . ' )'; if (!dbi_execute($sql, $sql_params)) { $error = db_error(); } } } // here to end not in icalclient if ($subType != 'icalclient' && $subType != 'remoteics') { if (!empty($error) && empty($overlap)) { $error_num++; echo print_error($error) . "\n<br />\n"; } if ($Entry['Duration'] > 0) { $time = trim(display_time('', 0, $Entry['StartTime']) . '-' . display_time('', 2, $Entry['EndTime'])); } // Conflicting if (!empty($overlap)) { $message .= '<b><h2>' . translate('Scheduling Conflict') . ': '; $count_con++; $message .= '</h2></b>'; $dd = date('m-d-Y', $Entry['StartTime']); $Entry['Summary'] = str_replace("''", "'", $Entry['Summary']); $Entry['Summary'] = str_replace("'", "\\'", $Entry['Summary']); $message .= htmlspecialchars($Entry['Summary']); $message .= ' (' . $dd; if (!empty($time)) { $message .= ' ' . $time; } $message .= ")<br />\n"; etranslate('conflicts with the following existing calendar entries'); $message .= ":<ul>\n" . $overlap . "</ul>\n"; } else { // No Conflict if ($count_suc == 0) { //echo '<b><h2>' . //translate ( 'Event Imported' ) . ":</h2></b><br />\n"; } $count_suc++; $dd = $Entry['start_date']; } // Reset Variables $overlap = $error = $dd = $time = ''; } } }
function export_vcal($id) { header("Content-Type: text/x-vcalendar"); //header ( "Content-Type: text/plain" ); $res = export_get_event_entry($id); $entry_array = array(); $count = 0; while ($entry = dbi_fetch_row($res)) { $entry_array[$count++] = $entry; } dbi_free_result($res); if (count($entry_array) > 0) { echo "BEGIN:VCALENDAR\r\n"; echo "{$prodid}\r\n"; echo "VERSION:1.0\r\n"; /* Time Zone $tzdate = mktime(); $gmdate = gmmktime(); $tzdiff = ($gmdate - $tzdate) / 60 / 60; //FIXME only hours are represented $tz = sprintf("%02d", $tzdiff); echo "TZ:"; echo ($tzdiff >= 0) ? "+" : "-"; echo "$tz\r\n"; */ } while (list($key, $row) = each($entry_array)) { $uid = $row[0]; $export_uid = generate_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) */ $export_uid = "UID:{$export_uid}"; $array = export_fold_lines($export_uid); while (list($key, $value) = each($array)) { echo "{$value}\r\n"; } /* SUMMARY of the event (folded to 76 char) */ $name = preg_replace("/\\\\/", "\\\\\\", $name); // ?? $name = "SUMMARY;ENCODING=QUOTED-PRINTABLE:" . $name; $array = export_fold_lines($name, "quotedprintable"); while (list($key, $value) = each($array)) { echo "{$value}\r\n"; } /* DESCRIPTION if any (folded to 76 char) */ if ($description != "") { $description = preg_replace("/\\\\/", "\\\\\\", $description); // ?? $description = "DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" . $description; $array = export_fold_lines($description, "quotedprintable"); while (list($key, $value) = each($array)) { echo "{$value}\r\n"; } } //end if ($description != "") /* CLASS either "PRIVATE" or "PUBLIC" (the default) */ if ($access == "R") { echo "CLASS:PRIVATE\r\n"; } else { echo "CLASS:PUBLIC\r\n"; } // ATTENDEE of the event $attendee = export_get_attendee($row[0], "vcal"); for ($i = 0; $i < count($attendee); $i++) { $attendee[$i] = export_fold_lines($attendee[$i], "quotedprintable"); while (list($key, $value) = each($attendee[$i])) { echo "{$value}\r\n"; } } /* Time - all times are utc */ export_time($date, $duration, $time, "vcal"); export_recurrence_vcal($uid, $date); // FIXME: handle alarms export_alarm_vcal($uid, $date, $time); /* Goodbye event */ echo "END:VEVENT\n"; } //end while (list($key,$row) = each($entry_array)) if (count($entry_array) > 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; }
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; } }
function get_plugin_list($include_disabled = false) { global $error; // First get list of available plugins. $res = dbi_execute('SELECT cal_setting FROM webcal_config WHERE cal_setting LIKE \'%.plugin_status\' ' . (!$include_disabled ? 'AND cal_value = \'Y\' ' : '') . 'ORDER BY cal_setting'); $plugins = array(); if ($res) { while ($row = dbi_fetch_row($res)) { $e = explode('.', $row[0]); if ($e[0] != '') { $plugins[] = $e[0]; } } dbi_free_result($res); } else { $error = db_error(true); } if (count($plugins) == 0) { $plugins[] = 'webcalendar'; } return $plugins; }
/** * 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 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 = '******'"); }