From 72dca22ebdfb63704b2e0053fc1c0337c189205a Mon Sep 17 00:00:00 2001
From: Elixcz <109692427+Elixcz@users.noreply.github.com>
Date: Sat, 1 Oct 2022 20:13:35 +0200
Subject: [PATCH] [plugin] Twitter cards update
---
bl-plugins/twitter-cards/languages/cs_CZ.json | 13 +++
bl-plugins/twitter-cards/languages/en.json | 9 +-
bl-plugins/twitter-cards/metadata.json | 4 +-
bl-plugins/twitter-cards/plugin.php | 105 ++++++++++++++----
4 files changed, 105 insertions(+), 26 deletions(-)
create mode 100644 bl-plugins/twitter-cards/languages/cs_CZ.json
diff --git a/bl-plugins/twitter-cards/languages/cs_CZ.json b/bl-plugins/twitter-cards/languages/cs_CZ.json
new file mode 100644
index 00000000..3b3edfcc
--- /dev/null
+++ b/bl-plugins/twitter-cards/languages/cs_CZ.json
@@ -0,0 +1,13 @@
+{
+ "plugin-data":
+ {
+ "name": "Twitter Cards",
+ "description": "With Twitter Cards, you can attach rich photos, videos and media experiences to Tweets, helping to drive traffic to your website."
+ },
+ "default-image": "Výchozí obrázek",
+ "twitter-site-profile": "Profil stránky na Twitteru",
+ "twitter-author-profile": "Profil autora příspěvku na Twitteru",
+ "minimum-image-dimensions": "Minimální rozměry obrázku jsou 300x157px a maximum 4096x4096px.",
+ "image-must-be-less": "Obrázek musí být menší než 5MB.",
+ "formats-are-supported": "Jsou podporovány formáty pouze JPG, PNG, WEBP a GIF."
+}
diff --git a/bl-plugins/twitter-cards/languages/en.json b/bl-plugins/twitter-cards/languages/en.json
index 5f98378d..f314a695 100644
--- a/bl-plugins/twitter-cards/languages/en.json
+++ b/bl-plugins/twitter-cards/languages/en.json
@@ -4,5 +4,10 @@
"name": "Twitter Cards",
"description": "With Twitter Cards, you can attach rich photos, videos and media experiences to Tweets, helping to drive traffic to your website."
},
- "default-image": "Default image"
-}
\ No newline at end of file
+ "default-image": "Default image",
+ "twitter-site-profile": "Twitter site profile",
+ "twitter-author-profile": "Twitter author profile",
+ "minimum-image-dimensions": "The minimum image dimensions are 300x157px and the maximum 4096x4096px.",
+ "image-must-be-less": "Image must be less than 5MB in size.",
+ "formats-are-supported": "JPG, PNG, WEBP and GIF formats are supported."
+}
diff --git a/bl-plugins/twitter-cards/metadata.json b/bl-plugins/twitter-cards/metadata.json
index d62ed64e..5540bdca 100644
--- a/bl-plugins/twitter-cards/metadata.json
+++ b/bl-plugins/twitter-cards/metadata.json
@@ -3,8 +3,8 @@
"email": "",
"website": "https://plugins.bludit.com",
"version": "4.0.0",
- "releaseDate": "2021-05-23",
+ "releaseDate": "2022-10-01",
"license": "MIT",
"compatible": "4.0.0",
"notes": ""
-}
\ No newline at end of file
+}
diff --git a/bl-plugins/twitter-cards/plugin.php b/bl-plugins/twitter-cards/plugin.php
index 26acdc80..754e3df1 100644
--- a/bl-plugins/twitter-cards/plugin.php
+++ b/bl-plugins/twitter-cards/plugin.php
@@ -6,7 +6,9 @@ class pluginTwitterCards extends Plugin {
{
// Fields and default values for the database of this plugin
$this->dbFields = array(
- 'defaultImage'=>''
+ 'defaultImage' => '',
+ 'twitterSite' => '',
+ 'twitterCreator' => ''
);
}
@@ -14,9 +16,24 @@ class pluginTwitterCards extends Plugin {
{
global $L;
- $html = '
';
+ $html = '
';
+ $html .= $this->description();
+ $html .= '
';
+
+ $html .= '
';
$html .= '
';
$html .= '
';
+ $html .= '
' . $L->get('minimum-image-dimensions') . ' ' . $L->get('image-must-be-less') . ' ' . $L->get('formats-are-supported') . '
';
+ $html .= '
';
+
+ $html .= '
';
+ $html .= '';
+ $html .= '';
+ $html .= '
';
+
+ $html .= '
';
+ $html .= '';
+ $html .= '';
$html .= '
';
return $html;
@@ -31,19 +48,20 @@ class pluginTwitterCards extends Plugin {
global $page;
$data = array(
- 'card' =>'summary',
- 'site' =>'',
- 'title' =>$site->title(),
- 'description' =>$site->description(),
- 'image' =>''
+ 'card' => 'summary_large_image',
+ 'twitterSite' => $this->getValue('twitterSite'),
+ 'twitterCreator' => $this->getValue('twitterCreator'),
+ 'title' => $site->title(),
+ 'description' => $site->description(),
+ 'image' => ''
);
- switch($WHERE_AM_I) {
+ switch( $WHERE_AM_I ) {
// The user filter by page
case 'page':
- $data['title'] = $page->title();
- $data['description'] = $page->description();
- $data['image'] = $page->coverImage($absolute=true);
+ $data['title'] = $page->title();
+ $data['description'] = $page->description();
+ $data['image'] = $page->coverImage( $absolute = true );
$pageContent = $page->content();
break;
@@ -53,32 +71,75 @@ class pluginTwitterCards extends Plugin {
$pageContent = '';
// The image it's from the first page
if(isset($content[0]) ) {
- $data['image'] = $content[0]->coverImage($absolute=true);
+ $data['image'] = $content[0]->coverImage( $absolute = true );
$pageContent = $content[0]->content();
}
break;
}
$html = PHP_EOL.''.PHP_EOL;
- $html .= '
'.PHP_EOL;
- $html .= '
'.PHP_EOL;
- $html .= '
'.PHP_EOL;
- $html .= '
'.PHP_EOL;
+ $html .= '
'.PHP_EOL;
+ $html .= '
'.PHP_EOL;
+ $html .= '
'.PHP_EOL;
+ $html .= '
'.PHP_EOL;
+ // If the page doesn't have a description try to get excerpt from content
+ if( empty( $data['description'] ) )
+ {
+ $data['description'] = $this->content_excerpt( $pageContent , 150, '...');
+ }
+ $html .= '
'.PHP_EOL;
// If the page doesn't have a coverImage try to get an image from the HTML content
- if( empty($data['image']) ) {
+ if( empty( $data['image'] ) ) {
// Get the image from the content
- $src = DOM::getFirstImage($pageContent);
- if ($src!==false) {
+ $src = DOM::getFirstImage( $pageContent );
+ if ( $src !== false ) {
$data['image'] = $src;
} else {
- if (Text::isNotEmpty($this->getValue('defaultImage'))) {
+ if ( Text::isNotEmpty( $this->getValue('defaultImage') ) ) {
$data['image'] = $this->getValue('defaultImage');
}
}
}
- $html .= '
'.PHP_EOL;
+ $html .= '
'.PHP_EOL;
+ $html .= ''.PHP_EOL.PHP_EOL;
+
+ unset( $pageContent );
+ unset( $data );
+
return $html;
}
-}
\ No newline at end of file
+
+ /** Return excerpt from full content of post
+ *
+ * @param string $str Post content
+ * @param int $n Number of characters
+ * @param string $endChar End char append to after excerpt (default "...")
+ * @return string
+ */
+ private function content_excerpt( string $str, int $n = 500, string $endChar = '…' ): string
+ {
+ $str = strip_tags( $str );
+ if ( mb_strlen( $str ) < $n )
+ {
+ return $str;
+ }
+ $str = preg_replace('/ {2,}/', ' ', str_replace(["\r", "\n", "\t", "\x0B", "\x0C"], ' ', $str));
+ if ( mb_strlen( $str ) <= $n )
+ {
+ return $str;
+ }
+ $out = '';
+ foreach ( explode( ' ', trim( $str ) ) as $val )
+ {
+ $out .= $val . ' ';
+ if ( mb_strlen( $out ) >= $n )
+ {
+ $out = trim( $out );
+ break;
+ }
+ }
+ return ( mb_strlen( $out ) === mb_strlen( $str ) ) ? $out : $out . $endChar;
+ }
+}