source: contrib/davical/inc/caldav-DELETE.php @ 3733

Revision 3733, 6.9 KB checked in by gabriel.malheiros, 13 years ago (diff)

Ticket #1541 - <Davical customizado para o Expresso.Utiliza Caldav e CardDav?>

Line 
1<?php
2/**
3* CalDAV Server - handle DELETE method
4*
5* @package   davical
6* @subpackage   caldav
7* @author    Andrew McMillan <andrew@mcmillan.net.nz>
8* @copyright Catalyst .Net Ltd, Morphoss Ltd <http://www.morphoss.com/>
9* @license   http://gnu.org/copyleft/gpl.html GNU GPL v2 or later
10*/
11dbg_error_log("delete", "DELETE method handler");
12include_once("iCalendar.php");
13require_once('DAVResource.php');
14include_once("drivers_ldap.php");
15$dav_resource = new DAVResource($request->path);
16$container = $dav_resource->FetchParentContainer();
17$container->NeedPrivilege('DAV::unbind');
18
19$nome = $container->GetProperty('user_no');
20$lock_opener = $request->FailIfLocked();
21$etag = md5($request->raw_post);
22$matches = preg_split('/\//', $request->path, -1, PREG_SPLIT_NO_EMPTY);
23$CALID = strtok($matches[2], "@");
24
25//$filtro = "uid=".$request->username;
26//$atributos = array("uidNumber");
27//$uidnumber = ldapDrivers::requestAtributo($filtro, $atributos);
28//    if ($uidnumber == false) {
29//                 dbg_error_log( "DELETE", "Responding with delete error:  usuario não encontrado no diretorio");
30//                 $request->DoResponse( 501, 'Database error');
31//    }
32//$nome = $uidnumber['uidNumber'];
33
34function delete_collection( $nome,$CALID ) {
35 
36  $qry = new AwlQuery( "SELECT * FROM phpgw_cal WHERE owner = :owner AND cal_id = :cal_id", array( ':owner' => $nome , ':cal_id' => $CALID));
37  if ( $qry->Exec("DELETE") && $qry->rows() == 1 ){                                               
38    $delete_row = $qry->Fetch();
39    if ($qry->QDo("DELETE FROM phpgw_cal WHERE cal_id = :cal_id AND owner = :nome",array( ':cal_id' => $CALID, ':nome' => $nome))){
40         if($qry->QDO("DELETE FROM phpgw_cal_user WHERE cal_login = :nome AND cal_id = :cal_id",array( ':nome' => $nome , ':cal_id' => $CALID))){
41           if ( $delete_row->cal_type == 'M' )
42                {
43                  if($qry->QDO("DELETE FROM phpgw_cal_repeats WHERE cal_id = :cal_id",array( ':cal_id' => $CALID)))
44                    {
45                      @dbg_error_log( "DELETE", "DELETE (collection): User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path);
46                      return true;
47                    }
48                   else
49                    { return false;
50                    } 
51                }
52           @dbg_error_log( "DELETE", "DELETE (collection): User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path);
53           return true;
54          }
55         else
56          {return false;
57           }   
58      }
59    else {
60       return false;
61       //$request->DoResponse( 500, translate("Error querying database.") );
62    }
63
64  }
65  else
66  {
67    return false;                                                                                                                                                 
68  }
69  //$params = array( ':collection_id' => $id );
70  //$qry = new AwlQuery('SELECT child.collection_id AS child_id FROM collection child JOIN collection parent ON (parent.dav_name = child.parent_container) WHERE parent.collection_id = :collection_id', $params );
71  //if ( $qry->Exec('DELETE',__LINE__,__FILE__) && $qry->rows() > 0 ) {
72  //  while( $row = $qry->Fetch() ) {
73  //    delete_collection($row->child_id);
74  //  }
75  //}
76
77  //if ( $qry->QDo("SELECT write_sync_change(collection_id, 404, caldav_data.dav_name) FROM caldav_data WHERE collection_id = :collection_id", $params )
78  //  && $qry->QDo("DELETE FROM property WHERE dav_name LIKE (SELECT dav_name FROM collection WHERE collection_id = :collection_id) || '%'", $params )
79  //  && $qry->QDo("DELETE FROM locks WHERE dav_name LIKE (SELECT dav_name FROM collection WHERE collection_id = :collection_id) || '%'", $params )
80  //  && $qry->QDo("DELETE FROM caldav_data WHERE collection_id = :collection_id", $params )
81  //  && $qry->QDo("DELETE FROM collection WHERE collection_id = :collection_id", $params ) ) {
82  //  @dbg_error_log( "DELETE", "DELETE (collection): User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path);
83  //  return true;
84  //}
85  //return false;
86}
87
88function delete_collection_card( $nome,$CALID,$qry )
89{
90  $qryy = new AwlQuery( "SELECT A.id_contact,B.id_connection,C.id_address FROM phpgw_cc_contact as A left join  phpgw_cc_contact_conns as B using(id_contact) left join phpgw_cc_contact_addrs as C using(id_contact)  WHERE A.id_owner = :owner AND A.id_contact = :cal_id", array( ':owner' => $nome , ':cal_id' => $CALID));
91  if ( $qryy->Exec("DELETE") && $qryy->rows() > 0 )
92   {
93   if ($qry->QDo("DELETE FROM phpgw_cc_contact WHERE id_contact = :cal_id AND id_owner = :nome",array( ':cal_id' => $CALID, ':nome' => $nome)))
94    {
95      while($delete_row = $qryy->Fetch())
96      {
97        if ( isset($delete_row->id_connection))
98            {
99              $qry->QDO("DELETE FROM phpgw_cc_contact_conns WHERE id_contact= :id AND id_connection = :id_connection",array( ':id' => $CALID,':id_connection' => $delete_row->id_connection ));
100              $qry->QDO("DELETE FROM phpgw_cc_connections WHERE id_connection = :id_connection",array( ':id_connection' => $delete_row->id_connection ));
101             } 
102          if ( isset($delete_row->id_address))
103            {
104              $qry->QDO("DELETE from phpgw_cc_contact_addrs where id_contact= :id AND id_address = :id_connection", array(':id' => $CALID ,':id_connection' => $delete_row->id_address));
105              $qry->QDO("DELETE from phpgw_cc_addresses  where id_address = :id_connection", array(':id_connection' => $delete_row->id_address));
106            }
107       }
108      @dbg_error_log( "DELETE", "DELETE (collection): User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path);
109      return true;
110    }
111   else
112    { return false;
113    }
114  }
115  else
116  {
117    return false;
118  }
119}
120
121if ( !$container->Exists() )$request->DoResponse( 404 );
122
123if ( ! ( $container->resource_id() > 0 ) ) {
124  $request->DoResponse( 403 );
125}
126
127$qry = new AwlQuery();
128$qry->Begin();
129if ( $container->IsBinding() ) {
130  $params = array( ':dav_name' => $container->dav_name() );
131  if ( $qry->QDo("DELETE FROM dav_binding WHERE dav_name = :dav_name", $params ) && $qry->Commit() )
132  {
133    @dbg_error_log( "DELETE", "DELETE: Binding: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path);
134    $request->DoResponse( 204 );
135   }
136}
137else if ( $container->IsCollection() ) {
138  if ( $dav_resource->IsAddressbook())
139    {
140      if ( delete_collection_card( $nome,$CALID,$qry ) && $qry->Commit() ) {
141       $request->DoResponse( 204 );
142       }
143
144     }
145    else //if ( $dav_resource->IsCalendar())
146    {
147      if ( delete_collection( $nome,$CALID ) && $qry->Commit() ) {
148       $request->DoResponse( 204 );
149     }
150    }
151
152}
153else {
154  if ( (isset($request->etag_if_match) && $request->etag_if_match != $dav_resource->unique_tag() ) ) {
155    $request->DoResponse( 412, translate("Resource has changed on server - not deleted") );
156  }
157
158}
159$request->DoResponse( 500 );
160
Note: See TracBrowser for help on using the repository browser.