1 <?php
2 /**
3  * -----------------------------------------------------------------------
4  * vBSSO is a solution which helps you connect to different software platforms
5  * via secure Single Sign-On.
6  *
7  * Copyright (c) 2011-2017 vBSSO. All Rights Reserved.
8  * This software is the proprietary information of vBSSO.
9  *
10  * Author URI: http://www.vbsso.com
11  * License: GPL version 2 or later -
12  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
13  * -----------------------------------------------------------------------
14  */
15 
16 // must be run within Dokuwiki
17 if (!defined('DOKU_INC')) {
18     die();
19 }
20 
21 /**
22  * Class admin_plugin_vbsso.
23  *
24  * @codingStandardsIgnoreStart
25  */
26 class admin_plugin_vbsso extends DokuWiki_Admin_Plugin {
27 
28     /**
29      * Constructor.
30      *
31      * @return mixed.
32      */
33     function admin_plugin_vbsso() {
34         $this->setupLocale();
35     }
36 
37     /**
38      * @codingStandardsIgnoreEnd
39      */
40 
41     /**
42      * Menu text.
43      *
44      * @param mixed $language language
45      *
46      * @return string
47      */
48     function getMenuText($language) {
49         $tpl = $this->make_html_from_tpl(__DIR__ . '/views/admin.getmenutext.tpl', array(DOKU_URL, VBSSO_PRODUCT_ID));
50 
51         return $tpl . $this->getLang('vbsso_settings');
52     }
53 
54     /**
55      * Handle user request.
56      *
57      * @return void
58      */
59     function handle() {
60         global $ID;
61         if (isset($_POST['vbsso_submit'])) {
62             vbsso_save_mediawiki_settings();
63             //Page content already loaded with previous settings, we have to reload page
64             sharedapi_url_redirect(wl($ID, array('do' => 'admin', 'page' => 'vbsso'), TRUE, '&'));
65         }
66     }
67 
68     /**
69      * Output appropriate html
70      *
71      * @return void
72      */
73     function html() {
74         global $vbsso_settings, $vbsso_platform_settings;
75 
76         $roles = array_merge(vbsso_get_acl_groups(), array('', 'admin'));
77         ksort($roles, SORT_STRING);
78 
79         $show_vbsso_show_footer[VBSSO_PLATFORM_FOOTER_LINK_SHOW_EVERYWHERE] =
80             ($vbsso_settings[VBSSO_PLATFORM_FOOTER_LINK_PROPERTY]) ? 'checked' : '';
81         $show_vbsso_show_footer[VBSSO_PLATFORM_FOOTER_LINK_SHOW_NONE] =
82             (!$vbsso_settings[VBSSO_PLATFORM_FOOTER_LINK_PROPERTY]) ? 'checked' : '';
83         $login_through_vb = ($vbsso_settings[VBSSO_NAMED_EVENT_FIELD_LOGIN_THROUGH_VB_PAGE]) ? 'checked' : '';
84 
85         $extensions = vbsso_verify_loaded_extensions();
86         $error_message = '';
87         if (count($extensions)) {
88             $error_message =
89                 $this->make_html_from_tpl(__DIR__ . '/views/admin.htm1.tpl', array(implode(', ', $extensions)));
90         }
91 
92         $footer_options = vbsso_get_platform_footer_link_options();
93         $disabled =
94             ($vbsso_platform_settings[VBSSO_NAMED_EVENT_FIELD_LOGIN_VBULLETIN_URL]) ? 'disabled="disabled"' : '';
95         $vbsso_form = $error_message;
96         $params = array($this->getLang('vbsso_settings'),
97             VBSSO_PLATFORM_FOOTER_LINK_DESCRIPTION_HTML,
98             VBSSO_PLATFORM_FOOTER_LINK_PROPERTY . VBSSO_PLATFORM_FOOTER_LINK_SHOW_EVERYWHERE,
99             VBSSO_PLATFORM_FOOTER_LINK_PROPERTY,
100             VBSSO_PLATFORM_FOOTER_LINK_SHOW_EVERYWHERE,
101             $show_vbsso_show_footer[VBSSO_PLATFORM_FOOTER_LINK_SHOW_EVERYWHERE],
102             VBSSO_PLATFORM_FOOTER_LINK_PROPERTY . VBSSO_PLATFORM_FOOTER_LINK_SHOW_EVERYWHERE,
103             $footer_options[1],
104             VBSSO_PLATFORM_FOOTER_LINK_PROPERTY . VBSSO_PLATFORM_FOOTER_LINK_SHOW_NONE,
105             VBSSO_PLATFORM_FOOTER_LINK_PROPERTY,
106             VBSSO_PLATFORM_FOOTER_LINK_SHOW_NONE,
107             $show_vbsso_show_footer[VBSSO_PLATFORM_FOOTER_LINK_SHOW_NONE],
108             VBSSO_PLATFORM_FOOTER_LINK_PROPERTY . VBSSO_PLATFORM_FOOTER_LINK_SHOW_NONE,
109             $footer_options[0],
110             VBSSO_NAMED_EVENT_FIELD_API_KEY,
111             VBSSO_NAMED_EVENT_FIELD_API_KEY_TITLE,
112             VBSSO_NAMED_EVENT_FIELD_API_KEY,
113             VBSSO_NAMED_EVENT_FIELD_API_KEY,
114             $vbsso_settings[VBSSO_NAMED_EVENT_FIELD_API_KEY],
115             $disabled,
116             VBSSO_NAMED_EVENT_FIELD_LISTENER_URL,
117             VBSSO_NAMED_EVENT_FIELD_LISTENER_URL_TITLE,
118             VBSSO_NAMED_EVENT_FIELD_LISTENER_URL,
119             VBSSO_NAMED_EVENT_FIELD_LISTENER_URL,
120             DOKU_URL,
121             VBSSO_PRODUCT_ID,
122             VBSSO_PRODUCT_ID,
123             VBSSO_PRODUCT_ID,
124             VBSSO_NAMED_EVENT_FIELD_LOGIN_THROUGH_VB_PAGE,
125             VBSSO_NAMED_EVENT_FIELD_LOGIN_THROUGH_VB_PAGE,
126             $login_through_vb,
127             VBSSO_NAMED_EVENT_FIELD_LOGIN_THROUGH_VB_PAGE,
128             VBSSO_NAMED_EVENT_FIELD_LOGIN_THROUGH_VB_PAGE_TITLE);
129 
130         $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-1.tpl', $params);
131 
132         //Usergroups Associations
133         if ($vbsso_platform_settings[VBSSO_NAMED_EVENT_FIELD_USERGROUPS_URL]) {
134 
135             $groups = array();
136             foreach ($roles as $group) {
137                 $groups[$group] = $group;
138             }
139             $vb_usergroups = vbsso_get_vb_usergroups();
140             $vbsso_usergroups_assoc = json_decode($vbsso_settings[VBSSO_NAMED_EVENT_FIELD_USERGROUPS_ASSOC]);
141 
142             $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-2.open.tpl');
143 
144             foreach ($vb_usergroups as $vb_usergroup) {
145                 $gid = $vb_usergroup->usergroupid;
146                 $params_select = array (VBSSO_NAMED_EVENT_FIELD_USERGROUPS_ASSOC,
147                                         $gid,
148                                         $vb_usergroup->title,
149                                         VBSSO_NAMED_EVENT_FIELD_USERGROUPS_ASSOC,
150                                         $gid,
151                                         VBSSO_NAMED_EVENT_FIELD_USERGROUPS_ASSOC,
152                                         $gid);
153 
154                 $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-2.select.open.tpl',
155                         $params_select);
156                 foreach ($groups as $group) {
157                     $select =
158                         ($vbsso_usergroups_assoc && $vbsso_usergroups_assoc->$gid == $group) ? 'selected="selected"'
159                             : '';
160                     $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-2.option.tpl',
161                         array($group, $select, $group));
162                 }
163                 $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-2.select.close.tpl');
164             }
165 
166             $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-2.close.tpl');
167         }
168 
169         $vbsso_form .= $this->make_html_from_tpl(__DIR__ . '/views/admin.html2-3.tpl');
170         if (!is_writable(VBSSO_VBSSO_CONFIG_FILE)) {
171             ptln($this->make_html_from_tpl("./views/admin.html3.tpl", array(VBSSO_VBSSO_CONFIG_FILE)));
172         }
173         if (!is_writable(VBSSO_PLATFORM_CONFIG_FILE)) {
174             ptln($this->make_html_from_tpl("./views/admin.html3.tpl", array(VBSSO_PLATFORM_CONFIG_FILE)));
175         }
176 
177         ptln($vbsso_form);
178 
179     }
180 
181     /**
182      * Output string with html
183      *
184      * @param string $file path to template file
185      * @param array $params array of parametrs to insert in template file
186      *
187      * @return void
188      */
189     private function make_html_from_tpl($file, $params = array()) {
190         $tpl = file_get_contents($file);
191         foreach ($params as $key => $param) {
192             $search = '[[content-' . $key . ']]';
193             $tpl = str_replace($search, $param, $tpl);
194         }
195 
196         return $tpl;
197     }
198 }
199