~ubuntu-branches/ubuntu/raring/webcalendar/raring

« back to all changes in this revision

Viewing changes to purge.php

  • Committer: Bazaar Package Importer
  • Author(s): Rafael Laboissiere
  • Date: 2009-06-09 06:26:24 UTC
  • mfrom: (18.2.3 karmic)
  • Revision ID: james.westby@ubuntu.com-20090609062624-9n9xea2ftpipmg38
Tags: 1.2.0+dfsg-4
* debian/patches/06_send-reminder-paths.diff: Adjust patch to help
  translate.php to find the translation files under /etc/webcalendar.
  Thanks to Dale and Cheryl Schroeder for the help on debugging this
  (really, closes: #531312).
* debian/patches/16_no-blink-public-access-title.diff: New patch for
  avoiding the blinking title when changing the Public Access title in
  English-US.txt

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
<?php
2
 
/*
3
 
 * $Id: purge.php,v 1.31 2005/02/22 01:29:58 cknudsen Exp $
 
2
/* $Id: purge.php,v 1.65.2.5 2008/04/04 19:57:15 umcesrjones Exp $
4
3
 *
5
4
 * Description:
6
 
 *      Purge events page and handler.
7
 
 *      When an event is deleted from a user's calendar, it is marked
8
 
 *      as deleted (webcal_entry_user.cal_status = 'D').  This page
9
 
 *      will actually clean out the database rather than just mark an
10
 
 *      event as deleted.
 
5
 * Purge events page and handler.
 
6
 * When an event is deleted from a user's calendar, it is marked
 
7
 * as deleted (webcal_entry_user.cal_status = 'D'). This page
 
8
 * will actually clean out the database rather than just mark an
 
9
 * event as deleted.
11
10
 *
12
11
 * Security:
13
 
 *      Events will only be deleted if they were created by the selected
14
 
 *      user.  Events where the user was a participant (but not did not
15
 
 *      create) will remain unchanged.
 
12
 * Events will only be deleted if they were created by the selected
 
13
 * user. Events where the user was a participant (but not did not
 
14
 * create) will remain unchanged.
16
15
 *
17
16
 */
18
17
include_once 'includes/init.php';
19
18
 
20
19
// Set this to true do show the SQL at the bottom of the page
21
 
$purgeDebug = true;
 
20
$purgeDebug = false;
 
21
 
22
22
$sqlLog = '';
23
23
 
24
24
if ( ! $is_admin ) {
25
25
  // must be admin...
26
 
  do_redirect ( "index.php" );
 
26
  do_redirect ( 'index.php' );
27
27
  exit;
28
28
}
29
29
 
30
30
$ALL = 0;
31
31
 
32
 
$purge_all = getPostValue ( "purge_all" );
33
 
$end_year = getPostValue ( "end_year" );
34
 
$end_month = getPostValue ( "end_month" );
35
 
$end_day = getPostValue ( "end_day" );
36
 
$user = getPostValue ( "user" );
37
 
$preview = getPostValue ( "preview" );
 
32
$previewStr = translate ( 'Preview' );
 
33
$allStr = translate ( 'All' );
 
34
$purgingStr = translate ( 'Purging events for' );
 
35
$deleteStr = translate ( 'Delete' );
 
36
 
 
37
$delete = getPostValue ( 'delete' );
 
38
$do_purge = false;
 
39
if ( ! empty ( $delete ) ) {
 
40
 $do_purge = true;
 
41
}
 
42
 
 
43
$purge_all = getPostValue ( 'purge_all' );
 
44
$purge_deleted = getPostValue ( 'purge_deleted' );
 
45
$end_year = getPostValue ( 'end_year' );
 
46
$end_month = getPostValue ( 'end_month' );
 
47
$end_day = getPostValue ( 'end_day' );
 
48
$username = getPostValue ( 'username' );
 
49
$preview = getPostValue ( 'preview' );
38
50
$preview = ( empty ( $preview ) ? false : true );
39
51
 
40
 
$INC = array('js/purge.php','js/visible.php');
41
 
if ( ! empty ( $user ) ) {
42
 
  $BodyX = '';
43
 
} else {
44
 
  $BodyX = 'onload="all_handler();"';
45
 
}
 
52
$INC = array ( 'js/visible.php' );
46
53
 
47
 
print_header ( $INC, '', $BodyX );
 
54
print_header ( $INC );
48
55
?>
49
56
 
50
 
<table style="border-width:0px;">
 
57
<table summary="">
51
58
<tr><td style="vertical-align:top; width:50%;">
52
59
<?php
53
 
echo "<h2>" . translate("Delete Events" );
 
60
echo '<h2>' . translate ( 'Delete Events' );
54
61
if ( $preview )
55
 
  echo "[ " . translate("Preview" ) . "]";
 
62
  echo '[ ' . $previewStr . ']';
56
63
echo "</h2>\n";
57
 
 
58
 
?>
59
 
<a title="<?php etranslate("Admin") ?>" class="nav" href="adminhome.php">&laquo;&nbsp;<?php etranslate("Admin") ?></a><br /><br />
60
 
<?php
61
 
 
62
 
if ( ! empty ( $user ) ) {
63
 
  if ( $preview ) {
64
 
    echo "<h2> [" .  translate("Preview") . "] " .
65
 
      translate("Purging events for") . " $user...</h2>\n";
66
 
  } else {
67
 
    echo "<h2>" .  translate("Purging events for") . ": $user</h2>\n";
68
 
  }
69
 
  $ids = '';
 
64
echo display_admin_link ();
 
65
 
 
66
if ( $do_purge ) {
 
67
  if ( $preview )
 
68
    echo '<h2> [' . $previewStr . '] ' . $purgingStr . " $username...</h2>\n";
 
69
  else
 
70
    echo '<h2>' . $purgingStr . ": $username</h2>\n";
 
71
 
70
72
  $end_date = sprintf ( "%04d%02d%02d", $end_year, $end_month, $end_day );
71
 
  if ( $purge_all == "Y" ) {
72
 
    if ( $user == 'ALL' ) {
 
73
  $ids = $tail = '';
 
74
  if ( $purge_deleted == 'Y' )
 
75
    $tail = " AND weu.cal_status = 'D' ";
 
76
 
 
77
  if ( $purge_all == 'Y' ) {
 
78
    if ( $username == 'ALL' ) {
73
79
      $ids = array ( 'ALL' );
74
80
    } else {
75
 
      $ids = get_ids (
76
 
        "SELECT cal_id FROM webcal_entry WHERE cal_create_by = '$user'" );
 
81
      $ids = get_ids ( 'SELECT cal_id FROM webcal_entry '
 
82
        . " WHERE cal_create_by = '$username' $tail" );
77
83
    }
78
84
  } elseif ( $end_date ) {
79
 
    if ( $user != 'ALL' ) {
80
 
      $tail = " AND webcal_entry.cal_create_by = '$user'";
 
85
    if ( $username != 'ALL' ) {
 
86
      $tail = " AND we.cal_create_by = '$username' $tail";
81
87
    } else {
82
88
      $tail = '';
83
89
      $ALL = 1;  // Need this to tell get_ids to ignore participant check
84
90
    }
85
 
    $E_ids = get_ids ( "SELECT cal_id FROM webcal_entry " .
 
91
    $E_ids = get_ids ( 'SELECT we.cal_id FROM webcal_entry we, webcal_entry_user weu ' .
86
92
      "WHERE cal_type = 'E' AND cal_date < '$end_date' $tail",
87
93
      $ALL );
88
 
    $M_ids = get_ids ( "SELECT webcal_entry.cal_id FROM webcal_entry " .
89
 
      "INNER JOIN webcal_entry_repeats ON " .
90
 
      "webcal_entry.cal_id = webcal_entry_repeats.cal_id " .
91
 
      "WHERE webcal_entry.cal_type = 'M' AND " .
92
 
      "cal_end IS NOT NULL AND cal_end < '$end_date' $tail",
 
94
    $M_ids = get_ids ( 'SELECT DISTINCT(we.cal_id) FROM webcal_entry we,
 
95
      webcal_entry_user weu, webcal_entry_repeats wer
 
96
      WHERE we.cal_type = \'M\'
 
97
      AND we.cal_id = wer.cal_id AND we.cal_id = wer.cal_id '
 
98
      . "AND cal_end IS NOT NULL AND cal_end < '$end_date' $tail",
93
99
      $ALL );
94
100
    $ids = array_merge ( $E_ids, $M_ids );
95
101
  }
97
103
  if ( count ( $ids ) > 0 ) {
98
104
    purge_events ( $ids );
99
105
  } else {
100
 
    echo translate("None");
 
106
    echo translate ( 'None' );
101
107
  }
102
 
  echo "<h2>..." .  translate("Finished") . ".</h2>\n";
 
108
  echo '<h2>...' . translate ( 'Finished' ) . ".</h2>\n";
 
109
?>
 
110
  <form><input type="button" value="<?php etranslate ( 'Back' )?>"
 
111
onclick="history.back()" /></form
 
112
><?php
103
113
  if ( $purgeDebug ) {
104
 
    echo "<div style=\"border: 1px solid #000;background-color: #fff;\"><tt>$sqlLog</tt></div>\n";
 
114
    echo '<div style="border: 1px solid #000;background-color: #ffffff;"><tt>' .
 
115
  $sqlLog . '</tt></div>' ."\n";
105
116
  }
106
117
} else {
107
118
?>
108
119
 
109
 
<form action="purge.php" method="post" name="purgeform">
 
120
<form action="purge.php" method="post" name="purgeform" id="purgeform">
110
121
<table>
111
 
        <tr><td><label for="user">
112
 
                <?php etranslate("User");?>:</label></td>
113
 
        <td><select name="user">
 
122
 <tr><td><label for="user">
 
123
  <?php echo translate ( 'User' );?>:</label></td>
 
124
 <td><select name="username">
114
125
<?php
115
126
  $userlist = get_my_users ();
116
 
  if ($nonuser_enabled == "Y" ) {
 
127
  if ($NONUSER_ENABLED == 'Y' ) {
117
128
    $nonusers = get_nonuser_cals ();
118
 
    $userlist = ($nonuser_at_top == "Y") ? array_merge($nonusers, $userlist) : array_merge($userlist, $nonusers);
 
129
    $userlist = ($NONUSER_AT_TOP == 'Y' ? array_merge ($nonusers, $userlist) : array_merge ($userlist, $nonusers));
119
130
  }
120
 
  for ( $i = 0; $i < count ( $userlist ); $i++ ) {
121
 
    echo "<option value=\"".$userlist[$i]['cal_login']."\">".$userlist[$i]['cal_fullname']."</option>\n";
 
131
  for ( $i = 0, $cnt = count ( $userlist ); $i < $cnt; $i++ ) {
 
132
    echo '<option value="' . $userlist[$i]['cal_login'] . '"';
 
133
    if ( $login == $userlist[$i]['cal_login'] )
 
134
      echo ' selected="selected"';
 
135
    echo '>' . $userlist[$i]['cal_fullname'] . "</option>\n";
122
136
  }
123
137
?>
124
 
<option value="ALL" selected="selected"><?php etranslate("All")?></option>
125
 
                </select>
126
 
        </td></tr>
127
 
        <tr><td><label for="purge_all">
128
 
                <?php etranslate("Check box to delete <b>ALL</b> events for a user")?>:</label></td>
129
 
                <td valign="bottom">
130
 
                <input type="checkbox" name="purge_all" value="Y"
131
 
                onclick="all_handler()" />
132
 
        </td></tr>
133
 
        <tr id="dateArea"><td><label>
134
 
                <?php etranslate("Delete all events before");?>:</label></td><td>
135
 
                <?php print_date_selection ( "end_", date ( "Ymd" ) ) ?>
136
 
        </td></tr>
137
 
        <tr><td><label for="preview">
138
 
                <?php etranslate("Preview delete")?>:</label></td>
139
 
                <td valign="bottom">
140
 
                <input type="checkbox" name="preview" value="Y" checked="checked" />
141
 
        </td></tr>
142
 
        <tr><td colspan="2">
143
 
                <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 + '?')" />
144
 
        </td></tr>
 
138
<option value="ALL"><?php echo $allStr ?></option>
 
139
  </select>
 
140
 </td></tr>
 
141
 <tr><td><label for="purge_all">
 
142
  <?php etranslate ( 'Check box to delete ALL events for a user' )?>:</label></td>
 
143
  <td valign="bottom">
 
144
  <input type="checkbox" name="purge_all" value="Y" id="purge_all" onclick="toggle_datefields( 'dateArea', this );" />
 
145
 </td></tr>
 
146
 <tr id="dateArea"><td><label>
 
147
  <?php etranslate ( 'Delete all events before' );?>:</label></td><td>
 
148
  <?php echo date_selection ( 'end_', date ( 'Ymd' ) ) ?>
 
149
 </td></tr>
 
150
 <tr><td><label for="purge_deleted">
 
151
  <?php etranslate ( 'Purge deleted only' )?>:</label></td>
 
152
  <td valign="bottom">
 
153
  <input type="checkbox" name="purge_deleted" value="Y" />
 
154
 </td></tr>
 
155
 <tr><td><label for="preview">
 
156
  <?php etranslate ( 'Preview delete' )?>:</label></td>
 
157
  <td valign="bottom">
 
158
  <input type="checkbox" name="preview" value="Y" checked="checked" />
 
159
 </td></tr>
 
160
 <tr><td colspan="2">
 
161
  <input type="submit" name="delete" value="<?php
 
162
    echo $deleteStr?>" onclick="return confirm( '<?php
 
163
    etranslate ( 'Are you sure you want to delete events for', true);
 
164
    ?> ' + document.forms[0].username.value + '?' )" />
 
165
 </td></tr>
145
166
</table>
146
167
</form>
147
168
 
148
169
<?php } ?>
149
170
</td></tr></table>
150
171
 
151
 
<?php print_trailer(); ?>
152
 
</body>
153
 
</html>
154
 
<?php
 
172
<?php echo print_trailer ();
 
173
 
155
174
function purge_events ( $ids ) {
156
 
  global $preview, $c; // db connection
157
 
  global $sqlLog;
 
175
  global $preview, $previewStr, $c; // db connection
 
176
  global $sqlLog, $allStr;
158
177
 
159
178
  $tables = array (
160
179
    array ( 'webcal_entry_user', 'cal_id' ),
161
180
    array ( 'webcal_entry_repeats', 'cal_id' ),
162
181
    array ( 'webcal_entry_repeats_not', 'cal_id' ),
163
182
    array ( 'webcal_entry_log', 'cal_entry_id' ),
 
183
    array ( 'webcal_entry_categories', 'cal_id' ),
164
184
    array ( 'webcal_import_data', 'cal_id' ),
165
185
    array ( 'webcal_site_extras', 'cal_id' ),
166
 
    array ( 'webcal_reminder_log', 'cal_id' ),
 
186
    array ( 'webcal_reminders', 'cal_id' ),
167
187
    array ( 'webcal_entry_ext_user', 'cal_id' ),
 
188
    array ( 'webcal_blob', 'cal_id' ),
168
189
    array ( 'webcal_entry', 'cal_id' )
169
190
  );
170
191
 
171
192
  //var_dump($tables);exit;
172
 
  $num = array();
173
 
  for ( $i = 0; $i < count ( $tables ); $i++ ) {
 
193
  $num = array ();
 
194
  $cnt = count ( $tables );
 
195
  for ( $i = 0; $i < $cnt; $i++ ) {
174
196
    $num[$i] = 0;
175
197
  }
176
198
  foreach ( $ids as $cal_id ) {
177
 
    for ( $i = 0; $i < count ( $tables ); $i++ ) {
 
199
    for ( $i = 0; $i < $cnt; $i++ ) {
178
200
      $clause = ( $cal_id == 'ALL' ? '' :
179
201
        " WHERE {$tables[$i][1]} = $cal_id" );
180
202
      if ( $preview ) {
181
 
        $sql = "SELECT COUNT(" . $tables[$i][1] .
 
203
        $sql = 'SELECT COUNT(' . $tables[$i][1] .
182
204
          ") FROM {$tables[$i][0]}" . $clause;
183
 
        //echo "cal_id = '$cal_id'<br>clause = '$clause'<br>";
184
 
        //echo "$sql <br/>\n";
185
 
        $res = dbi_query ( $sql );
186
 
        $sqlLog .= $sql . "<br/>\n";
 
205
 
 
206
        $res = dbi_execute ( $sql );
 
207
        $sqlLog .= $sql . "<br />\n";
187
208
        if ( $res ) {
188
209
          if ( $row = dbi_fetch_row ( $res ) )
189
210
            $num[$i] += $row[0];
191
212
        }
192
213
      } else {
193
214
        $sql = "DELETE FROM {$tables[$i][0]}" . $clause;
194
 
        $sqlLog .= $sql . "<br/>\n";
195
 
        $res = dbi_query ( $sql );
196
 
        if ( $cal_id == 'ALL' ) {
197
 
          $num[$i] = translate ( "All" );
198
 
        } else {
 
215
        $sqlLog .= $sql . "<br />\n";
 
216
        $res = dbi_execute ( $sql );
 
217
        if ( $cal_id == 'ALL' )
 
218
          $num[$i] = $allStr;
 
219
        else
199
220
          $num[$i] += dbi_affected_rows ( $c, $res );
200
 
        }
201
221
      }
202
222
    }
203
223
  }
204
 
  for ( $i = 0; $i < count ( $tables ); $i++ ) {
 
224
  for ( $i = 0; $i < $cnt; $i++ ) {
205
225
    $table = $tables[$i][0];
206
 
    echo "[" . translate ( "Preview" ) . "] " .
207
 
      translate("Records deleted from") .
 
226
    echo '[' . $previewStr . '] ' .
 
227
      translate ( 'Records deleted from' ) .
208
228
      " $table: $num[$i]<br />\n";
209
229
  }
210
230
}
211
231
 
212
232
function get_ids ( $sql, $ALL = '' ) {
213
233
  global $sqlLog;
 
234
 
214
235
  $ids = array ();
215
 
  //echo "SQL: $sql <br/>\n";
216
 
  $sqlLog .= $sql . "<br/>\n";
217
 
  $res = dbi_query ( $sql );
 
236
  $sqlLog .= $sql . "<br />\n";
 
237
  $res = dbi_execute ( $sql );
218
238
  if ( $res ) {
219
239
    while ( $row = dbi_fetch_row ( $res ) ) {
220
 
      if ($ALL == 1) {
 
240
      if ($ALL == 1)
221
241
        $ids[] = $row[0];
222
 
      } else {
 
242
      else {
223
243
        //ONLY Delete event if no other participants.
224
244
        $ID = $row[0];
225
 
        $res2 = dbi_query ( "SELECT COUNT(*) FROM webcal_entry_user " .
226
 
          "WHERE cal_id = $ID" );
 
245
        $res2 = dbi_execute ( 'SELECT COUNT( * ) FROM webcal_entry_user
 
246
          WHERE cal_id = ?', array ( $ID ) );
227
247
        if ( $res2 ) {
228
248
          if ( $row2 = dbi_fetch_row ( $res2 ) ) {
229
 
            if ( $row2[0] == 1 ) $ids[] = $ID;
 
249
            if ( $row2[0] == 1 )
 
250
             $ids[] = $ID;
230
251
          }
231
252
          dbi_free_result ( $res2 );
232
253
        }