Add a type to webmentions
This commit is contained in:
		
							parent
							
								
									38885beb74
								
							
						
					
					
						commit
						9d9e465a37
					
				@ -11,6 +11,7 @@ use Symfony\Component\HttpClient\HttpClient;
 | 
				
			|||||||
use League\Uri\Uri;
 | 
					use League\Uri\Uri;
 | 
				
			||||||
use Lewisdale\Webmentions\Exceptions\SourceNotFoundException;
 | 
					use Lewisdale\Webmentions\Exceptions\SourceNotFoundException;
 | 
				
			||||||
use Lewisdale\Webmentions\Exceptions\TargetNotMentionedException;
 | 
					use Lewisdale\Webmentions\Exceptions\TargetNotMentionedException;
 | 
				
			||||||
 | 
					use Lewisdale\Webmentions\Models\MentionType;
 | 
				
			||||||
use Symfony\Component\DomCrawler\Crawler;
 | 
					use Symfony\Component\DomCrawler\Crawler;
 | 
				
			||||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
 | 
					use Symfony\Contracts\HttpClient\HttpClientInterface;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -56,7 +57,7 @@ class Endpoint {
 | 
				
			|||||||
            $content = $this->parseContent($response->getContent(), $target);
 | 
					            $content = $this->parseContent($response->getContent(), $target);
 | 
				
			||||||
            $author = $this->parseAuthor($response->getContent());
 | 
					            $author = $this->parseAuthor($response->getContent());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $webmention = new Webmention(null, $target, $source, $content, $author);
 | 
					            $webmention = new Webmention(null, $target, $source, MentionType::from(""), $content, $author);
 | 
				
			||||||
            $this->gateway->save($webmention);
 | 
					            $this->gateway->save($webmention);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            throw new SourceNotFoundException();
 | 
					            throw new SourceNotFoundException();
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@
 | 
				
			|||||||
namespace Lewisdale\Webmentions\Gateways;
 | 
					namespace Lewisdale\Webmentions\Gateways;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use Exception;
 | 
					use Exception;
 | 
				
			||||||
 | 
					use Lewisdale\Webmentions\Models\MentionType;
 | 
				
			||||||
use Lewisdale\Webmentions\Models\Webmention;
 | 
					use Lewisdale\Webmentions\Models\Webmention;
 | 
				
			||||||
use PDO;
 | 
					use PDO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -23,6 +24,7 @@ class SqliteGateway extends WebmentionGatewayInterface {
 | 
				
			|||||||
            id INTEGER PRIMARY KEY,
 | 
					            id INTEGER PRIMARY KEY,
 | 
				
			||||||
            target TEXT NOT NULL,
 | 
					            target TEXT NOT NULL,
 | 
				
			||||||
            source TEXT NOT NULL,
 | 
					            source TEXT NOT NULL,
 | 
				
			||||||
 | 
					            type TEXT NOT NULL,
 | 
				
			||||||
            content TEXT,
 | 
					            content TEXT,
 | 
				
			||||||
            author TEXT
 | 
					            author TEXT
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
@ -44,6 +46,7 @@ class SqliteGateway extends WebmentionGatewayInterface {
 | 
				
			|||||||
                $row["id"],
 | 
					                $row["id"],
 | 
				
			||||||
                $row["target"],
 | 
					                $row["target"],
 | 
				
			||||||
                $row["source"],
 | 
					                $row["source"],
 | 
				
			||||||
 | 
					                MentionType::from($row["type"]),
 | 
				
			||||||
                $row["content"],
 | 
					                $row["content"],
 | 
				
			||||||
                $row["author"]
 | 
					                $row["author"]
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
@ -65,6 +68,7 @@ class SqliteGateway extends WebmentionGatewayInterface {
 | 
				
			|||||||
                $row["id"],
 | 
					                $row["id"],
 | 
				
			||||||
                $row["target"],
 | 
					                $row["target"],
 | 
				
			||||||
                $row["source"],
 | 
					                $row["source"],
 | 
				
			||||||
 | 
					                MentionType::from($row["type"]),
 | 
				
			||||||
                $row["content"],
 | 
					                $row["content"],
 | 
				
			||||||
                $row["author"]
 | 
					                $row["author"]
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
@ -78,13 +82,20 @@ class SqliteGateway extends WebmentionGatewayInterface {
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $sql = <<< SQL
 | 
					        $sql = <<< SQL
 | 
				
			||||||
        INSERT INTO webmentions
 | 
					        INSERT INTO webmentions
 | 
				
			||||||
            (id, target, source, content, author)
 | 
					            (id, target, source, type, content, author)
 | 
				
			||||||
        VALUES
 | 
					        VALUES
 | 
				
			||||||
            (:id, :target, :source, :content, :author);
 | 
					            (:id, :target, :source, :type, :content, :author);
 | 
				
			||||||
        SQL;
 | 
					        SQL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $statement = $this->connection->prepare($sql);
 | 
					        $statement = $this->connection->prepare($sql);
 | 
				
			||||||
        $success = $statement->execute((array) $webmention);
 | 
					        $success = $statement->execute([
 | 
				
			||||||
 | 
					            "id" => $webmention->id,
 | 
				
			||||||
 | 
					            "target" => $webmention->target,
 | 
				
			||||||
 | 
					            "source" => $webmention->source,
 | 
				
			||||||
 | 
					            "type" => $webmention->type->toString(),
 | 
				
			||||||
 | 
					            "content" => $webmention->content,
 | 
				
			||||||
 | 
					            "author" => $webmention->author,
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
        $statement->closeCursor();
 | 
					        $statement->closeCursor();
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
        return $success ? (int) $this->connection->lastInsertId() : null;
 | 
					        return $success ? (int) $this->connection->lastInsertId() : null;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										31
									
								
								src/Models/MentionType.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/Models/MentionType.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					<?php declare(strict_types=1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Lewisdale\Webmentions\Models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum MentionType {
 | 
				
			||||||
 | 
					    case Like;
 | 
				
			||||||
 | 
					    case Comment;
 | 
				
			||||||
 | 
					    case Reply;
 | 
				
			||||||
 | 
					    case Mention;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function toString() : string
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return match ($this) {
 | 
				
			||||||
 | 
					            MentionType::Like => "like",
 | 
				
			||||||
 | 
					            MentionType::Comment => "comment",
 | 
				
			||||||
 | 
					            MentionType::Reply => "reply",
 | 
				
			||||||
 | 
					            MentionType::Mention => "mention"
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static function from(string $string) : MentionType
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        switch($string) {
 | 
				
			||||||
 | 
					            case "like": return MentionType::Like;
 | 
				
			||||||
 | 
					            case "comment": return MentionType::Comment;
 | 
				
			||||||
 | 
					            case "reply": return MentionType::Reply;
 | 
				
			||||||
 | 
					            default: return MentionType::Mention;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
@ -7,6 +7,7 @@ class Webmention {
 | 
				
			|||||||
        public ?int $id,
 | 
					        public ?int $id,
 | 
				
			||||||
        public string $target, // The target post
 | 
					        public string $target, // The target post
 | 
				
			||||||
        public string $source,
 | 
					        public string $source,
 | 
				
			||||||
 | 
					        public MentionType $type,
 | 
				
			||||||
        public ?string $content,
 | 
					        public ?string $content,
 | 
				
			||||||
        public ?string $author, // TODO: Should be reference to another model
 | 
					        public ?string $author, // TODO: Should be reference to another model
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@ error_reporting(E_ALL); ini_set('display_errors',1);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use Lewisdale\Webmentions\Gateways\SqliteGateway;
 | 
					use Lewisdale\Webmentions\Gateways\SqliteGateway;
 | 
				
			||||||
 | 
					use Lewisdale\Webmentions\Models\MentionType;
 | 
				
			||||||
use Lewisdale\Webmentions\Models\Webmention;
 | 
					use Lewisdale\Webmentions\Models\Webmention;
 | 
				
			||||||
use PHPUnit\Framework\TestCase;
 | 
					use PHPUnit\Framework\TestCase;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -24,6 +25,7 @@ class SqliteGatewayTest extends TestCase
 | 
				
			|||||||
            null,
 | 
					            null,
 | 
				
			||||||
            "https://lewisdale.dev/post/a-post",
 | 
					            "https://lewisdale.dev/post/a-post",
 | 
				
			||||||
            "https://a-source.url",
 | 
					            "https://a-source.url",
 | 
				
			||||||
 | 
					            MentionType::Like,
 | 
				
			||||||
            "No content",
 | 
					            "No content",
 | 
				
			||||||
            "Some Author Name"
 | 
					            "Some Author Name"
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
@ -38,6 +40,7 @@ class SqliteGatewayTest extends TestCase
 | 
				
			|||||||
            null,
 | 
					            null,
 | 
				
			||||||
            "https://lewisdale.dev/post/a-post",
 | 
					            "https://lewisdale.dev/post/a-post",
 | 
				
			||||||
            "https://a-source.url",
 | 
					            "https://a-source.url",
 | 
				
			||||||
 | 
					            MentionType::Like,
 | 
				
			||||||
            "No content",
 | 
					            "No content",
 | 
				
			||||||
            "Some Author Name"
 | 
					            "Some Author Name"
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
@ -55,6 +58,7 @@ class SqliteGatewayTest extends TestCase
 | 
				
			|||||||
            null,
 | 
					            null,
 | 
				
			||||||
            "https://lewisdale.dev/post/a-post",
 | 
					            "https://lewisdale.dev/post/a-post",
 | 
				
			||||||
            "https://a-source.url",
 | 
					            "https://a-source.url",
 | 
				
			||||||
 | 
					            MentionType::Like,
 | 
				
			||||||
            "No content",
 | 
					            "No content",
 | 
				
			||||||
            "Some Author Name"
 | 
					            "Some Author Name"
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
@ -74,6 +78,7 @@ class SqliteGatewayTest extends TestCase
 | 
				
			|||||||
                null,
 | 
					                null,
 | 
				
			||||||
                "https://lewisdale.dev/post/a-new-post",
 | 
					                "https://lewisdale.dev/post/a-new-post",
 | 
				
			||||||
                "https://a-source.url",
 | 
					                "https://a-source.url",
 | 
				
			||||||
 | 
					                MentionType::Comment,
 | 
				
			||||||
                "No content",
 | 
					                "No content",
 | 
				
			||||||
                "Some Author Name"
 | 
					                "Some Author Name"
 | 
				
			||||||
            ));
 | 
					            ));
 | 
				
			||||||
@ -84,6 +89,7 @@ class SqliteGatewayTest extends TestCase
 | 
				
			|||||||
                null,
 | 
					                null,
 | 
				
			||||||
                "https://lewisdale.dev/post/a-different-post",
 | 
					                "https://lewisdale.dev/post/a-different-post",
 | 
				
			||||||
                "https://a-source.url",
 | 
					                "https://a-source.url",
 | 
				
			||||||
 | 
					                MentionType::Like,
 | 
				
			||||||
                "No content",
 | 
					                "No content",
 | 
				
			||||||
                "Some Author Name"
 | 
					                "Some Author Name"
 | 
				
			||||||
            ));
 | 
					            ));
 | 
				
			||||||
@ -100,6 +106,7 @@ class SqliteGatewayTest extends TestCase
 | 
				
			|||||||
            null,
 | 
					            null,
 | 
				
			||||||
            "https://lewisdale.dev/post/a-new-post",
 | 
					            "https://lewisdale.dev/post/a-new-post",
 | 
				
			||||||
            "https://a-source.url",
 | 
					            "https://a-source.url",
 | 
				
			||||||
 | 
					            MentionType::Reply,
 | 
				
			||||||
            "No content",
 | 
					            "No content",
 | 
				
			||||||
            "Some Author Name"
 | 
					            "Some Author Name"
 | 
				
			||||||
        ));
 | 
					        ));
 | 
				
			||||||
@ -108,6 +115,7 @@ class SqliteGatewayTest extends TestCase
 | 
				
			|||||||
            null,
 | 
					            null,
 | 
				
			||||||
            "https://lewisdale.dev/post/a-new-post",
 | 
					            "https://lewisdale.dev/post/a-new-post",
 | 
				
			||||||
            "https://a-different-source.url",
 | 
					            "https://a-different-source.url",
 | 
				
			||||||
 | 
					            MentionType::Like,
 | 
				
			||||||
            "No content",
 | 
					            "No content",
 | 
				
			||||||
            "Some Author Name"
 | 
					            "Some Author Name"
 | 
				
			||||||
        ));
 | 
					        ));
 | 
				
			||||||
@ -116,6 +124,7 @@ class SqliteGatewayTest extends TestCase
 | 
				
			|||||||
            null,
 | 
					            null,
 | 
				
			||||||
            "https://lewisdale.dev/post/a-new-post",
 | 
					            "https://lewisdale.dev/post/a-new-post",
 | 
				
			||||||
            "https://a-source.url",
 | 
					            "https://a-source.url",
 | 
				
			||||||
 | 
					            MentionType::Comment,
 | 
				
			||||||
            "Some content",
 | 
					            "Some content",
 | 
				
			||||||
            "Some Author Name"
 | 
					            "Some Author Name"
 | 
				
			||||||
        ));
 | 
					        ));
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user