Simple Machines Community Forum

Customizing SMF => Tips and Tricks => Topic started by: GL700Wing on February 02, 2021, 03:26:53 AM

Title: Tip/Trick: Redirection confirmation for boards that redirect to a web address
Post by: GL700Wing on February 02, 2021, 03:26:53 AM
I'm currently in the process of merging two forums for a business and one of the forums had a board that redirected to an owner community Facebook group that is not owned or managed by the business. 

The business has decided they are happy for the redirection board to be retained on the merged forum but they want forum members to be made aware they are being redirected to a web address that the company does not own or manage and to confirm that this is what they want to do.

I love a challenge and after a couple of hours it was a case of mission accomplished!


Important: You must add following columns to the 'smf_boards' table in order for this tip/trick to work!

Name: redirect_confirm
Type: tinyint
Default: 0

Name: redirect_confirm_text
Type: text


In ./Sources/ManageBoards.php

Find:
            'redirect' => '',
Add After:
            'redirect_confirm' => 0,
            'redirect_confirm_text' => '',

Find:
        // Are they doing redirection?
        $boardOptions['redirect'] = !empty($_POST['redirect_enable']) && isset($_POST['redirect_address']) && trim($_POST['redirect_address']) != '' ? trim($_POST['redirect_address']) : '';

Add After:
        $boardOptions['redirect_confirm'] = isset($_POST['redirect_confirm']);
        $boardOptions['redirect_confirm_text'] = isset($_POST['redirect_confirm_text']) ? trim($_POST['redirect_confirm_text']) : '';


In ./Sources/Subs-BoardIndex.php

Find:
AS is_redirect,
Add After:
b.redirect_confirm, b.redirect_confirm_text,
Find:
                    'is_redirect' => $row_board['is_redirect'],
Add After:
                    'redirect_confirm' => $row_board['redirect_confirm'],
                    'redirect_confirm_text' => $row_board['redirect_confirm_text'],

Find:
                'is_redirect' => $row_board['is_redirect'],
Add After:
                'redirect_confirm' => $row_board['redirect_confirm'],
                'redirect_confirm_text' => $row_board['redirect_confirm_text'],


In ./Sources/Subs-Boards.php

Find:
    if (isset($boardOptions['redirect']))
    {
        $boardUpdates[] = 'redirect = {string:redirect}';
        $boardUpdateParameters['redirect'] = $boardOptions['redirect'];
    }

Add After:

    if (isset($boardOptions['redirect_confirm']))
    {
        $boardUpdates[] = 'redirect_confirm = {int:redirect_confirm}';
        $boardUpdateParameters['redirect_confirm'] = (int) $boardOptions['redirect_confirm'];
    }

    if (isset($boardOptions['redirect_confirm_text']))
    {
        $boardUpdates[] = 'redirect_confirm_text = {string:redirect_confirm_text}';
        $boardUpdateParameters['redirect_confirm_text'] = $boardOptions['redirect_confirm_text'];
    }

Find:
'redirect' => 'string',
Add After:
'redirect_confirm' => 'int', 'redirect_confirm_text' => 'string',
Find:
b.redirect,
Add After:
b.redirect_confirm, b.redirect_confirm_text,
Find:
                'redirect' => $row['redirect'],
Add After:
                'redirect_confirm' => $row['redirect_confirm'],
                'redirect_confirm_text' => $row['redirect_confirm_text'],


In ./Themes/default/BoardIndex.template.php

Note:  The following code update opens all redirected boards in a new window - if you don't want this behaviour delete the target="_blank" attribute.

Find:
            foreach ($category['boards'] as $board)
            {
Add After:
                if ($board['is_redirect'] && $board['redirect_confirm'])
                {
                    $confirmText = (isset($board['redirect_confirm_text']) ? $board['redirect_confirm_text'] : $txt['mboards_redirect_confirm_text']);
                    $confirmText .= '\r\n\r\n' . $txt['mboards_redirect_confirm_okCancel'];
                    $onClick = ' onclick="return confirm(\'' . $confirmText . '\');" target="_blank"';
                }
                else
                    $onClick = ' target="_blank"';

Find:
<a href="', ($board['is_redirect'] || $context['user']['is_guest'] ? $board['href'] : $scripturl . '?action=unread;board=' . $board['id'] . '.0;children'), '">';
Replace With:
<a href="', ($board['is_redirect'] || $context['user']['is_guest'] ? $board['href'] : $scripturl . '?action=unread;board=' . $board['id'] . '.0;children'), '"', $onClick, '>';
Find:
<a class="subject" href="', $board['href'], '" name="b', $board['id'], '">', $board['name'], '</a>';
Replace With:
<a class="subject" href="', $board['href'], '" name="b', $board['id'], '"', $onClick, '>', $board['name'], '</a>';

In ./Themes/default/ManageBoards.template.php

Find:
                            <dt>
                                <strong>', $txt['mboards_redirect_url'], ':</strong><br />
                                <span class="smalltext">', $txt['mboards_redirect_url_desc'], '</span><br />
                            </dt>
                            <dd>
                                <input type="text" name="redirect_address" value="', $context['board']['redirect'], '" size="40" class="input_text" />
                            </dd>

Add After:
                            <dt>
                                <strong>', $txt['mboards_redirect_confirm'], ':</strong><br />
                                <span class="smalltext">', $txt['mboards_redirect_confirm_desc'], '</span><br />
                            </dt>
                            <dd>
                                <input type="checkbox" id="redirect_confirm" name="redirect_confirm"', $context['board']['redirect_confirm'] == 1 ? ' checked="checked"' : '', ' class="input_check" />
                            </dd>
                            <dt>
                                <strong>', $txt['mboards_redirect_confirm_text'], ':</strong><br /><br />
                            </dt>
                            <dd>
                                <input type="text" name="redirect_confirm_text" value="', $context['board']['redirect_confirm_text'], '" size="40" class="input_text" />
                            </dd>


In ./Themes/default/languages/ManageBoards.english.php
Add to end of file:
$txt['mboards_redirect_confirm'] = 'Confirm redirection to a web address';
$txt['mboards_redirect_confirm_desc'] = 'If this option is enabled a popup will be displayed with the text below (or default text if the field below is empty) advisig the user they will be redirected to a web address if they click on OK.';
$txt['mboards_redirect_confirm_text'] = 'Text to be displayed for confirmation of redirection to a web address';


In ./Themes/default/languages/index.english.php
Add to end of file:
$txt['mboards_redirect_confirm_text_default'] = 'Note: You are about to be redirected to a web address.';
$txt['mboards_redirect_confirm_okCancel'] = 'Click OK to continue or click Cancel to cancel this request.';
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: Steve on February 02, 2021, 08:40:18 AM
This seems a little more comprehensive than just a 'Tip/Trick' imo ... but since I'm not a coder I'll leave this to the others that are.
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: Diego Andrés on February 02, 2021, 01:27:39 PM
Lovely, maybe a hooks mod for 2.1?  ;D
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: GigaWatt on February 02, 2021, 02:00:22 PM
Quote from: Steve on February 02, 2021, 08:40:18 AM
This seems a little more comprehensive than just a 'Tip/Trick' imo ... but since I'm not a coder I'll leave this to the others that are.

Agree. Not a coder too, but IMO a bit complicated for a tip/trick.

In any case, thanks for sharing GL700 ;).
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: shadav on February 02, 2021, 02:47:23 PM
Nice, I was looking for something like this myself a while ago, just hadn't gotten around to requesting it, put on the back burner...maybe instead of a popup it loads a new page/tab, as most adblocks and such restrict popups
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: shadav on May 12, 2022, 05:53:47 PM
so I finally got around to testing this out...it half way works  ;D

need to also edit the

/Themes/default/MessageIndex.template.php

find
        foreach ($context['boards'] as $board)
        {


after add
                if ($board['is_redirect'] && $board['redirect_confirm'])
                {
                    $confirmText = (isset($board['redirect_confirm_text']) ? $board['redirect_confirm_text'] : $txt['mboards_redirect_confirm_text']);
                    $confirmText .= '\r\n\r\n' . $txt['mboards_redirect_confirm_okCancel'];
                    $onClick = ' onclick="return confirm(\'' . $confirmText . '\');" target="_blank"';
                }
                else
                    $onClick = ' target="_blank"';

find
<a href="', ($board['is_redirect'] || $context['user']['is_guest'] ? $board['href'] : $scripturl . '?action=unread;board=' . $board['id'] . '.0;children'), '">';
replace
<a href="', ($board['is_redirect'] || $context['user']['is_guest'] ? $board['href'] : $scripturl . '?action=unread;board=' . $board['id'] . '.0;children'), '"', $onClick, '>';
find
<a class="subject" href="', $board['href'], '" name="b', $board['id'], '">', $board['name'], '</a>
replace
<a class="subject" href="', $board['href'], '" name="b', $board['id'], '"', $onClick, '>', $board['name'], '</a>
the only issue i'm having with this is now EVERY board opens in a new tab  :laugh:

and now I need to figure out how to get this to work with the Childboards as Dropdown mod as well as stop every board from opening in a new tab hehehehe

[edit]
lol um ok then...apparently using an ' in the Text to be displayed for confirmation of redirection to a web address: box breaks the confirmation and it just goes directly to the link
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: shadav on May 12, 2022, 06:28:11 PM
ok so figured out the issue with EVERY board opening in a new tab  :P

in
/Themes/default/BoardIndex.template.php
and in
/Themes/default/MessageIndex.template.php

find
                    $onClick = ' target="_blank"';
replace with
                    $onClick = '';
now only the redirected boards will open in new tabs and not all boards

now just to figure out how to make this work with the childboards dropdown mod and i'm all set

and how to not break it using ' in the text would be nice but not a big issue

thanks again @GL700Wing for this
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: Shades. on May 12, 2022, 07:47:14 PM
This mod (https://custom.simplemachines.org/index.php?mod=4308) does similar to what you are describing! ;)
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: shadav on May 12, 2022, 07:57:04 PM
Quote from: Shades. on May 12, 2022, 07:47:14 PMThis mod (https://custom.simplemachines.org/index.php?mod=4308) does similar to what you are describing! ;)
not quite
what you linked to is for posts with links in it

what this tip/trick does is for boards themselves not posts
it changes the redirection boards (admin > forum > boards > create/modify boards make a board redirect to a url)
to not only open in a new link but to also add a confirmation that "hey you are leaving the site, are you sure you want to do that?" kind of thing

though I would like to see something like this for links in posts as well :D
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: GL700Wing on May 12, 2022, 07:58:41 PM
Quote from: shadav on May 12, 2022, 06:28:11 PMok so figured out the issue with EVERY board opening in a new tab
Hmm - not sure why I thought that was a good idea - definitely annoying ...

Methinks I should make this into a mod for SMF 2.0 and SMF 2.1 (I really didn't have time to do that last year which is why I posted it as a tip/trick) ...
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: Steve on May 13, 2022, 10:15:11 AM
I think that's a good idea because I believe this goes beyond being just a tip/trick.
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: GL700Wing on May 13, 2022, 06:48:15 PM
Quote from: Steve on May 13, 2022, 10:15:11 AMI think that's a good idea because I believe this goes beyond being just a tip/trick.
Pre-release version for SMF 2.0 and 2.1 finished yesterday - just getting some final testing/checking done ...
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: Steve on May 13, 2022, 07:45:28 PM
(https://i.imgur.com/Wm1mvsd.gif)
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: Antechinus on May 14, 2022, 05:22:57 PM
Can one of the team please fix the typo in this topic's title?
It bugs me every time I see it on the unred pge. :P
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: GL700Wing on May 14, 2022, 07:07:29 PM
Quote from: Antechinus on May 14, 2022, 05:22:57 PMCan one of the team please fix the typo in this topic's title?
It bugs me every time I see it on the unred pge. :P
Agreed and apologies for that - by the time I realised it was there not long after I posted the topic it was too late for me to change it ...
Title: Re: Tip/Trick: Redirection confirmtion for boards that redirect to a web address
Post by: Antechinus on May 14, 2022, 07:11:45 PM
The edit time limit on this site frequently gets up my nose too. :D
Title: Re: Tip/Trick: Redirection confirmation for boards that redirect to a web address
Post by: shadav on May 14, 2022, 07:28:18 PM
giggles, I fixed it :) I forgot I could do that
Title: Re: Tip/Trick: Redirection confirmation for boards that redirect to a web address
Post by: Antechinus on May 14, 2022, 07:37:18 PM
Yay! :D
Title: Re: Tip/Trick: Redirection confirmation for boards that redirect to a web address
Post by: Steve on May 15, 2022, 06:39:13 AM
We certainly don't want Ant going crazier than he already is.  :P
Title: Re: Tip/Trick: Redirection confirmation for boards that redirect to a web address
Post by: GL700Wing on June 22, 2022, 06:55:56 PM
This is now a mod - see Board Redirect Confirmation (https://custom.simplemachines.org/index.php?mod=4338).