0byt3m1n1
Path:
/
data
/
applications
/
aps.bak
/
webcalendar
/
1.2.3-0
/
standard
/
htdocs
/
[
Home
]
File: purge.php
<?php /* $Id: purge.php,v 1.65.2.5 2008/04/04 19:57:15 umcesrjones Exp $ * * Description: * Purge events page and handler. * When an event is deleted from a user's calendar, it is marked * as deleted (webcal_entry_user.cal_status = 'D'). This page * will actually clean out the database rather than just mark an * event as deleted. * * Security: * Events will only be deleted if they were created by the selected * user. Events where the user was a participant (but not did not * create) will remain unchanged. * */ include_once 'includes/init.php'; // Set this to true do show the SQL at the bottom of the page $purgeDebug = false; $sqlLog = ''; if ( ! $is_admin ) { // must be admin... do_redirect ( 'index.php' ); exit; } $ALL = 0; $previewStr = translate ( 'Preview' ); $allStr = translate ( 'All' ); $purgingStr = translate ( 'Purging events for' ); $deleteStr = translate ( 'Delete' ); $delete = getPostValue ( 'delete' ); $do_purge = false; if ( ! empty ( $delete ) ) { $do_purge = true; } $purge_all = getPostValue ( 'purge_all' ); $purge_deleted = getPostValue ( 'purge_deleted' ); $end_year = getPostValue ( 'end_year' ); $end_month = getPostValue ( 'end_month' ); $end_day = getPostValue ( 'end_day' ); $username = getPostValue ( 'username' ); $preview = getPostValue ( 'preview' ); $preview = ( empty ( $preview ) ? false : true ); $INC = array ( 'js/visible.php' ); print_header ( $INC ); ?> <table summary=""> <tr><td style="vertical-align:top; width:50%;"> <?php echo '<h2>' . translate ( 'Delete Events' ); if ( $preview ) echo '[ ' . $previewStr . ']'; echo "</h2>\n"; echo display_admin_link (); if ( $do_purge ) { if ( $preview ) echo '<h2> [' . $previewStr . '] ' . $purgingStr . " $username...</h2>\n"; else echo '<h2>' . $purgingStr . ": $username</h2>\n"; $end_date = sprintf ( "%04d%02d%02d", $end_year, $end_month, $end_day ); $ids = $tail = ''; if ( $purge_deleted == 'Y' ) $tail = " AND weu.cal_status = 'D' "; if ( $purge_all == 'Y' ) { if ( $username == 'ALL' ) { $ids = array ( 'ALL' ); } else { $ids = get_ids ( 'SELECT cal_id FROM webcal_entry ' . " WHERE cal_create_by = '$username' $tail" ); } } elseif ( $end_date ) { if ( $username != 'ALL' ) { $tail = " AND we.cal_create_by = '$username' $tail"; } else { $tail = ''; $ALL = 1; // Need this to tell get_ids to ignore participant check } $E_ids = get_ids ( 'SELECT we.cal_id FROM webcal_entry we, webcal_entry_user weu ' . "WHERE cal_type = 'E' AND cal_date < '$end_date' $tail", $ALL ); $M_ids = get_ids ( 'SELECT DISTINCT(we.cal_id) FROM webcal_entry we, webcal_entry_user weu, webcal_entry_repeats wer WHERE we.cal_type = \'M\' AND we.cal_id = wer.cal_id AND we.cal_id = wer.cal_id ' . "AND cal_end IS NOT NULL AND cal_end < '$end_date' $tail", $ALL ); $ids = array_merge ( $E_ids, $M_ids ); } //echo "event ids: <ul><li>" . implode ( "</li><li>", $ids ) . "</li></ul>\n"; if ( count ( $ids ) > 0 ) { purge_events ( $ids ); } else { echo translate ( 'None' ); } echo '<h2>...' . translate ( 'Finished' ) . ".</h2>\n"; ?> <form><input type="button" value="<?php etranslate ( 'Back' )?>" onclick="history.back()" /></form ><?php if ( $purgeDebug ) { echo '<div style="border: 1px solid #000;background-color: #ffffff;"><tt>' . $sqlLog . '</tt></div>' ."\n"; } } else { ?> <form action="purge.php" method="post" name="purgeform" id="purgeform"> <table> <tr><td><label for="user"> <?php echo translate ( 'User' );?>:</label></td> <td><select name="username"> <?php $userlist = get_my_users (); if ($NONUSER_ENABLED == 'Y' ) { $nonusers = get_nonuser_cals (); $userlist = ($NONUSER_AT_TOP == 'Y' ? array_merge ($nonusers, $userlist) : array_merge ($userlist, $nonusers)); } for ( $i = 0, $cnt = count ( $userlist ); $i < $cnt; $i++ ) { echo '<option value="' . $userlist[$i]['cal_login'] . '"'; if ( $login == $userlist[$i]['cal_login'] ) echo ' selected="selected"'; echo '>' . $userlist[$i]['cal_fullname'] . "</option>\n"; } ?> <option value="ALL"><?php echo $allStr ?></option> </select> </td></tr> <tr><td><label for="purge_all"> <?php etranslate ( 'Check box to delete ALL events for a user' )?>:</label></td> <td valign="bottom"> <input type="checkbox" name="purge_all" value="Y" id="purge_all" onclick="toggle_datefields( 'dateArea', this );" /> </td></tr> <tr id="dateArea"><td><label> <?php etranslate ( 'Delete all events before' );?>:</label></td><td> <?php echo date_selection ( 'end_', date ( 'Ymd' ) ) ?> </td></tr> <tr><td><label for="purge_deleted"> <?php etranslate ( 'Purge deleted only' )?>:</label></td> <td valign="bottom"> <input type="checkbox" name="purge_deleted" value="Y" /> </td></tr> <tr><td><label for="preview"> <?php etranslate ( 'Preview delete' )?>:</label></td> <td valign="bottom"> <input type="checkbox" name="preview" value="Y" checked="checked" /> </td></tr> <tr><td colspan="2"> <input type="submit" name="delete" value="<?php echo $deleteStr?>" onclick="return confirm( '<?php etranslate ( 'Are you sure you want to delete events for', true); ?> ' + document.forms[0].username.value + '?' )" /> </td></tr> </table> </form> <?php } ?> </td></tr></table> <?php echo print_trailer (); function purge_events ( $ids ) { global $preview, $previewStr, $c; // db connection global $sqlLog, $allStr; $tables = array ( array ( 'webcal_entry_user', 'cal_id' ), array ( 'webcal_entry_repeats', 'cal_id' ), array ( 'webcal_entry_repeats_not', 'cal_id' ), array ( 'webcal_entry_log', 'cal_entry_id' ), array ( 'webcal_entry_categories', 'cal_id' ), array ( 'webcal_import_data', 'cal_id' ), array ( 'webcal_site_extras', 'cal_id' ), array ( 'webcal_reminders', 'cal_id' ), array ( 'webcal_entry_ext_user', 'cal_id' ), array ( 'webcal_blob', 'cal_id' ), array ( 'webcal_entry', 'cal_id' ) ); //var_dump($tables);exit; $num = array (); $cnt = count ( $tables ); for ( $i = 0; $i < $cnt; $i++ ) { $num[$i] = 0; } foreach ( $ids as $cal_id ) { for ( $i = 0; $i < $cnt; $i++ ) { $clause = ( $cal_id == 'ALL' ? '' : " WHERE {$tables[$i][1]} = $cal_id" ); if ( $preview ) { $sql = 'SELECT COUNT(' . $tables[$i][1] . ") FROM {$tables[$i][0]}" . $clause; $res = dbi_execute ( $sql ); $sqlLog .= $sql . "<br />\n"; if ( $res ) { if ( $row = dbi_fetch_row ( $res ) ) $num[$i] += $row[0]; dbi_free_result ( $res ); } } else { $sql = "DELETE FROM {$tables[$i][0]}" . $clause; $sqlLog .= $sql . "<br />\n"; $res = dbi_execute ( $sql ); if ( $cal_id == 'ALL' ) $num[$i] = $allStr; else $num[$i] += dbi_affected_rows ( $c, $res ); } } } for ( $i = 0; $i < $cnt; $i++ ) { $table = $tables[$i][0]; echo '[' . $previewStr . '] ' . translate ( 'Records deleted from' ) . " $table: $num[$i]<br />\n"; } } 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; } ?>