Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 77
ucp_auth_link
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 73
 main
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 73
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
    exit;
}
class ucp_auth_link
{
    /**
    * @var string
    */
    public $u_action;
    /**
    * Generates the ucp_auth_link page and handles the auth link process
    *
    * @param    int        $id
    * @param    string    $mode
    */
    public function main($id, $mode)
    {
        global $request, $template, $phpbb_container, $user;
        $error = array();
        /* @var $provider_collection \phpbb\auth\provider_collection */
        $provider_collection = $phpbb_container->get('auth.provider_collection');
        $auth_provider = $provider_collection->get_provider();
        // confirm that the auth provider supports this page
        $provider_data = $auth_provider->get_auth_link_data();
        if ($provider_data === null)
        {
            $error[] = 'UCP_AUTH_LINK_NOT_SUPPORTED';
        }
        $s_hidden_fields = array();
        add_form_key('ucp_auth_link');
        $submit    = $request->variable('submit', false, false, \phpbb\request\request_interface::POST);
        // This path is only for primary actions
        if (!count($error) && $submit)
        {
            if (!check_form_key('ucp_auth_link'))
            {
                $error[] = 'FORM_INVALID';
            }
            if (!count($error))
            {
                // Any post data could be necessary for auth (un)linking
                $link_data = $request->get_super_global(\phpbb\request\request_interface::POST);
                // The current user_id is also necessary
                $link_data['user_id'] = $user->data['user_id'];
                // Tell the provider that the method is auth_link not login_link
                $link_data['link_method'] = 'auth_link';
                if ($request->variable('link', 0, false, \phpbb\request\request_interface::POST))
                {
                    $error[] = $auth_provider->link_account($link_data);
                }
                else
                {
                    $error[] = $auth_provider->unlink_account($link_data);
                }
                // Template data may have changed, get new data
                $provider_data = $auth_provider->get_auth_link_data();
            }
        }
        // In some cases, a request to an external server may be required. In
        // these cases, the GET parameter 'link' should exist and should be true
        if ($request->variable('link', false))
        {
            // In this case the link data should only be populated with the
            // link_method as the provider dictates how data is returned to it.
            $link_data = array('link_method' => 'auth_link');
            $error[] = $auth_provider->link_account($link_data);
            // Template data may have changed, get new data
            $provider_data = $auth_provider->get_auth_link_data();
        }
        if (isset($provider_data['VARS']))
        {
            // Handle hidden fields separately
            if (isset($provider_data['VARS']['HIDDEN_FIELDS']))
            {
                $s_hidden_fields = array_merge($s_hidden_fields, $provider_data['VARS']['HIDDEN_FIELDS']);
                unset($provider_data['VARS']['HIDDEN_FIELDS']);
            }
            $template->assign_vars($provider_data['VARS']);
        }
        if (isset($provider_data['BLOCK_VAR_NAME']))
        {
            foreach ($provider_data['BLOCK_VARS'] as $block_vars)
            {
                // See if there are additional hidden fields. This should be an associative array
                if (isset($block_vars['HIDDEN_FIELDS']))
                {
                    $block_vars['HIDDEN_FIELDS'] = build_hidden_fields($block_vars['HIDDEN_FIELDS']);
                }
                $template->assign_block_vars($provider_data['BLOCK_VAR_NAME'], $block_vars);
            }
        }
        $s_hidden_fields = build_hidden_fields($s_hidden_fields);
        // Replace "error" strings with their real, localised form
        $error = array_map(array($user, 'lang'), $error);
        $error = implode('<br />', $error);
        $template->assign_vars(array(
            'ERROR'    => $error,
            'PROVIDER_TEMPLATE_FILE'    => $provider_data['TEMPLATE_FILE'],
            'S_HIDDEN_FIELDS'    => $s_hidden_fields,
            'S_UCP_ACTION'        => $this->u_action,
        ));
        $this->tpl_name = 'ucp_auth_link';
        $this->page_title = 'UCP_AUTH_LINK';
    }
}