Subversion Repositories oidplus

Rev

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

Rev Author Line No. Line
635 daniel-mar 1
<?php
2
 
3
/*
4
 * OIDplus 2.0
5
 * Copyright 2019 - 2021 Daniel Marschall, ViaThinkSoft
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;
635 daniel-mar 21
 
22
class OIDplusPagePublicRaInfo extends OIDplusPagePluginPublic {
23
 
24
        public function init($html=true) {
25
        }
26
 
27
        public function gui($id, &$out, &$handled) {
28
                if (explode('$',$id)[0] == 'oidplus:rainfo') {
29
                        $handled = true;
30
 
31
                        $antispam_email = explode('$',$id.'$')[1];
32
                        $ra_email = str_replace('&', '@', $antispam_email);
33
 
801 daniel-mar 34
                        $out['icon'] = OIDplus::webpath(__DIR__,OIDplus::PATH_RELATIVE).'img/rainfo_icon.png';
635 daniel-mar 35
 
704 daniel-mar 36
                        if (OIDplus::authUtils()->isAdminLoggedIn()) {
707 daniel-mar 37
                                $listRaPlugin = OIDplus::getPluginByOid('1.3.6.1.4.1.37476.2.5.2.4.3.500'); // OIDplusPageAdminListRAs
38
                                if (!is_null($listRaPlugin)) {
39
                                        $out['text'] = '<p><a '.OIDplus::gui()->link('oidplus:list_ra').'><img src="img/arrow_back.png" width="16" alt="'._L('Go back').'"> '._L('Go back to RA listing').'</a></p>';
40
                                }
704 daniel-mar 41
                        }
635 daniel-mar 42
 
43
                        if (empty($ra_email)) {
44
                                $out['title'] = _L('Object roots without RA');
45
                                $out['text'] .= '<p>'._L('Following object roots have an undefined Registration Authority').':</p>';
46
                        } else {
47
                                $res = OIDplus::db()->query("select ra_name from ###ra where email = ?", array($ra_email));
48
                                $out['title'] = '';
49
                                if ($row = $res->fetch_array()) {
50
                                        $out['title'] = $row['ra_name'];
51
                                }
52
                                if (empty($out['title'])) {
53
                                        $out['title'] = $antispam_email;
54
                                }
55
                                $out['text'] .= $this->showRAInfo($ra_email);
56
                                $out['text'] .= '<br><br>';
57
                        }
58
 
59
                        $ra_roots = OIDplusObject::getRaRoots($ra_email);
60
                        if (count($ra_roots) == 0) {
61
                                if (empty($ra_email)) {
62
                                        $out['text'] .= '<p><i>'._L('None').'</i></p>';
63
                                } else {
64
                                        $out['text'] .= '<p><i>'._L('This RA has no objects.').'</i></p>';
65
                                }
66
                        } else {
67
                                foreach ($ra_roots as $loc_root) {
68
                                        $ico = $loc_root->getIcon();
801 daniel-mar 69
                                        $icon = !is_null($ico) ? $ico : OIDplus::webpath(__DIR__,OIDplus::PATH_RELATIVE).'img/link_icon16.png';
635 daniel-mar 70
                                        $out['text'] .= '<p><a '.OIDplus::gui()->link($loc_root->nodeId()).'><img src="'.$icon.'"> '._L('Jump to RA root %1',$loc_root->objectTypeTitleShort().' '.$loc_root->crudShowId(OIDplusObject::parse($loc_root::root()))).'</a></p>';
71
                                }
72
                        }
73
 
74
                        if (!empty($ra_email)) {
75
                                $res = OIDplus::db()->query("select * from ###ra where email = ?", array($ra_email));
790 daniel-mar 76
                                if ($res->any()) {
635 daniel-mar 77
                                        if (OIDplus::authUtils()->isRALoggedIn($ra_email) || OIDplus::authUtils()->isAdminLoggedIn()) {
78
                                                $editContactDataPlugin = OIDplus::getPluginByOid('1.3.6.1.4.1.37476.2.5.2.4.2.100'); // OIDplusPageRaEditContactData
79
                                                if (!is_null($editContactDataPlugin)) {
80
                                                        $out['text'] .= '<p><a '.OIDplus::gui()->link('oidplus:edit_ra$'.$ra_email).'>'._L('Edit contact data').'</a></p>';
81
                                                }
82
                                        }
83
 
84
                                        if (OIDplus::authUtils()->isAdminLoggedIn()) {
935 daniel-mar 85
                                                if (!is_null(OIDplus::getPluginByOid("1.3.6.1.4.1.37476.2.5.2.4.3.500"))) { // OIDplusPageAdminListRAs
635 daniel-mar 86
                                                        $out['text'] .= '<p><a href="#" onclick="return OIDplusPagePublicRaBaseUtils.deleteRa('.js_escape($ra_email).','.js_escape('oidplus:list_ra').')">'._L('Delete this RA').'</a></p>';
87
                                                } else {
88
                                                        $out['text'] .= '<p><a href="#" onclick="return OIDplusPagePublicRaBaseUtils.deleteRa('.js_escape($ra_email).','.js_escape('oidplus:system').')">'._L('Delete this RA').'</a></p>';
89
                                                }
90
 
91
                                                $changePasswordPlugin = OIDplus::getPluginByOid('1.3.6.1.4.1.37476.2.5.2.4.2.101'); // OIDplusPageRaChangePassword
92
                                                if (!is_null($changePasswordPlugin)) {
93
                                                        $out['text'] .= '<p><a '.OIDplus::gui()->link('oidplus:change_ra_password$'.$ra_email).'>'._L('Change password of this RA').'</a>';
94
                                                }
95
                                        }
96
                                }
97
 
98
                                if (OIDplus::authUtils()->isRALoggedIn($ra_email) || OIDplus::authUtils()->isAdminLoggedIn()) {
99
                                        $res = OIDplus::db()->query("select lo.unix_ts, lo.addr, lo.event from ###log lo ".
100
                                                                    "left join ###log_user lu on lu.log_id = lo.id ".
101
                                                                    "where lu.username = ? " .
102
                                                                    "order by lo.unix_ts desc", array($ra_email));
103
                                        $out['text'] .= '<h2>'._L('Log messages for RA %1',htmlentities($ra_email)).'</h2>';
790 daniel-mar 104
                                        if ($res->any()) {
635 daniel-mar 105
                                                $out['text'] .= '<pre>';
106
                                                while ($row = $res->fetch_array()) {
107
                                                        $addr = empty($row['addr']) ? _L('no address') : $row['addr'];
108
 
109
                                                        $out['text'] .= date('Y-m-d H:i:s', $row['unix_ts']) . ': ' . htmlentities($row["event"])." (" . htmlentities($addr) . ")\n";
110
                                                }
111
                                                $out['text'] .= '</pre>';
112
 
113
                                                // TODO: List logs in a table instead of a <pre> text
114
                                                // TODO: Load only X events and then re-load new events via AJAX when the user scrolls down
115
                                        } else {
116
                                                $out['text'] .= '<p>'._L('Currently there are no log entries').'</p>';
117
                                        }
118
                                }
119
                        }
120
                }
121
        }
122
 
123
        public function publicSitemap(&$out) {
124
                if (OIDplus::db()->getSlang()->id() == 'mysql') {
125
                        $res = OIDplus::db()->query("select distinct BINARY(email) as email from ###ra"); // "binary" because we want to ensure that 'distinct' is case sensitive
126
                } else {
127
                        $res = OIDplus::db()->query("select distinct email as email from ###ra"); // distinct in PGSQL is always case sensitive
128
                }
129
                while ($row = $res->fetch_array()) {
130
                        $out[] = 'oidplus:rainfo$'.$row['email'];
131
                }
132
        }
133
 
134
        public function tree(&$json, $ra_email=null, $nonjs=false, $req_goto='') {
135
                return false;
136
        }
137
 
138
        public static function showRAInfo($email) {
139
                $out = '';
140
 
141
                if (empty($email)) {
142
                        return '<p>'._L('The superior RA did not define a RA for this OID.').'</p>';
143
                }
144
 
145
                $res = OIDplus::db()->query("select * from ###ra where email = ?", array($email));
790 daniel-mar 146
                if (!$res->any()) {
635 daniel-mar 147
                        $out = '<p>'._L('The RA %1 is not registered in the database.','<a href="mailto:'.htmlentities($email).'">'.htmlentities($email).'</a>').'</p>';
676 daniel-mar 148
 
149
                        if (OIDplus::authUtils()->isAdminLoggedIn()) {
150
                                $createRAPlugin = OIDplus::getPluginByOid('1.3.6.1.4.1.37476.2.5.2.4.3.130'); // OIDplusPageAdminCreateRa
151
                                if (!is_null($createRAPlugin)) {
152
                                        $out .= '<p><a '.OIDplus::gui()->link('oidplus:create_ra$'.$email).'>'._L('Create RA manually').'</a></p>';
153
                                }
154
                        }
155
 
635 daniel-mar 156
                } else {
157
                        $row = $res->fetch_array();
158
                        $out = '<b>'.htmlentities($row['ra_name']).'</b><br>'; // TODO: if you are not already at the page "oidplus:rainfo", then link to it now
159
                        $out .= _L('E-Mail').': <a href="mailto:'.htmlentities($email).'">'.htmlentities($email).'</a><br>';
160
                        if (trim($row['personal_name']) !== '') $out .= htmlentities($row['personal_name']).'<br>';
161
                        if (trim($row['organization']) !== '') $out .= htmlentities($row['organization']).'<br>';
162
                        if (trim($row['office']) !== '') $out .= htmlentities($row['office']).'<br>';
163
                        if ($row['privacy']) {
164
                                // TODO: Only show the message if the user has a street, address, etc.
165
                                // TODO: But the admin and the own user should see it (with a note that the data is not visible to the public)
166
                                $out .= '<p>'._L('The RA does not want to publish their personal information.').'</p>';
167
                        } else {
168
                                if (trim($row['street']) !== '') $out .= htmlentities($row['street']).'<br>';
169
                                if (trim($row['zip_town']) !== '') $out .= htmlentities($row['zip_town']).'<br>';
170
                                if (trim($row['country']) !== '') $out .= htmlentities($row['country']).'<br>';
171
                                $out .= '<br>';
172
                                if (trim($row['phone']) !== '') $out .= _L('Phone: %1',htmlentities($row['phone'])).'<br>';
173
                                if (trim($row['fax']) !== '') $out .= _L('Fax: %1',htmlentities($row['fax'])).'<br>';
174
                                if (trim($row['mobile']) !== '') $out .= _L('Mobile: %1',htmlentities($row['mobile'])).'<br>';
175
                                $out .= '<br>';
176
                        }
177
                }
178
 
179
                return trim_br($out);
180
        }
181
 
182
        public function tree_search($request) {
183
                return false;
184
        }
185
}