Skip to content

Commit

Permalink
Add support for SMF 2.1
Browse files Browse the repository at this point in the history
  • Loading branch information
realdigger committed Sep 18, 2022
1 parent 8a6aabf commit 738ddf8
Show file tree
Hide file tree
Showing 17 changed files with 445 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
/**
* @package Microdata 4 SMF
* @file: Mod-Microdata4Smf.php
* @author digger http://mysmf.net
* @copyright 2014-2017
* @author digger https://mysmf.net
* @copyright 2014-2022
* @license The MIT License (MIT) https://opensource.org/licenses/MIT
* @version 1.0
* @version 1.0.1
*/

// http://www.google.com/webmasters/tools/richsnippets
Expand All @@ -14,8 +14,9 @@
// http://vk.com/dev/pages.clearCache
// https://support.google.com/webmasters/answer/146645?hl=ru

if (!defined('SMF'))
if (!defined('SMF')) {
die('Hacking attempt...');
}

/**
* Adds mod copyright to the forum credit's page
Expand All @@ -24,8 +25,9 @@ function addMicrodata4SmfCopyright()
{
global $context;

if ($context['current_action'] == 'credits')
$context['copyrights']['mods'][] = '<a href="https://mysmf.net/mods/microdata-4-smf" target="_blank">Microdata 4 SMF</a> &copy; 2014-2017, digger';
if ($context['current_action'] == 'credits') {
$context['copyrights']['mods'][] = '<a href="https://mysmf.net/mods/microdata-4-smf" target="_blank">Microdata 4 SMF</a> &copy; 2014-2022, digger';
}
}


Expand All @@ -46,9 +48,9 @@ function loadMicrodata4SmfHooks()
function addMicrodata4SmfAdminArea(&$admin_areas)
{
global $txt;
loadLanguage('Microdata4Smf/');
loadLanguage('Microdata4Smf/Microdata4Smf');

$admin_areas['config']['areas']['modsettings']['subsections']['microdata4smf'] = array($txt['microdata4smf_admin_menu']);
$admin_areas['config']['areas']['modsettings']['subsections']['microdata4smf'] = [$txt['microdata4smf_admin_menu']];
}


Expand All @@ -65,22 +67,23 @@ function addMicrodata4SmfAdminAction(&$subActions)
function addMicrodata4SmfAdminSettings($return_config = false)
{
global $txt, $scripturl, $context;
loadLanguage('Microdata4Smf/');
loadLanguage('Microdata4Smf/Microdata4Smf');

$context['page_title'] = $txt['microdata4smf_admin_menu'];
$context['post_url'] = $scripturl . '?action=admin;area=modsettings;save;sa=microdata4smf';

$config_vars = array(
array('title', 'microdata4smf_settings'),
array('text', 'microdata4smf_logo'),
array('check', 'microdata4smf_logo_attachment'), // validate value // if (!empty($modSettings['attachmentEnable'])
array('check', 'microdata4smf_logo_img'),
array('large_text', 'microdata4smf_description'),
array('text', 'microdata4smf_twitter'),
);

if ($return_config)
$context['post_url'] = $scripturl . '?action=admin;area=modsettings;save;sa=microdata4smf';

$config_vars = [
['title', 'microdata4smf_settings'],
['text', 'microdata4smf_logo'],
['check', 'microdata4smf_logo_attachment'], // validate value // if (!empty($modSettings['attachmentEnable'])
['check', 'microdata4smf_logo_img'],
['large_text', 'microdata4smf_description'],
['text', 'microdata4smf_twitter'],
];

if ($return_config) {
return $config_vars;
}

if (isset($_GET['save'])) {
checkSession();
Expand All @@ -101,49 +104,82 @@ function setMicrodata4SmfMetaOg()

// TODO: Don't set og meta for media pages
// TODO: check if we have Optimus Brave installed
if ($context['current_action'] == 'media' && !empty($_REQUEST['sa']) && !empty($_REQUEST['in'])) return;
if ($context['current_action'] == 'media' && !empty($_REQUEST['sa']) && !empty($_REQUEST['in'])) {
return;
}

// Set og:site_name
$og_site_name = $context['forum_name'];

// Set og:title
// TODO: use safe values
if (!empty($context['subject'])) $og_title = $context['subject'];
else if (!empty($context['page_title'])) $og_title = $context['page_title'];
else if (!empty($context['page_title_html_safe'])) $og_title = $context['page_title_html_safe'];
else $og_title = $mbname;
if (!empty($context['subject'])) {
$og_title = $context['subject'];
} else {
if (!empty($context['page_title'])) {
$og_title = $context['page_title'];
} else {
if (!empty($context['page_title_html_safe'])) {
$og_title = $context['page_title_html_safe'];
} else {
$og_title = $mbname;
}
}
}

// Set og:type
if (!empty($context['current_topic'])) $og_type = 'article';
else $og_type = 'website';
if (!empty($context['current_topic'])) {
$og_type = 'article';
} else {
$og_type = 'website';
}

// Set og:description
// TODO: use safe values
if (!empty($context['is_poll'])) $og_description = $txt['poll'] . ': ' . $context['poll']['question'];
else if (!empty($context['first_message'])) {
$og_body = getMicrodata4SmfDescription($context['first_message']);
$og_description = $og_body['description'];
} else if (!empty($modSettings['microdata4smf_description'])) $og_description = $modSettings['microdata4smf_description'];
else $og_description = $og_title;
if (!empty($context['is_poll'])) {
$og_description = $txt['poll'] . ': ' . $context['poll']['question'];
} else {
if (!empty($context['first_message'])) {
$og_body = getMicrodata4SmfDescription($context['first_message']);
$og_description = $og_body['description'];
} else {
if (!empty($modSettings['microdata4smf_description'])) {
$og_description = $modSettings['microdata4smf_description'];
} else {
$og_description = $og_title;
}
}
}
// TODO: Boards description

// Set og:image
// TODO: first_message -> topic_first_message ??? First on page or first of topic ? is_image
if (!empty($modSettings['microdata4smf_logo_attachment']) && !empty($context['first_message']) && !empty($attachments[$context['first_message']][0]['width']) && !empty($attachments[$context['first_message']][0]['approved']) && $attachments[$context['first_message']][0]['width'] >= 200 && $attachments[$context['first_message']][0]['height'] >= 200)
if (!empty($modSettings['microdata4smf_logo_attachment']) && !empty($context['first_message']) && !empty($attachments[$context['first_message']][0]['width']) && !empty($attachments[$context['first_message']][0]['approved']) && $attachments[$context['first_message']][0]['width'] >= 200 && $attachments[$context['first_message']][0]['height'] >= 200) {
$og_image = $scripturl . '?action=dlattach;topic=' . $context['current_topic'] . '.0;attach=' . $attachments[$context['first_message']][0]['id_attach'] . ';image';
else if (!empty($modSettings['microdata4smf_logo_img']) && !empty($og_body['image']))
$og_image = $og_body['image'];
else if (!empty($modSettings['microdata4smf_logo'])) $og_image = trim($modSettings['microdata4smf_logo']);
else if (!empty($context['header_logo_url_html_safe'])) $og_image = $context['header_logo_url_html_safe'];
else $og_image = $settings['images_url'] . '/smflogo.png"'; // TODO: Default images url!
} else {
if (!empty($modSettings['microdata4smf_logo_img']) && !empty($og_body['image'])) {
$og_image = $og_body['image'];
} else {
if (!empty($modSettings['microdata4smf_logo'])) {
$og_image = trim($modSettings['microdata4smf_logo']);
} else {
if (!empty($context['header_logo_url_html_safe'])) {
$og_image = $context['header_logo_url_html_safe'];
} else {
$og_image = $settings['images_url'] . '/smflogo.png"';
}
}
}
} // TODO: Default images url!


// TODO: og:updated_time

// Set og:url if we have canonical
if (!empty($context['canonical_url']))
if (!empty($context['canonical_url'])) {
$context['html_headers'] .= '
<meta property="og:url" content="' . $context['canonical_url'] . '" />';
}

$context['html_headers'] .= '
<meta property="og:site_name" content="' . $og_site_name . '" />
Expand All @@ -162,10 +198,14 @@ function setMicrodata4SmfMetaTwitter()
{
global $smcFunc, $context, $modSettings;

if (empty($modSettings['microdata4smf_twitter'])) return;
if (empty($modSettings['microdata4smf_twitter'])) {
return;
}

$modSettings['microdata4smf_twitter'] = trim($modSettings['microdata4smf_twitter']);
if ($smcFunc['substr']($modSettings['microdata4smf_twitter'], 0, 1) != '@') $modSettings['microdata4smf_twitter'] = '@' . $modSettings['microdata4smf_twitter'];
if ($smcFunc['substr']($modSettings['microdata4smf_twitter'], 0, 1) != '@') {
$modSettings['microdata4smf_twitter'] = '@' . $modSettings['microdata4smf_twitter'];
}

$context['html_headers'] .= '
<meta name="twitter:card" content="summary" />
Expand All @@ -184,32 +224,37 @@ function getMicrodata4SmfDescription($id_msg)
{
global $smcFunc, $modSettings;

$request = $smcFunc['db_query']('', '
$request = $smcFunc['db_query'](
'', '
SELECT ' . (!empty($modSettings['microdata4smf_logo_img']) ? 'body ' : 'SUBSTRING(body, 1, 250) ') . '
FROM {db_prefix}messages
WHERE id_msg = {int:id_msg}
LIMIT 1',
array(
[
'id_msg' => (int)$id_msg
)
]
);

list ($description) = $smcFunc['db_fetch_row']($request);
$smcFunc['db_free_result']($request);

preg_match('/\[img.*](.+)\[\/img]/i', $description, $image);
if (!empty($image[1])) $image = trim($image[1]);
if (!empty($image[1])) {
$image = trim($image[1]);
}

$description = strip_tags(str_replace(array('<br>', '<br/>', '<br />', '<hr>', '<hr/>', '<hr />'), '. ', parse_bbc($description, false)));
$description = strip_tags(
str_replace(['<br>', '<br/>', '<br />', '<hr>', '<hr/>', '<hr />'], '. ', parse_bbc($description, false))
);

if ($smcFunc['strlen']($description) > 200) {
$description = $smcFunc['substr']($description, 0, 197);
$position = $smcFunc['strpos']($description, ' ', $smcFunc['strlen']($description) - 15);
$position = $smcFunc['strpos']($description, ' ', $smcFunc['strlen']($description) - 15);
$description = $smcFunc['substr']($description, 0, $position);
}

return array(
return [
'description' => trim($description) . '...',
'image' => $image,
);
'image' => $image,
];
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
<?php
/**
* @package Microdata 4 SMF
* @file: .russian.php
* @file: .russian-utf8.php
* @author digger http://mysmf.net
* @copyright 2014-2017
* @license The MIT License (MIT) https://opensource.org/licenses/MIT
* @version 1.0
*/

$txt['microdata4smf_settings'] = 'Microdata 4 Smf';
$txt['microdata4smf_logo'] = 'Ссылка на файл с изображением, которое будет использовано по умолчанию для главной страницы сайта и сообщений без графических вложений';
$txt['microdata4smf_logo'] = 'Ссылка на файл с изображением, которое будет использовано по умолчанию для главной страницы сайта и сообщений без графических вложений (рекомендуется использовать изображение с пропорциями близкими к квадрату и размером не менее 200x200px)';
$txt['microdata4smf_description'] = 'Текст для описания главной страницы сайта. Также, будет использоваться для всех страниц не имеющих своего описания';
$txt['microdata4smf_twitter'] = 'Имя вашего twitter аккаунта (<a href="https://cards-dev.twitter.com/validator">Перейти на страницу проверки и подтверждения твиттер-карточек</a>)';
$txt['microdata4smf_logo_img'] = 'Картинка из первого тэга img';
$txt['microdata4smf_logo_img'] = 'Картинка из первого тэга img. Если включена опция искать во вложении, она имеет более высокий приоритет.';
$txt['microdata4smf_logo_attachment'] = 'Использовать первое графическое вложение первого сообщения на странице как картинку статьи (если не включено, будет использовано изображение, заданное по умолчанию). Требуется разрешение <a href="?action=admin;area=permissions;sa=modify;group=-1">гостям</a> на просмотр вложений';
$txt['microdata4smf_admin_menu'] = 'Microdata 4 SMF';
$txt['microdata4smf_publisher'] = 'Адрес вашей бизнес страницы в Google+ для тэга rel="publisher" (если не знаете зачем это, оставьте поле пустым!). <a href="https://support.google.com/business/answer/4569085?hl=ru">Подробнее</a>';
5 changes: 3 additions & 2 deletions hooks.php → Install/SMF_2.0/hooks.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@
if ((SMF == 'SSI') && !$user_info['is_admin'])
die('Admin privileges required.');

if (!empty($context['uninstalling']))
if (!empty($context['uninstalling'])) {
$call = 'remove_integration_function';
else
} else {
$call = 'add_integration_function';
}

$hooks = array(
'integrate_pre_include' => '$sourcedir/Mod-Microdata4Smf.php',
Expand Down
File renamed without changes.

0 comments on commit 738ddf8

Please sign in to comment.