Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Option/Giphy.php
<?php

namespace XF\Option;

use function
is_array;

class
Giphy extends AbstractOption
{
    public static function
verifyOption(&$value, \XF\Entity\Option $option)
    {
        if (
$option->isInsert())
        {
            return
true;
        }

        if (empty(
$value['enabled']))
        {
            if (
$option->option_value['enabled'])
            {
               
// just disabled
               
self::removeGiphyToolbarButton();
            }

            return
true;
        }

        if (
$value['enabled'])
        {
            if (empty(
$value['api_key']))
            {
               
$option->error(\XF::phrase('please_enter_value_for_required_field_x', ['field' => 'giphy[api_key]']), $option->option_id);
                return
false;
            }

            if (!
preg_match('/^[a-z0-9]{32}$/i', $value['api_key']))
            {
               
$option->error(\XF::phrase('please_enter_a_valid_api_key'), $option->option_id);
                return
false;
            }

            if (!
$option->option_value['enabled'])
            {
               
// just enabled
               
self::insertGiphyToolbarButton();
            }
        }

        return
true;
    }

    public static function
insertGiphyToolbarButton()
    {
       
self::updateToolbarButtons(
            function(array
$buttonSet)
            {
               
$insertPosition = null;
                foreach (
$buttonSet AS $k => $button)
                {
                    if (
$button == 'xfSmilie')
                    {
                       
$insertPosition = $k + 1;
                    }
                    else if (
$button == 'xfInsertGif')
                    {
                       
// already have it
                       
$insertPosition = null;
                        break;
                    }
                }

                if (
$insertPosition !== null)
                {
                   
array_splice($buttonSet, $insertPosition, 0, ['xfInsertGif']);
                }

                return
$buttonSet;
            }
        );
    }

    public static function
removeGiphyToolbarButton()
    {
       
self::updateToolbarButtons(
            function(array
$buttonSet)
            {
               
$newButtons = [];

                foreach (
$buttonSet AS $button)
                {
                    if (
$button == 'xfInsertGif')
                    {
                        continue;
                    }

                   
$newButtons[] = $button;
                }

                return
$newButtons;
            }
        );
    }

    protected static function
updateToolbarButtons(callable $buttonsCallback)
    {
       
$toolbarButtons = \XF::options()->editorToolbarConfig;

        foreach (
$toolbarButtons AS $type => &$group)
        {
            if (!
is_array($group))
            {
                continue;
            }

            foreach (
$group AS &$groupData)
            {
                if (!
is_array($groupData) || empty($groupData['buttons']))
                {
                    continue;
                }

               
$groupData['buttons'] = $buttonsCallback($groupData['buttons']);
            }
        }

        \
XF::repository('XF:Option')->updateOption('editorToolbarConfig', $toolbarButtons);
    }
}