<?php
/* $Id: edit_nonusers_handler.php,v 1.28.2.6 2008/03/04 01:19:05 cknudsen Exp $ */
include_once 'includes/init.php';
load_user_layers ();
if ( ! $is_admin ) {
echo print_not_auth ( 3, true );
echo "</body>\n</html>";
exit;
}
$error = '';
$save = getPostValue ( 'Save' );
$add = getPostValue ( 'Add' );
$delete = getPostValue ( 'delete' );
$nid = getPostValue ( 'nid' );
$nfirstname = getPostValue ( 'nfirstname' );
$nlastname = getPostValue ( 'nlastname' );
$nadmin = getPostValue ( 'nadmin' );
$old_admin = getPostValue ( 'old_admin' );
$ispublic = getPostValue ( 'ispublic' );
if ( empty ( $ispublic ) ) $ispublic = 'N';
if ( ! empty ( $delete ) ) {
// delete this nonuser calendar
// 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 ) {
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, $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 ) );
// Delete any layers other users may have that point to this user.
dbi_execute ( 'DELETE FROM webcal_user_layers WHERE cal_layeruser = ?',
array ( $nid ) );
// Delete any UAC calendar access entries for this user.
dbi_execute ( 'DELETE FROM webcal_access_user WHERE cal_login = ?
OR cal_other_user = ?', array ( $nid, $nid ) );
// Delete any UAC function access entries for this user.
dbi_execute ( 'DELETE FROM webcal_access_function WHERE cal_login = ?',
array ( $nid ) );
// Delete user
if ( ! dbi_execute ( 'DELETE FROM webcal_nonuser_cals WHERE cal_login = ?',
array ( $nid ) ) )
$error = db_error ();
} else if ( ! empty ( $save ) ) {
// Updating
$query_params = array ();
$sql = 'UPDATE webcal_nonuser_cals SET ';
if ($nlastname) {
$sql .= ' cal_lastname = ?, ';
$query_params[] = $nlastname;
}
if ($nfirstname) {
$sql .= ' cal_firstname = ?, ';
$query_params[] = $nfirstname;
}
if ( $ispublic ) {
$sql .= ' cal_is_public = ?, ';
$query_params[] = $ispublic;
}
$query_params[] = $nadmin;
$query_params[] = $nid;
if ( ! dbi_execute ( $sql . 'cal_admin = ? WHERE cal_login = ?',
$query_params ) )
$error = db_error ();
} else if ( ! empty ( $add ) ){
// Adding
if ( preg_match ( '/^[\w]+$/', $nid ) ) {
$nid = $NONUSER_PREFIX.$nid;
if ( ! dbi_execute ( 'INSERT INTO webcal_nonuser_cals ( cal_login,
cal_firstname, cal_lastname, cal_admin, cal_is_public )
VALUES ( ?, ?, ?, ?, ? )',
array ( $nid, $nfirstname, $nlastname, $nadmin, $ispublic ) ) ) {
$error = db_error ();
}
} else {
$error = translate ( 'Calendar ID' ).' '.translate ( 'word characters only' ).'.';
}
//Add entry in UAC access table for new admin and remove for of admin
//first delete any record for this user/nuc combo
dbi_execute ( 'DELETE FROM webcal_access_user WHERE cal_login = ?
AND cal_other_user = ?', array ( $nadmin, $nid ) );
if ( ! dbi_execute ( 'INSERT INTO webcal_access_user ( cal_login,
cal_other_user, cal_can_view, cal_can_edit, cal_can_approve, cal_can_invite,
cal_can_email, cal_see_time_only ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )',
array ( $nadmin, $nid, 511, 511, 511, 'Y', 'Y', 'N' ) ) ) {
die_miserable_death ( translate ( 'Database error' ) . ': ' . dbi_error () );
}
// Delete old admin...
//TODO Make this an optional step
if ( ! empty ( $old_admin ) )
dbi_execute ( 'DELETE FROM webcal_access_user WHERE cal_login = ?
AND cal_other_user = ?', array ( $old_admin, $nid ) );
}
echo error_check('users.php?tab=nonusers', false);
?>