4 * Purge events page and handler.
5 * When an event is deleted from a user's calendar, it is marked
6 * as deleted (webcal_entry_user.cal_status = 'D'). This page
7 * will actually clean out the database rather than just mark an
11 * Events will only be deleted if they were created by the selected
12 * user. Events where the user was a participant (but not did not
13 * create) will remain unchanged.
16 include_once $gfplugins.'webcalendar/www/includes/init.php';
18 // Set this to true do show the SQL at the bottom of the page
24 do_redirect ( "index.php" );
30 $purge_all = getPostValue ( "purge_all" );
31 $end_year = getPostValue ( "end_year" );
32 $end_month = getPostValue ( "end_month" );
33 $end_day = getPostValue ( "end_day" );
34 $user = getPostValue ( "user" );
35 $preview = getPostValue ( "preview" );
36 $preview = ( empty ( $preview ) ? false : true );
38 $INC = array('js/purge.php','js/visible.php');
39 if ( ! empty ( $user ) ) {
42 $BodyX = 'onload="all_handler();"';
45 print_header ( $INC, '', $BodyX );
48 <table style="border-width:0px;">
49 <tr><td style="vertical-align:top; width:50%;">
51 echo "<h2>" . translate("Delete Events" );
53 echo "[ " . translate("Preview" ) . "]";
57 <a title="<?php etranslate("Admin") ?>" class="nav" href="adminhome.php">« <?php etranslate("Admin") ?></a><br /><br />
60 if ( ! empty ( $user ) ) {
62 echo "<h2> [" . translate("Preview") . "] " .
63 translate("Purging events for") . " $user...</h2>\n";
65 echo "<h2>" . translate("Purging events for") . ": $user</h2>\n";
68 $end_date = sprintf ( "%04d%02d%02d", $end_year, $end_month, $end_day );
69 if ( $purge_all == "Y" ) {
70 if ( $user == 'ALL' ) {
71 $ids = array ( 'ALL' );
74 "SELECT cal_id FROM webcal_entry WHERE cal_create_by = '$user'" );
76 } elseif ( $end_date ) {
77 if ( $user != 'ALL' ) {
78 $tail = " AND webcal_entry.cal_create_by = '$user'";
81 $ALL = 1; // Need this to tell get_ids to ignore participant check
83 $E_ids = get_ids ( "SELECT cal_id FROM webcal_entry " .
84 "WHERE cal_type = 'E' AND cal_date < '$end_date' $tail",
86 $M_ids = get_ids ( "SELECT webcal_entry.cal_id FROM webcal_entry " .
87 "INNER JOIN webcal_entry_repeats ON " .
88 "webcal_entry.cal_id = webcal_entry_repeats.cal_id " .
89 "WHERE webcal_entry.cal_type = 'M' AND " .
90 "cal_end IS NOT NULL AND cal_end < '$end_date' $tail",
92 $ids = array_merge ( $E_ids, $M_ids );
94 //echo "event ids: <ul><li>" . implode ( "</li><li>", $ids ) . "</li></ul>\n";
95 if ( count ( $ids ) > 0 ) {
96 purge_events ( $ids );
98 echo translate("None");
100 echo "<h2>..." . translate("Finished") . ".</h2>\n";
102 echo "<div style=\"border: 1px solid #000;background-color: #fff;\"><tt>$sqlLog</tt></div>\n";
107 <form action="purge.php" method="post" name="purgeform">
109 <tr><td><label for="user">
110 <?php etranslate("User");?>:</label></td>
111 <td><select name="user">
113 $userlist = get_my_users ();
114 if ($nonuser_enabled == "Y" ) {
115 $nonusers = get_nonuser_cals ();
116 $userlist = ($nonuser_at_top == "Y") ? array_merge($nonusers, $userlist) : array_merge($userlist, $nonusers);
118 for ( $i = 0; $i < count ( $userlist ); $i++ ) {
119 echo "<option value=\"".$userlist[$i]['cal_login']."\">".$userlist[$i]['cal_fullname']."</option>\n";
122 <option value="ALL" selected="selected"><?php etranslate("All")?></option>
125 <tr><td><label for="purge_all">
126 <?php etranslate("Check box to delete <b>ALL</b> events for a user")?>:</label></td>
128 <input type="checkbox" name="purge_all" value="Y"
129 onclick="all_handler()" />
131 <tr id="dateArea"><td><label>
132 <?php etranslate("Delete all events before");?>:</label></td><td>
133 <?php print_date_selection ( "end_", date ( "Ymd" ) ) ?>
135 <tr><td><label for="preview">
136 <?php etranslate("Preview delete")?>:</label></td>
138 <input type="checkbox" name="preview" value="Y" checked="checked" />
141 <input type="submit" name="action" value="<?php etranslate("Delete")?>" onclick="return confirm('<?php etranslate("Are you sure you want to delete events for");?> ' + document.forms[0].user.value + '?')" />
149 <?php print_trailer(); ?>
153 function purge_events ( $ids ) {
154 global $preview, $c; // db connection
158 array ( 'webcal_entry_user', 'cal_id' ),
159 array ( 'webcal_entry_repeats', 'cal_id' ),
160 array ( 'webcal_entry_repeats_not', 'cal_id' ),
161 array ( 'webcal_entry_log', 'cal_entry_id' ),
162 array ( 'webcal_import_data', 'cal_id' ),
163 array ( 'webcal_site_extras', 'cal_id' ),
164 array ( 'webcal_reminder_log', 'cal_id' ),
165 array ( 'webcal_entry_ext_user', 'cal_id' ),
166 array ( 'webcal_entry', 'cal_id' )
169 //var_dump($tables);exit;
171 for ( $i = 0; $i < count ( $tables ); $i++ ) {
174 foreach ( $ids as $cal_id ) {
175 for ( $i = 0; $i < count ( $tables ); $i++ ) {
176 $clause = ( $cal_id == 'ALL' ? '' :
177 " WHERE {$tables[$i][1]} = $cal_id" );
179 $sql = "SELECT COUNT(" . $tables[$i][1] .
180 ") FROM {$tables[$i][0]}" . $clause;
181 //echo "cal_id = '$cal_id'<br>clause = '$clause'<br>";
182 //echo "$sql <br/>\n";
183 $res = dbi_query ( $sql );
184 $sqlLog .= $sql . "<br/>\n";
186 if ( $row = dbi_fetch_row ( $res ) )
188 dbi_free_result ( $res );
191 $sql = "DELETE FROM {$tables[$i][0]}" . $clause;
192 $sqlLog .= $sql . "<br/>\n";
193 $res = dbi_query ( $sql );
194 if ( $cal_id == 'ALL' ) {
195 $num[$i] = translate ( "All" );
197 $num[$i] += dbi_affected_rows ( $c, $res );
202 for ( $i = 0; $i < count ( $tables ); $i++ ) {
203 $table = $tables[$i][0];
204 echo "[" . translate ( "Preview" ) . "] " .
205 translate("Records deleted from") .
206 " $table: $num[$i]<br />\n";
210 function get_ids ( $sql, $ALL = '' ) {
213 //echo "SQL: $sql <br/>\n";
214 $sqlLog .= $sql . "<br/>\n";
215 $res = dbi_query ( $sql );
217 while ( $row = dbi_fetch_row ( $res ) ) {
221 //ONLY Delete event if no other participants.
223 $res2 = dbi_query ( "SELECT COUNT(*) FROM webcal_entry_user " .
224 "WHERE cal_id = $ID" );
226 if ( $row2 = dbi_fetch_row ( $res2 ) ) {
227 if ( $row2[0] == 1 ) $ids[] = $ID;
229 dbi_free_result ( $res2 );
234 dbi_free_result ( $res );