Skip to content

Commit

Permalink
Merge pull request #7 from jslirola/beta15
Browse files Browse the repository at this point in the history
Update for Flarum beta 15
  • Loading branch information
jslirola committed Mar 1, 2021
2 parents f063e38 + 07f38c0 commit ef27530
Show file tree
Hide file tree
Showing 6 changed files with 187 additions and 143 deletions.
6 changes: 4 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "jslirola/flarum-ext-login2seeplus",
"description": "Make posts hidden for visitors.",
"type": "flarum-extension",
"keywords": ["discussion"],
"license": "MIT",
"authors": [
{
Expand All @@ -10,10 +11,11 @@
],
"support": {
"issues": "https://github.com/jslirola/flarum-ext-login2seeplus/issues",
"source": "https://github.com/jslirola/flarum-ext-login2seeplus"
"source": "https://github.com/jslirola/flarum-ext-login2seeplus",
"forum": "https://discuss.flarum.org/d/24193-login-2-see-plus"
},
"require": {
"flarum/core": "^0.1.0-beta.14"
"flarum/core": "^0.1.0-beta.15"
},
"extra": {
"flarum-extension": {
Expand Down
30 changes: 21 additions & 9 deletions extend.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<?php

/*
* This file is part of jslirola/flarum-ext-login2seeplus.
* This file is part of jslirola/flarum-ext-login2seeplus.
*
* Copyright (c) 2020
* Original Extension by WiseClock
* Original Extension by WiseClock
* Updated by jslirola
*
* For the full copyright and license information, please view the LICENSE
Expand All @@ -13,10 +13,13 @@

namespace JSLirola\Login2SeePlus;

use Flarum\Api\Serializer\BasicPostSerializer;
use Flarum\Api\Serializer\ForumSerializer;
use Flarum\Api\Serializer\PostSerializer;
use Flarum\Extend;
use Flarum\Api\Event\Serializing;
use Illuminate\Contracts\Events\Dispatcher;
use JSLirola\Login2SeePlus\Listeners\LoadSettingsFromDatabase;
use JSLirola\Login2SeePlus\HideContentInPosts;
use JSLirola\Login2SeePlus\HideContentInPostPreviews;

return [
(new Extend\Frontend('forum'))
Expand All @@ -27,10 +30,19 @@
->js(__DIR__ . '/js/dist/admin.js')
->css(__DIR__ . '/less/login2seeplus-settings.less'),

new Extend\Locales(__DIR__ . '/locale'),
(new Extend\Locales(__DIR__ . '/locale')),

function (Dispatcher $events) {
$events->listen(Serializing::class, LoadSettingsFromDatabase::class);
}
(new Extend\Settings())
->serializeToForum('jslirola.login2seeplus.post', 'jslirola.login2seeplus.post')
->serializeToForum('jslirola.login2seeplus.link', 'jslirola.login2seeplus.link')
->serializeToForum('jslirola.login2seeplus.image', 'jslirola.login2seeplus.image')
->serializeToForum('jslirola.login2seeplus.php', 'jslirola.login2seeplus.php')
->serializeToForum('jslirola.login2seeplus.code', 'jslirola.login2seeplus.code'),

];
(new Extend\ApiSerializer(PostSerializer::class))
->mutate(HideContentInPosts::class),

(new Extend\ApiSerializer(BasicPostSerializer::class))
->mutate(HideContentInPostPreviews::class),

];
54 changes: 54 additions & 0 deletions src/FormatContent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

/*
* This file is part of jslirola/flarum-ext-login2seeplus.
*
* Copyright (c) 2020
* Original Extension by WiseClock
* Updated by jslirola
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace JSLirola\Login2SeePlus;

use Flarum\Api\Serializer\PostSerializer;
use Flarum\Settings\SettingsRepositoryInterface;
use Symfony\Component\Translation\TranslatorInterface;

class FormatContent
{
public function __construct()
{
$this->settings = app(SettingsRepositoryInterface::class);
$this->translator = app(TranslatorInterface::class);
}

protected function truncate_html($string, $length)
{
$string = trim($string);
$i = 0;
$tags = array();

preg_match_all('/<[^>]+>([^<]*)/', $string, $tagMatches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
foreach($tagMatches as $tagMatch)
{
if ($tagMatch[0][1] - $i >= $length)
break;
$tag = mb_substr(strtok($tagMatch[0][0], " \t\n\r\0\x0B>"), 1);
if ($tag[0] != '/')
$tags[] = $tag;
elseif (end($tags) == mb_substr($tag, 1))
array_pop($tags);
$i += $tagMatch[1][1] - $tagMatch[0][1];
}

return mb_substr($string, 0, $length = min(mb_strlen($string), $length + $i)) . (count($tags = array_reverse($tags)) ? '</' . implode('></', $tags) . '>' : '');
}

protected function get_link($trans)
{
return '<a class="l2sp">' . $this->translator->trans($trans) . '</a>';
}
}
36 changes: 36 additions & 0 deletions src/HideContentInPostPreviews.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

/*
* This file is part of jslirola/flarum-ext-login2seeplus.
*
* Copyright (c) 2020
* Original Extension by WiseClock
* Updated by jslirola
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace JSLirola\Login2SeePlus;

class HideContentInPostPreviews extends FormatContent
{
public function __invoke($serializer, $model, $attributes)
{
$newHTML = $attributes["contentHtml"];

if (!$serializer->getActor()->isGuest())
return $attributes;

$s_summary_links = $this->settings->get('jslirola.login2seeplus.link', false);

if (!is_null($newHTML) && $s_summary_links == 1)
$newHtml = preg_replace('/(<a((?!PostMention).)*?>)[^<]*<\/a>/is',
'[' . $this->get_link('jslirola-login2seeplus.forum.link') . ']', $newHtml);

$attributes['contentHtml'] = $newHTML;

return $attributes;
}

}
72 changes: 72 additions & 0 deletions src/HideContentInPosts.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php

/*
* This file is part of jslirola/flarum-ext-login2seeplus.
*
* Copyright (c) 2020
* Original Extension by WiseClock
* Updated by jslirola
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace JSLirola\Login2SeePlus;

class HideContentInPosts extends FormatContent
{
public function __invoke($serializer, $model, $attributes)
{
$newHTML = $attributes['contentHtml'];

if (!$serializer->getActor()->isGuest())
return $attributes;

$s_php = $this->settings->get('jslirola.login2seeplus.php', false);
if (!$s_php)
return $attributes;

$s_post = (int)$this->settings->get('jslirola.login2seeplus.post', 100);
$s_link = $this->settings->get('jslirola.login2seeplus.link', false);
$s_image = $this->settings->get('jslirola.login2seeplus.image', false);
$s_code = $this->settings->get('jslirola.login2seeplus.code', false);

// truncate
if ($s_post != -1 && function_exists('mb_substr') && function_exists('mb_strlen')) {
$newHTML = $this->truncate_html($newHTML, $s_post);
$newHTML = preg_replace('/(<p>)([^<]*)<\/p>$/is', '$1$2...$3', $newHTML);
}

// links
if ($s_link == 1) {
$newHTML = preg_replace('/(<a((?!PostMention).)*?>)[^<]*<\/a>/is', $this->get_link('jslirola-login2seeplus.forum.link'), $newHTML);
// $newHTML = preg_replace('/<GOOGLEDRIVE(.*?)>[^>]*<\/GOOGLEDRIVE>/is', $this->get_link('jslirola-login2seeplus.forum.link'), $newHTML);
// $newHTML = preg_replace('/<GOOGLESHEETS(.*?)>[^>]*<\/GOOGLESHEETS>/is', $this->get_link('jslirola-login2seeplus.forum.link'), $newHTML);
$newHTML = preg_replace('/<span data-s9e-mediaembed=(.*?)><span (.*?)><iframe(.*?)><\/iframe><\/span><\/span>/is', $this->get_link('jslirola-login2seeplus.forum.link'), $newHTML);
$newHTML = preg_replace('/<iframe data-s9e-mediaembed=(.*?)><\/iframe>/is', $this->get_link('jslirola-login2seeplus.forum.link'), $newHTML);
} elseif ($s_link == 2) // hide address
$newHTML = preg_replace('/<a href=".*?"/is', '<a class="l2sp"', $newHTML);

// images
if ($s_image)
$newHTML = preg_replace('/<img((.(?!class=))*)\/?>/is', '<div class="jslirolaLogin2seeplusImgPlaceholder">' . $this->get_link('jslirola-login2seeplus.forum.image') . '</div>', $newHTML);

// code
if ($s_code) {
$newHTML = preg_replace('/<pre><code(.*?)>[^>]*<\/pre>/is', $this->get_link('jslirola-login2seeplus.forum.code'), $newHTML);
$newHTML = preg_replace('/<code(.*?)>[^>]*<\/code>/is', $this->get_link('jslirola-login2seeplus.forum.code'), $newHTML);
}

// show alert
if ($s_post != -1)
$newHTML .= '<div class="jslirolaLogin2seeplusAlert">' . $this->translator->trans('jslirola-login2seeplus.forum.post', array(
'{login}' => '<a class="jslirolaLogin2seeplusLogin">' . $this->translator->trans('core.forum.header.log_in_link') . '</a>',
'{register}' => '<a class="jslirolaLogin2seeplusRegister">' . $this->translator->trans('core.forum.header.sign_up_link') . '</a>'
)) . '</div>';

$attributes['contentHtml'] = $newHTML;

return $attributes;
}

}
132 changes: 0 additions & 132 deletions src/Listeners/LoadSettingsFromDatabase.php

This file was deleted.

0 comments on commit ef27530

Please sign in to comment.