diff --git a/fulcrm_webhook.module b/fulcrm_webhook.module index d2ce2d2..24e61b1 100644 --- a/fulcrm_webhook.module +++ b/fulcrm_webhook.module @@ -36,6 +36,39 @@ function fulcrm_webhook_menu() { return $items; } +function fulcrm_webhook_get_pk_for_entity_type( $entity_type, $entity_id, $fulcrm_type ) { + $query = db_select( 'fulcrm_webhook_entity_mapping', 'fwem' ) + ->fields( 'fwem', array( 'fulcrm_pk' ) ) + ->condition( 'entity_type', $entity_type ) + ->condition( 'entity_id', $entity_id ) + ->condition( 'fulcrm_type', $fulcrm_type ); + $result = $query->execute(); + return $result->fetchField(); +} + +function fulcrm_webhook_find_entity( $data ) { + if ( array_key_exists( 'url', $data ) ) { + $url = $data[ 'url' ]; + $fulcrm_type = fulcrm_apiv2_url_to_type( $url ); + $fulcrm_pk = fulcrm_apiv2_url_to_pk( $url ); + + $query = db_select( 'fulcrm_webhook_entity_mapping', 'fwem' ) + ->fields( 'fwem', array( 'entity_type', 'entity_id' ) ) + ->condition( 'fulcrm_type', $fulcrm_type ) + ->condition( 'fulcrm_pk', $fulcrm_pk ); + + $result = $query->execute(); + foreach ( $result as $row ) { + return entity_load( $row->entity_type, array( $row->entity_id ) ); + } + + module_invoke_all( 'fulcrm_find_entity', $fulcrm_type, $fulcrm_pk ); + } +} + +function fulcrm_webhook_fulcrm_find_entity( $fulcrm_type, $fulcrm_pk ) { +} + function fulcrm_webhook_webhook( $uuid ) { if ( $uuid === variable_get( 'fulcrm_webhook_url' ) ) { $headers = getallheaders(); @@ -52,24 +85,34 @@ function fulcrm_webhook_webhook( $uuid ) { $client_id = variable_get( 'fulcrm_apiv2_client_id' ); if ( fulcrm_apiv2_prevent_loop( $headers ) ) { + $op = null; + switch ( $method ) { case 'GET': - drupal_json_output( array( "status" => "error", "info" => "GET requests do nothing; webhooks must be POST, PATCH, PUT, or DELETE" ) ); + drupal_json_output( array( "status" => "error", "info" => "GET requests do nothing; webhooks must POST, PATCH, PUT, or DELETE" ) ); break; case 'DELETE': + $op = 'DELETE'; + break; case 'POST': + $op = 'CREATE'; + break; case 'PATCH': case 'PUT': + $op = 'UPDATE'; + break; + default: + drupal_json_output( array( 'status' => 'error', 'info' => 'unsupported method' ) ); + break; + } + + if ( $op ) { if ( $payload === null ) { drupal_json_output( array( 'status' => 'error', 'info' => $payload_error_msg ) ); } else { // actually do something :) drupal_json_output( array( 'status' => 'ok', 'headers' => $headers, 'method' => $method ) ); } - break; - default: - drupal_json_output( array( 'status' => 'error', 'info' => 'unsupported method' ) ); - break; } } else { drupal_json_output( array( 'status' => 'ok', 'info' => 'loop prevention' ) );