[ Index ]
 

Code source de WebCalendar 1.0.5

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables | Statistiques

title

Body

[fermer]

/ -> del_entry.php (source)

   1  <?php
   2  include_once  'includes/init.php';
   3  
   4  $my_event = false;
   5  $can_edit = false;
   6  
   7  // First, check to see if this user should be able to delete this event.
   8  if ( $id > 0 ) {
   9    // first see who has access to edit this entry
  10    if ( $is_admin ) {
  11      $can_edit = true;
  12    } else if ( $readonly == "Y" ) {
  13      $can_edit = false;
  14    } else {
  15      $can_edit = false;
  16      $sql = "SELECT webcal_entry.cal_id FROM webcal_entry, " .
  17        "webcal_entry_user WHERE webcal_entry.cal_id = " .
  18        "webcal_entry_user.cal_id AND webcal_entry.cal_id = $id " .
  19        "AND (webcal_entry.cal_create_by = '$login' " .
  20        "OR webcal_entry_user.cal_login = '$login')";
  21      $res = dbi_query ( $sql );
  22      if ( $res ) {
  23        $row = dbi_fetch_row ( $res );
  24        if ( $row && $row[0] > 0 )
  25          $can_edit = true;
  26        dbi_free_result ( $res );
  27      }
  28    }
  29  }
  30  
  31  // See who owns the event.  Owner should be able to delete.
  32  $res = dbi_query (
  33    "SELECT cal_create_by FROM webcal_entry WHERE cal_id = $id" );
  34  if ( $res ) {
  35    $row = dbi_fetch_row ( $res );
  36    $owner = $row[0];
  37    dbi_free_result ( $res );
  38    if ( $owner == $login || $is_assistant && ( $user == $owner ) || $is_nonuser_admin && ( $user == $owner ) ) {
  39      $my_event = true;
  40      $can_edit = true;
  41    }
  42  }
  43  
  44  if ( $readonly == 'Y' )
  45    $can_edit = false;
  46  
  47  if ( ! $can_edit ) {
  48    $error = translate ( "You are not authorized" );
  49  }
  50  
  51  // Is this a repeating event?
  52  $event_repeats = false;
  53  $res = dbi_query ( "SELECT COUNT(cal_id) FROM webcal_entry_repeats " .
  54    "WHERE cal_id = $id" );
  55  if ( $res ) {
  56    $row = dbi_fetch_row ( $res );
  57    if ( $row[0] > 0 )
  58      $event_repeats = true;
  59    dbi_free_result ( $res );
  60  }
  61  $override_repeat = false;
  62  if ( ! empty ( $date ) && $event_repeats && ! empty ( $override ) ) {
  63    $override_repeat = true;
  64  }
  65  
  66  if ( $id > 0 && empty ( $error ) ) {
  67    if ( ! empty ( $date ) ) {
  68      $thisdate = $date;
  69    } else {
  70      $res = dbi_query ( "SELECT cal_date FROM webcal_entry WHERE cal_id = $id" );
  71      if ( $res ) {
  72        // date format is 19991231
  73        $row = dbi_fetch_row ( $res );
  74        $thisdate = $row[0];
  75      }
  76    }
  77  
  78    // Only allow delete of webcal_entry & webcal_entry_repeats
  79    // if owner or admin, not participant.
  80    if ( $is_admin || $my_event ) {
  81  
  82      // Email participants that the event was deleted
  83      // First, get list of participants (with status Approved or
  84      // Waiting on approval).
  85      $sql = "SELECT cal_login FROM webcal_entry_user WHERE cal_id = $id " .
  86        "AND cal_status IN ('A','W')";
  87      $res = dbi_query ( $sql );
  88      $partlogin = array ();
  89      if ( $res ) {
  90        while ( $row = dbi_fetch_row ( $res ) ) {
  91          if ( $row[0] != $login )
  92     $partlogin[] = $row[0];
  93        }
  94        dbi_free_result($res);
  95      }
  96  
  97      // Get event name
  98      $sql = "SELECT cal_name, cal_date, cal_time " .
  99        "FROM webcal_entry WHERE cal_id = $id";
 100      $res = dbi_query($sql);
 101      if ( $res ) {
 102        $row = dbi_fetch_row ( $res );
 103        $name = $row[0];
 104        $eventdate = $row[1];
 105        $eventtime = $row[2];
 106        dbi_free_result ( $res );
 107      }
 108      $TIME_FORMAT=24;
 109      for ( $i = 0; $i < count ( $partlogin ); $i++ ) {
 110        // Log the deletion
 111        activity_log ( $id, $login, $partlogin[$i], $LOG_DELETE, "" );
 112  
 113        $do_send = get_pref_setting ( $partlogin[$i], "EMAIL_EVENT_DELETED" );
 114        $user_TZ = get_pref_setting ( $partlogin[$i], "TZ_OFFSET" );
 115        $user_language = get_pref_setting ( $partlogin[$i], "LANGUAGE" );
 116        user_load_variables ( $partlogin[$i], "temp" );
 117        // Want date/time in user's timezone
 118        if ( $eventtime != '-1' ) { 
 119          $eventtime += ( $user_TZ * 10000 );
 120          if ( $eventtime < 0 ) {
 121            $eventtime += 240000;
 122          } else if ( $eventtime >= 240000 ) {
 123            $eventtime -= 240000;
 124          }
 125        }            
 126        if ( $partlogin[$i] != $login && $do_send == "Y" && boss_must_be_notified ( $login, $partlogin[$i] ) && 
 127          strlen ( $tempemail ) && $send_email != "N" ) {
 128           if (($GLOBALS['LANGUAGE'] != $user_language) && ! empty ( $user_language ) && ( $user_language != 'none' )){
 129            reset_language ( $user_language );
 130          }
 131          $msg = translate("Hello") . ", " . $tempfullname . ".\n\n" .
 132            translate("An appointment has been canceled for you by") .
 133            " " . $login_fullname .  ".\n" .
 134            translate("The subject was") . " \"" . $name . "\"\n" .
 135            translate("Date") . ": " . date_to_str ($thisdate) . "\n";
 136            if ( $eventtime != '-1' ) $msg .= translate("Time") . ": " . display_time ($eventtime, true);
 137            $msg .= "\n\n";
 138          if ( strlen ( $login_email ) )
 139            $extra_hdrs = "From: $login_email\r\nX-Mailer: " .
 140              translate($application_name);
 141          else
 142            $extra_hdrs = "From: $email_fallback_from\r\nX-Mailer: " .
 143              translate($application_name);
 144          mail ( $tempemail,
 145            translate($application_name) . " " .
 146     translate("Notification") . ": " . $name,
 147            html_to_8bits ($msg), $extra_hdrs );
 148        }
 149      }
 150  
 151      // Instead of deleting from the database... mark it as deleted
 152      // by setting the status for each participant to "D" (instead
 153      // of "A"/Accepted, "W"/Waiting-on-approval or "R"/Rejected)
 154      if ( $override_repeat ) {
 155        dbi_query ( "INSERT INTO webcal_entry_repeats_not ( cal_id, cal_date ) " .
 156          "VALUES ( $id, $date )" );
 157        // Should we log this to the activity log???
 158      } else {
 159        // If it's a repeating event, delete any event exceptions
 160        // that were entered.
 161        if ( $event_repeats ) {
 162   $res = dbi_query ( "SELECT cal_id FROM webcal_entry " .
 163     "WHERE cal_group_id = $id" );
 164          if ( $res ) {
 165     $ex_events = array ();
 166            while ( $row = dbi_fetch_row ( $res ) ) {
 167       $ex_events[] = $row[0];
 168     }
 169            dbi_free_result ( $res );
 170            for ( $i = 0; $i < count ( $ex_events ); $i++ ) {
 171       $res = dbi_query ( "SELECT cal_login FROM " .
 172                "webcal_entry_user WHERE cal_id = $ex_events[$i]" );
 173              if ( $res ) {
 174                $delusers = array ();
 175                while ( $row = dbi_fetch_row ( $res ) ) {
 176                  $delusers[] = $row[0];
 177                }
 178                dbi_free_result ( $res );
 179                for ( $j = 0; $j < count ( $delusers ); $j++ ) {
 180                  // Log the deletion
 181           activity_log ( $ex_events[$i], $login, $delusers[$j],
 182                    $LOG_DELETE, "" );
 183                  dbi_query ( "UPDATE webcal_entry_user SET cal_status = 'D' " .
 184             "WHERE cal_id = $ex_events[$i] " .
 185                    "AND cal_login = '$delusers[$j]'" );
 186                }
 187              }
 188            }
 189   }
 190        }
 191  
 192        // Now, mark event as deleted for all users.
 193        dbi_query ( "UPDATE webcal_entry_user SET cal_status = 'D' " .
 194          "WHERE cal_id = $id" );
 195      }
 196    } else {
 197      // Not the owner of the event and are not the admin.
 198      // Just delete the event from this user's calendar.
 199      // We could just set the status to 'D' instead of deleting.
 200      // (but we would need to make some changes to edit_entry_handler.php
 201      // to accomodate this).
 202      dbi_query ( "DELETE FROM webcal_entry_user " .
 203        "WHERE cal_id = $id AND cal_login = '$login'" );
 204      activity_log ( $id, $login, $login, $LOG_REJECT, "" );
 205    }
 206  }
 207  
 208  $ret = getValue ( "ret" );
 209  if ( ! empty ( $ret ) && $ret == "list" ) {
 210    $url = "list_unapproved.php";
 211    if ( ! empty ( $user ) )
 212      $url .= "?user=$user";
 213  } else {
 214    $url = get_preferred_view ( "", empty ( $user ) ? "" : "user=$user" );
 215  }
 216  
 217  if ( empty ( $error ) ) {
 218    do_redirect ( $url );
 219    exit;
 220  }
 221  print_header();
 222  ?>
 223  
 224  <h2><?php etranslate("Error")?></h2>
 225  <blockquote>
 226  <?php echo $error; ?>
 227  </blockquote>
 228  
 229  <?php print_trailer(); ?>
 230  
 231  </body>
 232  </html>


Généré le : Fri Nov 30 19:09:19 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics