Subversion Repositories oidplus

Rev

Rev 1050 | Rev 1056 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
596 daniel-mar 1
<?php
2 daniel-mar 2
 
3
/*
4
 * OIDplus 2.0
511 daniel-mar 5
 * Copyright 2019 - 2021 Daniel Marschall, ViaThinkSoft
2 daniel-mar 6
 *
7
 * Licensed under the Apache License, Version 2.0 (the "License");
8
 * you may not use this file except in compliance with the License.
9
 * You may obtain a copy of the License at
10
 *
11
 *     http://www.apache.org/licenses/LICENSE-2.0
12
 *
13
 * Unless required by applicable law or agreed to in writing, software
14
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 * See the License for the specific language governing permissions and
17
 * limitations under the License.
18
 */
19
 
1050 daniel-mar 20
namespace ViaThinkSoft\OIDplus;
511 daniel-mar 21
 
730 daniel-mar 22
class OIDplusGui extends OIDplusBaseClass {
2 daniel-mar 23
 
24
        public static function generateContentPage($id) {
25
                $out = array();
26
 
27
                $handled = false;
28
                $out['title'] = '';
32 daniel-mar 29
                $out['icon'] = '';
2 daniel-mar 30
                $out['text'] = '';
31
 
281 daniel-mar 32
                foreach (OIDplus::getPagePlugins() as $plugin) {
348 daniel-mar 33
                        try {
34
                                $plugin->gui($id, $out, $handled);
1050 daniel-mar 35
                        } catch (\Exception $e) {
360 daniel-mar 36
                                $out['title'] = _L('Error');
800 daniel-mar 37
                                $out['icon'] = 'img/error.png';
348 daniel-mar 38
                                $out['text'] = $e->getMessage();
39
                        }
281 daniel-mar 40
                        if ($handled) break;
61 daniel-mar 41
                }
2 daniel-mar 42
 
43
                if (!$handled) {
936 daniel-mar 44
                        if (isset($_SERVER['SCRIPT_FILENAME']) && (strtolower(basename($_SERVER['SCRIPT_FILENAME'])) !== 'ajax.php')) { // don't send HTTP error codes in ajax.php, because we want a page and not a JavaScript alert box, when someone enters an invalid OID in the GoTo-Box
45
                                http_response_code(404);
46
                        }
360 daniel-mar 47
                        $out['title'] = _L('Error');
800 daniel-mar 48
                        $out['icon'] = 'img/error.png';
360 daniel-mar 49
                        $out['text'] = _L('The resource cannot be found.');
2 daniel-mar 50
                }
51
 
52
                return $out;
53
        }
250 daniel-mar 54
 
595 daniel-mar 55
        public static function link($goto, $new_window=false): string {
327 daniel-mar 56
                if ($new_window) {
57
                        return 'href="?goto='.urlencode($goto).'" target="_blank"';
250 daniel-mar 58
                } else {
327 daniel-mar 59
                        if (strpos($goto, '#') !== false) {
60
                                list($goto, $anchor) = explode('#', $goto, 2);
61
                                return 'href="?goto='.urlencode($goto).'#'.htmlentities($anchor).'" onclick="openOidInPanel('.js_escape($goto).', true, '.js_escape($anchor).'); return false;"';
62
                        } else {
63
                                return 'href="?goto='.urlencode($goto).'" onclick="openOidInPanel('.js_escape($goto).', true); return false;"';
64
                        }
250 daniel-mar 65
                }
66
        }
362 daniel-mar 67
 
68
        public static function getLanguageBox($goto, $useJs) {
69
                echo '<div id="languageBox">';
70
                $langbox_entries = array();
71
                $non_default_languages = 0;
72
                foreach (OIDplus::getAllPluginManifests('language') as $pluginManifest) {
389 daniel-mar 73
                        $flag = $pluginManifest->getLanguageFlag();
74
                        $code = $pluginManifest->getLanguageCode();
1041 daniel-mar 75
                        if ($code != OIDplus::getDefaultLang()) $non_default_languages++;
362 daniel-mar 76
                        if ($code == OIDplus::getCurrentLang()) {
77
                                $class = 'lng_flag';
78
                        } else {
79
                                $class = 'lng_flag picture_ghost';
80
                        }
81
                        $add = (!is_null($goto)) ? '&amp;goto='.urlencode($goto) : '';
632 daniel-mar 82
 
635 daniel-mar 83
                        $dirs = glob(OIDplus::localpath().'plugins/'.'*'.'/language/'.$code.'/');
632 daniel-mar 84
 
85
                        if (count($dirs) > 0) {
86
                                $dir = substr($dirs[0], strlen(OIDplus::localpath()));
801 daniel-mar 87
                                $langbox_entries[$code] = '<span class="lang_flag_bg"><a '.($useJs ? 'onclick="setLanguage(\''.$code.'\'); return false" ' : '').'href="?lang='.$code.$add.'"><img src="'.OIDplus::webpath(null,OIDplus::PATH_RELATIVE).$dir.$flag.'" alt="'.$pluginManifest->getName().'" title="'.$pluginManifest->getName().'" class="'.$class.'" id="lng_flag_'.$code.'" height="20"></a></span> ';
632 daniel-mar 88
                        }
362 daniel-mar 89
                }
90
                if ($non_default_languages > 0) {
426 daniel-mar 91
                        foreach ($langbox_entries as $ent) {
92
                                echo "$ent\n\t\t";
93
                        }
362 daniel-mar 94
                }
95
                echo '</div>';
96
        }
366 daniel-mar 97
 
98
        public static function html_exception_handler($exception) {
99
                if ($exception instanceof OIDplusConfigInitializationException) {
463 daniel-mar 100
                        echo '<!DOCTYPE HTML>';
101
                        echo '<html><head><title>'._L('OIDplus initialization error').'</title></head><body>';
366 daniel-mar 102
                        echo '<h1>'._L('OIDplus initialization error').'</h1>';
103
                        echo '<p>'.htmlentities($exception->getMessage(), ENT_SUBSTITUTE).'</p>';
104
                        echo '<p>'._L('Please check the file %1','<b>userdata/baseconfig/config.inc.php</b>');
105
                        if (is_dir(__DIR__ . '/../../setup')) {
801 daniel-mar 106
                                echo ' '._L('or run <a href="%1">setup</a> again',OIDplus::webpath(null,OIDplus::PATH_RELATIVE).'setup/');
366 daniel-mar 107
                        }
108
                        echo '</p>';
780 daniel-mar 109
                        echo self::getExceptionTechInfo($exception);
463 daniel-mar 110
                        echo '</body></html>';
366 daniel-mar 111
                } else {
463 daniel-mar 112
                        echo '<!DOCTYPE HTML>';
113
                        echo '<html><head><title>'._L('OIDplus error').'</title></head><body>';
366 daniel-mar 114
                        echo '<h1>'._L('OIDplus error').'</h1>';
115
                        // ENT_SUBSTITUTE because ODBC drivers might return ANSI instead of UTF-8 stuff
116
                        echo '<p>'.htmlentities($exception->getMessage(), ENT_SUBSTITUTE).'</p>';
780 daniel-mar 117
                        echo self::getExceptionTechInfo($exception);
463 daniel-mar 118
                        echo '</body></html>';
366 daniel-mar 119
                }
120
        }
420 daniel-mar 121
 
780 daniel-mar 122
        private static function getExceptionTechInfo($exception) {
123
                $out = '';
124
                $out .= '<p><b>'._L('Technical information about the problem').':</b></p>';
125
                $out .= '<pre>';
126
                $out .= get_class($exception)."\n";
127
                $out .= _L('at file %1 (line %2)',$exception->getFile(),"".$exception->getLine())."\n\n";
128
                $out .= _L('Stacktrace').":\n";
922 daniel-mar 129
                $out .= htmlentities($exception->getTraceAsString());
780 daniel-mar 130
                $out .= '</pre>';
131
                return $out;
132
        }
133
 
420 daniel-mar 134
        public function tabBarStart() {
135
                return '<ul class="nav nav-tabs" id="myTab" role="tablist">';
136
        }
137
 
138
        public function tabBarEnd() {
139
                return '</ul>';
140
        }
141
 
142
        public function tabBarElement($id, $title, $active) {
641 daniel-mar 143
                // data-bs-toggle is for Bootstrap 5
144
                // data-toggle is for Bootstrap 4 (InternetExplorer compatibility)
145
                return '<li class="nav-item"><a class="nav-link'.($active ? ' active' : '').'" id="'.$id.'-tab" data-bs-toggle="tab" data-toggle="tab" href="#'.$id.'" role="tab" aria-controls="'.$id.'" aria-selected="'.($active ? 'true' : 'false').'">'.$title.'</a></li>';
420 daniel-mar 146
        }
147
 
148
        public function tabContentStart() {
149
                return '<div class="tab-content" id="myTabContent">';
150
        }
151
 
152
        public function tabContentEnd() {
153
                return '</div>';
154
        }
155
 
156
        public function tabContentPage($id, $content, $active) {
157
                return '<div class="tab-pane fade'.($active ? ' show active' : '').'" id="'.$id.'" role="tabpanel" aria-labelledby="'.$id.'-tab">'.$content.'</div>';
158
        }
159
 
1055 daniel-mar 160
        // TODO: Modify this method so that also the real index.php (With menu) can be called here
161
        public function showSimplePage($page_title_1, $page_title_2, $static_icon, $static_content, $extra_head_tags='') {
162
                echo '<!DOCTYPE html>';
163
                echo '<html lang="'.substr(OIDplus::getCurrentLang(),0,2).'">';
164
 
165
                echo '<head>';
166
                echo '  <title>'.htmlentities($page_title_1).'</title>';
167
                echo '  <meta name="viewport" content="width=device-width, initial-scale=1.0">';
168
                echo '  <link rel="stylesheet" href="'.OIDplus::webpath(null, true).'oidplus.min.css.php?noBaseConfig=1">';
169
                echo '  <script src="'.OIDplus::webpath(null, true).'oidplus.min.js.php?noBaseConfig=1" type="text/javascript"></script>';
170
                echo '  <link rel="shortcut icon" type="image/x-icon" href="'.OIDplus::webpath(null, true).'favicon.ico.php">';
171
                echo "\t".implode("\n\t",$extra_head_tags)."\n";
172
                echo '</head>';
173
 
174
                echo '<body>';
175
 
176
                echo '<div id="loading" style="display:none">Loading&#8230;</div>';
177
 
178
                echo '<div id="frames">';
179
                echo '<div id="content_window" class="borderbox">';
180
 
181
                echo '<h1 id="real_title">';
182
                if ($static_icon != '') echo '<img src="'.htmlentities($static_icon).'" width="48" height="48" alt=""> ';
183
                echo htmlentities($page_title_2).'</h1>';
184
                echo '<div id="real_content">'.$static_content.'</div>';
185
                echo '<br>';
186
 
187
                echo '</div>';
188
 
189
                echo '<div id="system_title_bar">';
190
 
191
                echo '<div id="system_title_text">';
192
                echo '  <span id="system_title_logo"></span>';
193
                echo '  <span id="system_title_1">'.htmlentities(OIDplus::getEditionInfo()['vendor'].' OIDplus 2.0').'</span><br>';
194
                echo '  <span id="system_title_2">'.htmlentities($page_title_1).'</span>';
195
                echo '</div>';
196
 
197
                echo '</div>';
198
 
199
                echo OIDplus::gui()->getLanguageBox(null, true);
200
 
201
                echo '</div>';
202
 
203
                echo '</body>';
204
                echo '</html>';
205
        }
206
 
366 daniel-mar 207
}