<?php
/**
 * -----------------------------------------------------------------------
 * vBSSO is a solution which helps you connect to different software platforms
 * via secure Single Sign-On.
 *
 * Copyright (c) 2011-2017 vBSSO. All Rights Reserved.
 * This software is the proprietary information of vBSSO.
 *
 * Author URI: http://www.vbsso.com
 * License: GPL version 2 or later -
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * -----------------------------------------------------------------------
 */

// must be run within Dokuwiki
if (!defined('DOKU_INC')) {
    die();
}

/**
 * Class admin_plugin_vbsso.
 *
 * @codingStandardsIgnoreStart
 */
class admin_plugin_vbsso extends DokuWiki_Admin_Plugin {

    /**
     * Constructor.
     *
     * @return mixed.
     */
    function admin_plugin_vbsso() {
        $this->setupLocale();
    }

    /**
     * @codingStandardsIgnoreEnd
     */

    /**
     * Menu text.
     *
     * @param mixed $language language
     *
     * @return string
     */
    function getMenuText($language) {
        $tpl = $this->make_html_from_tpl(__DIR__ . '/views/admin.getmenutext.tpl', array(DOKU_URL, VBSSO_PRODUCT_ID));

        return $tpl . $this->getLang('vbsso_settings');
    }

    /**
     * Handle user request.
     *
     * @return void
     */
    function handle() {
        global $ID;
        if (isset($_POST['vbsso_submit'])) {
            vbsso_save_mediawiki_settings();
            //Page content already loaded with previous settings, we have to reload page
            sharedapi_url_redirect(wl($ID, array('do' => 'admin', 'page' => 'vbsso'), TRUE, '&'));
        }
    }

    /**
     * Output appropriate html
     *
     * @return void
     */
    function html() {
        global $vbsso_settings, $vbsso_platform_settings;

        $roles = array_merge(vbsso_get_acl_groups(), array('', 'admin'));
        ksort($roles, SORT_STRING);

        $show_vbsso_show_footer[VBSSO_PLATFORM_FOOTER_LINK_SHOW_EVERYWHERE] =
            ($vbsso_settings[VBSSO_PLATFORM_FOOTER_LINK_PROPERTY]) ? 'checked' : '';
        $show_vbsso_show_footer[VBSSO_PLATFORM_FOOTER_LINK_SHOW_NONE] =
            (!$vbsso_settings[VBSSO_PLATFORM_FOOTER_LINK_PROPERTY]) ? 'checked' : '';
        $login_through_vb = ($vbsso_settings[VBSSO_NAMED_EVENT_FIELD_LOGIN_THROUGH_VB_PAGE]) ? 'checked' : '';

        $extensions = vbsso_verify_loaded_extensions();
        $error_message = '';
        if (count($extensions)) {
            $error_message =
                $this->make_html_from_tpl(__DIR__ . '/views/admin.htm1.tpl', array(implode(', ', $extensions)));
        }

        $footer_options = vbsso_get_platform_footer_link_options();
        $disabled =
            ($vbsso_platform_settings[VBSSO_NAMED_EVENT_FIELD_LOGIN_VBULLETIN_URL]) ? 'disabled="disabled"' : '';
        $vbsso_form = $error_message;
        $params = array($this->getLang('vbsso_settings'),
            VBSSO_PLATFORM_FOOTER_LINK_DESCRIPTION_HTML,
            VBSSO_PLATFORM_FOOTER_LINK_PROPERTY . VBSSO_PLATFORM_FOOTER_LINK_SHOW_EVERYWHERE,
            VBSSO_PLATFORM_FOOTER_LINK_PROPERTY,
            VBSSO_PLATFORM_FOOTER_LINK_SHOW_EVERYWHERE,
            $show_vbsso_show_footer[VBSSO_PLATFORM_FOOTER_LINK_SHOW_EVERYWHERE],
            VBSSO_PLATFORM_FOOTER_LINK_PROPERTY . VBSSO_PLATFORM_FOOTER_LINK_SHOW_EVERYWHERE,
            $footer_options[1],
            VBSSO_PLATFORM_FOOTER_LINK_PROPERTY . VBSSO_PLATFORM_FOOTER_LINK_SHOW_NONE,
            VBSSO_PLATFORM_FOOTER_LINK_PROPERTY,
            VBSSO_PLATFORM_FOOTER_LINK_SHOW_NONE,
            $show_vbsso_show_footer[VBSSO_PLATFORM_FOOTER_LINK_SHOW_NONE],
            VBSSO_PLATFORM_FOOTER_LINK_PROPERTY . VBSSO_PLATFORM_FOOTER_LINK_SHOW_NONE,
            $footer_options[0],
            VBSSO_NAMED_EVENT_FIELD_API_KEY,
            VBSSO_NAMED_EVENT_FIELD_API_KEY_TITLE,
            VBSSO_NAMED_EVENT_FIELD_API_KEY,
            VBSSO_NAMED_EVENT_FIELD_API_KEY,
            $vbsso_settings[VBSSO_NAMED_EVENT_FIELD_API_KEY],
            $disabled,
            VBSSO_NAMED_EVENT_FIELD_LISTENER_URL,
            VBSSO_NAMED_EVENT_FIELD_LISTENER_URL_TITLE,
            VBSSO_NAMED_EVENT_FIELD_LISTENER_URL,
            VBSSO_NAMED_EVENT_FIELD_LISTENER_URL,
            DOKU_URL,
            VBSSO_PRODUCT_ID,
            VBSSO_PRODUCT_ID,
            VBSSO_PRODUCT_ID,
            VBSSO_NAMED_EVENT_FIELD_LOGIN_THROUGH_VB_PAGE,
            VBSSO_NAMED_EVENT_FIELD_LOGIN_THROUGH_VB_PAGE,
            $login_through_vb,
            VBSSO_NAMED_EVENT_FIELD_LOGIN_THROUGH_VB_PAGE,
            VBSSO_NAMED_EVENT_FIELD_LOGIN_THROUGH_VB_PAGE_TITLE);

        $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-1.tpl', $params);

        //Usergroups Associations
        if ($vbsso_platform_settings[VBSSO_NAMED_EVENT_FIELD_USERGROUPS_URL]) {

            $groups = array();
            foreach ($roles as $group) {
                $groups[$group] = $group;
            }
            $vb_usergroups = vbsso_get_vb_usergroups();
            $vbsso_usergroups_assoc = json_decode($vbsso_settings[VBSSO_NAMED_EVENT_FIELD_USERGROUPS_ASSOC]);

            $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-2.open.tpl');

            foreach ($vb_usergroups as $vb_usergroup) {
                $gid = $vb_usergroup->usergroupid;
                $params_select = array (VBSSO_NAMED_EVENT_FIELD_USERGROUPS_ASSOC,
                                        $gid,
                                        $vb_usergroup->title,
                                        VBSSO_NAMED_EVENT_FIELD_USERGROUPS_ASSOC,
                                        $gid,
                                        VBSSO_NAMED_EVENT_FIELD_USERGROUPS_ASSOC,
                                        $gid);

                $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-2.select.open.tpl',
                        $params_select);
                foreach ($groups as $group) {
                    $select =
                        ($vbsso_usergroups_assoc && $vbsso_usergroups_assoc->$gid == $group) ? 'selected="selected"'
                            : '';
                    $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-2.option.tpl',
                        array($group, $select, $group));
                }
                $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-2.select.close.tpl');
            }

            $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-2.close.tpl');
        }

        $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-3.tpl');
        if (!is_writable(VBSSO_VBSSO_CONFIG_FILE)) {
            ptln($this->make_html_from_tpl("./views/admin.html3.tpl", array(VBSSO_VBSSO_CONFIG_FILE)));
        }
        if (!is_writable(VBSSO_PLATFORM_CONFIG_FILE)) {
            ptln($this->make_html_from_tpl("./views/admin.html3.tpl", array(VBSSO_PLATFORM_CONFIG_FILE)));
        }

        ptln($vbsso_form);

    }

    /**
     * Output string with html
     *
     * @param string $file path to template file
     * @param array $params array of parametrs to insert in template file
     *
     * @return void
     */
    private function make_html_from_tpl($file, $params = array()) {
        $tpl = file_get_contents($file);
        foreach ($params as $key => $param) {
            $search = '[[content-' . $key . ']]';
            $tpl = str_replace($search, $param, $tpl);
        }

        return $tpl;
    }
}
