* @copyright Catalyst .Net Ltd, Morphoss Ltd * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later */ dbg_error_log("delete", "DELETE method handler"); include_once("iCalendar.php"); require_once('DAVResource.php'); include_once("drivers_ldap.php"); $dav_resource = new DAVResource($request->path); $container = $dav_resource->FetchParentContainer(); $container->NeedPrivilege('DAV::unbind'); $nome = $container->GetProperty('user_no'); $lock_opener = $request->FailIfLocked(); $etag = md5($request->raw_post); $matches = preg_split('/\//', $request->path, -1, PREG_SPLIT_NO_EMPTY); $CALID = strtok($matches[2], "@"); //$filtro = "uid=".$request->username; //$atributos = array("uidNumber"); //$uidnumber = ldapDrivers::requestAtributo($filtro, $atributos); // if ($uidnumber == false) { // dbg_error_log( "DELETE", "Responding with delete error: usuario não encontrado no diretorio"); // $request->DoResponse( 501, 'Database error'); // } //$nome = $uidnumber['uidNumber']; function delete_collection( $nome,$CALID ) { $qry = new AwlQuery( "SELECT * FROM phpgw_cal WHERE owner = :owner AND cal_id = :cal_id", array( ':owner' => $nome , ':cal_id' => $CALID)); if ( $qry->Exec("DELETE") && $qry->rows() == 1 ){ $delete_row = $qry->Fetch(); if ($qry->QDo("DELETE FROM phpgw_cal WHERE cal_id = :cal_id AND owner = :nome",array( ':cal_id' => $CALID, ':nome' => $nome))){ if($qry->QDO("DELETE FROM phpgw_cal_user WHERE cal_login = :nome AND cal_id = :cal_id",array( ':nome' => $nome , ':cal_id' => $CALID))){ if ( $delete_row->cal_type == 'M' ) { if($qry->QDO("DELETE FROM phpgw_cal_repeats WHERE cal_id = :cal_id",array( ':cal_id' => $CALID))) { @dbg_error_log( "DELETE", "DELETE (collection): User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path); return true; } else { return false; } } @dbg_error_log( "DELETE", "DELETE (collection): User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path); return true; } else {return false; } } else { return false; //$request->DoResponse( 500, translate("Error querying database.") ); } } else { return false; } //$params = array( ':collection_id' => $id ); //$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 ); //if ( $qry->Exec('DELETE',__LINE__,__FILE__) && $qry->rows() > 0 ) { // while( $row = $qry->Fetch() ) { // delete_collection($row->child_id); // } //} //if ( $qry->QDo("SELECT write_sync_change(collection_id, 404, caldav_data.dav_name) FROM caldav_data WHERE collection_id = :collection_id", $params ) // && $qry->QDo("DELETE FROM property WHERE dav_name LIKE (SELECT dav_name FROM collection WHERE collection_id = :collection_id) || '%'", $params ) // && $qry->QDo("DELETE FROM locks WHERE dav_name LIKE (SELECT dav_name FROM collection WHERE collection_id = :collection_id) || '%'", $params ) // && $qry->QDo("DELETE FROM caldav_data WHERE collection_id = :collection_id", $params ) // && $qry->QDo("DELETE FROM collection WHERE collection_id = :collection_id", $params ) ) { // @dbg_error_log( "DELETE", "DELETE (collection): User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path); // return true; //} //return false; } function delete_collection_card( $nome,$CALID,$qry ) { $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)); if ( $qryy->Exec("DELETE") && $qryy->rows() > 0 ) { if ($qry->QDo("DELETE FROM phpgw_cc_contact WHERE id_contact = :cal_id AND id_owner = :nome",array( ':cal_id' => $CALID, ':nome' => $nome))) { while($delete_row = $qryy->Fetch()) { if ( isset($delete_row->id_connection)) { $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 )); $qry->QDO("DELETE FROM phpgw_cc_connections WHERE id_connection = :id_connection",array( ':id_connection' => $delete_row->id_connection )); } if ( isset($delete_row->id_address)) { $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)); $qry->QDO("DELETE from phpgw_cc_addresses where id_address = :id_connection", array(':id_connection' => $delete_row->id_address)); } } @dbg_error_log( "DELETE", "DELETE (collection): User: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path); return true; } else { return false; } } else { return false; } } if ( !$container->Exists() )$request->DoResponse( 404 ); if ( ! ( $container->resource_id() > 0 ) ) { $request->DoResponse( 403 ); } $qry = new AwlQuery(); $qry->Begin(); if ( $container->IsBinding() ) { $params = array( ':dav_name' => $container->dav_name() ); if ( $qry->QDo("DELETE FROM dav_binding WHERE dav_name = :dav_name", $params ) && $qry->Commit() ) { @dbg_error_log( "DELETE", "DELETE: Binding: %d, ETag: %s, Path: %s", $session->user_no, $request->etag_if_match, $request->path); $request->DoResponse( 204 ); } } else if ( $container->IsCollection() ) { if ( $dav_resource->IsAddressbook()) { if ( delete_collection_card( $nome,$CALID,$qry ) && $qry->Commit() ) { $request->DoResponse( 204 ); } } else //if ( $dav_resource->IsCalendar()) { if ( delete_collection( $nome,$CALID ) && $qry->Commit() ) { $request->DoResponse( 204 ); } } } else { if ( (isset($request->etag_if_match) && $request->etag_if_match != $dav_resource->unique_tag() ) ) { $request->DoResponse( 412, translate("Resource has changed on server - not deleted") ); } } $request->DoResponse( 500 );