source: trunk/includes/main_menu.php @ 245

Revision 245, 9.7 KB checked in by sque, 11 months ago (diff)

Merge branches/awmn 221:235
[awmn] Allow users to delete zones and nameservers without making a request to hostmaster
[awmn] Untaint sprintf
[awmn] Don't change to php script dir
[awmn] Add support to dump list of stealth nameservers
[awmn] Add active peers search fields to hostmaster's ranges page
[awmn] Redirect errors to stderr
[awmn] Don't explicitly set owner to 'N' (#146)
[awmn] Restrict ip ranges to valid b-classes (0-255)
[awmn] Escape HTML special characters
[awmn] Use appropriate entities for < and > HTML special characters
[awmn] Add missing 'alt' attribute for 'img' element
[awmn] Close 'td' and 'tr' elements properly
[awmn] Escape HTML special characters in services URLs
[awmn] Remove end of line carriage returns

Line 
1<?php
2/*
3 * WiND - Wireless Nodes Database
4 *
5 * Copyright (C) 2005 Nikolaos Nikalexis <winner@cube.gr>
6 * Copyright (C) 2009 Vasilis Tsiligiannis <b_tsiligiannis@silverton.gr>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; version 2 dated June, 1991.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 *
21 */
22
23class menu {
24       
25        var $tpl;
26        var $hide=FALSE;
27       
28        function form_login() {
29                $form_login = new form(array('FORM_NAME' => 'form_login'));
30                $form_login->db_data('users.username, users.password');
31                return $form_login;
32        }
33       
34        function calculate_menu_stats() {
35                global $db, $config;
36                $stats_tmp = "/tmp/wind-stats-".md5(__FILE__).".tmp";
37                if (file_exists($stats_tmp)) {
38                        $stats = unserialize(file_get_contents($stats_tmp));
39                        if ($stats['last_calc'] + 3600 > time()) {
40                                unset($stats['last_calc']);
41                                $this->tpl = array_merge($this->tpl, $stats);
42                                return;
43                        }
44                }
45                $stats['stats_nodes_active'] =
46                                $db->cnt('',
47                                                'nodes ' .
48                                                'INNER JOIN links AS l1 ON l1.node_id = nodes.id ' .
49                                                'LEFT JOIN links AS p2p ON (l1.type = "p2p" AND p2p.type = "p2p" AND l1.node_id = p2p.peer_node_id AND p2p.node_id = l1.peer_node_id) ' .
50                                                'LEFT JOIN links AS clients ON (l1.type = "client" AND l1.peer_ap_id = clients.id) ' .
51                                                'INNER JOIN users_nodes ON nodes.id = users_nodes.node_id ' .
52                                                'LEFT JOIN users ON users.id = users_nodes.user_id',
53                                                'users.status = "activated" AND l1.status = "active" AND (p2p.status = "active" OR clients.status = "active")',
54                                                'nodes.id'
55                                                );
56                $stats['stats_nodes_total'] =
57                                $db->cnt('',
58                                                'nodes ' .
59                                                'INNER JOIN users_nodes ON nodes.id = users_nodes.node_id ' .
60                                                'LEFT JOIN users ON users.id = users_nodes.user_id',
61                                                'users.status = "activated"',
62                                                'nodes.id'
63                                                );
64                $stats['stats_backbone'] =
65                                $db->cnt('',
66                                                'nodes ' .
67                                                'INNER JOIN links AS l1 ON l1.node_id = nodes.id ' .
68                                                'INNER JOIN links AS l2 ON (l1.type = "p2p" AND l2.type = "p2p" AND l1.node_id = l2.peer_node_id AND l2.node_id = l1.peer_node_id) ' .
69                                                'INNER JOIN users_nodes ON nodes.id = users_nodes.node_id ' .
70                                                'LEFT JOIN users ON users.id = users_nodes.user_id',
71                                                'users.status = "activated" AND l1.status = "active" AND l2.status = "active"',
72                                                'nodes.id'
73                                                );
74                $stats['stats_links'] =
75                                $db->cnt('',
76                                                'nodes ' .
77                                                'INNER JOIN links AS l1 ON l1.node_id = nodes.id ' .
78                                                'LEFT JOIN links AS p2p ON (l1.id < p2p.id AND l1.type = "p2p" AND p2p.type = "p2p" AND l1.node_id = p2p.peer_node_id AND p2p.node_id = l1.peer_node_id) ' .
79                                                'LEFT JOIN links AS clients ON (l1.type = "client" AND l1.peer_ap_id = clients.id) ' .
80                                                'INNER JOIN users_nodes ON nodes.id = users_nodes.node_id ' .
81                                                'LEFT JOIN users ON users.id = users_nodes.user_id',
82                                                'users.status = "activated" AND l1.status = "active" AND (p2p.status = "active" OR clients.status = "active")',
83                                                'l1.id'
84                                                );
85                $stats['stats_aps'] =
86                                $db->cnt('',
87                                                'nodes ' .
88                                                'INNER JOIN links ON links.node_id = nodes.id AND links.type = "ap" AND links.status = "active" ' .
89                                                'INNER JOIN users_nodes ON nodes.id = users_nodes.node_id ' .
90                                                'LEFT JOIN users ON users.id = users_nodes.user_id',
91                                                'users.status = "activated"',
92                                                'links.id'
93                                                );
94                $stats['stats_services_active'] =
95                                $db->cnt('',
96                                                'nodes_services',
97                                                'nodes_services.status = "active"'
98                                                );
99                $stats['stats_services_total'] =
100                                $db->cnt('',
101                                                'nodes_services',
102                                                ''
103                                                );
104                $this->tpl = array_merge($this->tpl, $stats);
105                $stats['last_calc'] = time();
106                if (is_writable($stats_tmp) || !file_exists($stats_tmp)) {
107                        $h = @fopen($stats_tmp, "w");
108                        @fwrite($h, serialize($stats));
109                        @fclose($h);
110                }
111        }
112       
113        function output() {
114                if ($this->hide) return;
115                if ($_SERVER['REQUEST_METHOD'] == 'POST' && method_exists($this, 'output_onpost_'.$_POST['form_name'])) call_user_func(array($this, 'output_onpost_'.$_POST['form_name']));
116                global $construct, $main, $db, $vars, $lang;
117                $this->tpl['logged'] = $main->userdata->logged;
118                $this->tpl['form_login'] = $construct->form($this->form_login(), __FILE__);
119               
120                $main->html->body->tpl['logged'] = $this->tpl['logged'];
121                $main->html->body->tpl['form_login'] = $this->tpl['form_login'];
122                $main->html->body->tpl['logged_username'] = isset($main->userdata->info['username'])?$main->userdata->info['username']:"";
123                $main->html->body->tpl['link_logged_profile'] = makelink(array("page" => "users", "user" => $main->userdata->user));
124               
125                foreach($vars['language']['enabled'] as $key => $value) {
126                        if ($value) {
127                                $main->html->body->tpl['languages'][$key]['name'] = ($lang['languages'][$key]==''?$key:$lang['languages'][$key]);
128                                $main->html->body->tpl['languages'][$key]['link'] = makelink(array("session_lang" => $key), TRUE);
129                        }
130                }
131               
132                if ($main->userdata->logged) {
133                        $this->tpl = array_merge($this->tpl, $main->userdata->info);
134                        $this->tpl['mynodes'] = $db->get('nodes.id, nodes.name', 'nodes INNER JOIN users_nodes ON nodes.id = users_nodes.node_id', "users_nodes.user_id = '".$main->userdata->user."'");
135                        foreach( (array) $this->tpl['mynodes'] as $key => $value) {
136                                $this->tpl['mynodes'][$key]['url'] = makelink(array("page" => "mynodes", "node" => $this->tpl['mynodes'][$key]['id']));
137                                $this->tpl['mynodes'][$key]['url_view'] = makelink(array("page" => "nodes", "node" => $this->tpl['mynodes'][$key]['id']));
138                        }
139                        $this->tpl['link_addnode'] = makelink(array("page" => "mynodes", "node" => "add"));
140                        $this->tpl['link_edit_profile'] = makelink(array("page" => "users", "user" => $main->userdata->user));
141                        if ($main->userdata->privileges['admin'] === TRUE) {
142                                $this->tpl['is_admin'] = TRUE;
143                                $this->tpl['link_admin_nodes'] = makelink(array("page" => "admin", "subpage" => "nodes"));
144                                $this->tpl['link_admin_users'] = makelink(array("page" => "admin", "subpage" => "users"));
145                                $this->tpl['link_admin_nodes_services'] = makelink(array("page" => "admin", "subpage" => "nodes_services"));
146                                $this->tpl['link_admin_services'] = makelink(array('page' => 'admin', 'subpage' => 'services'));
147                                $this->tpl['link_admin_regions'] = makelink(array('page' => 'admin', 'subpage' => 'regions'));
148                                $this->tpl['link_admin_areas'] = makelink(array('page' => 'admin', 'subpage' => 'areas'));
149                        }
150                        if ($main->userdata->privileges['admin'] === TRUE || $main->userdata->privileges['hostmaster'] === TRUE) {
151                                $this->tpl['is_hostmaster'] = TRUE;
152
153                                $this->tpl['link_dnsnameservers'] = makelink(array("page" => "hostmaster", "subpage" => "dnsnameservers"));
154                                $this->tpl['link_dnsnameservers_waiting'] = makelink(array("page" => "hostmaster", "subpage" => "dnsnameservers", "form_search_nameservers_search" => serialize(array("dns_nameservers__status" => "waiting"))));
155                                $this->tpl['dnsnameservers_waiting'] = $db->cnt('', "dns_nameservers", "status = 'waiting'");
156
157                                $this->tpl['link_dnszones'] = makelink(array("page" => "hostmaster", "subpage" => "dnszones"));
158                                $this->tpl['link_dnszones_waiting'] = makelink(array("page" => "hostmaster", "subpage" => "dnszones", "form_search_dns_search" => serialize(array("dns_zones__status" => "waiting"))));
159                                $this->tpl['dnszones_waiting'] = $db->cnt('', "dns_zones", "status = 'waiting'");
160
161                                $this->tpl['link_ranges'] = makelink(array("page" => "hostmaster", "subpage" => "ranges"));
162                                $this->tpl['link_ranges_waiting'] = makelink(array("page" => "hostmaster", "subpage" => "ranges", "form_search_ranges_search" => serialize(array("ip_ranges__status" => "waiting", "ip_ranges__delete_req" => "N"))));
163                                $this->tpl['ranges_waiting'] = $db->cnt('', "ip_ranges", "status = 'waiting' AND delete_req = 'N'");
164                                $this->tpl['link_ranges_req_del'] = makelink(array("page" => "hostmaster", "subpage" => "ranges", "form_search_ranges_search" => serialize(array("ip_ranges__delete_req" => "Y"))));
165                                $this->tpl['ranges_req_del'] = $db->cnt('', "ip_ranges", "delete_req = 'Y'");
166                        }
167                }
168                $this->tpl['link_home'] = makelink(array());
169                $this->tpl['link_allnodes'] = makelink(array("page" => "nodes"));
170                $this->tpl['link_allranges'] = makelink(array("page" => "ranges", "subpage" => "search"));
171                $this->tpl['link_allservices'] = makelink(array("page" => "services"));
172                $this->tpl['link_alldnszones'] = makelink(array("page" => "dnszones"));
173                $this->tpl['link_restore_password'] = makelink(array("page" => "users", "action" => "restore"));
174                $this->tpl['link_register'] = makelink(array("page" => "users", "user" => "add"));
175                $this->tpl['link_logout'] = makelink(array("page" => "users", "action" => "logout"));
176                parse_str(substr(makelink(array("page" => "search"), FALSE, TRUE, FALSE), 1), $this->tpl['query_string']);
177                $this->calculate_menu_stats();
178                $main->html->head->add_script("text/javascript", makelink(array("page" => "search", "subpage" => "suggest_js")));
179                return template($this->tpl, __FILE__);
180        }
181
182        function output_onpost_form_login() {
183                global $main;
184                if ($main->userdata->login($_POST['users__username'], $_POST['users__password'], ((isset($_POST['save_login']) && $_POST['save_login']=='Y')?TRUE:FALSE))) {
185                        if ($main->userdata->info['status'] == 'pending') {
186                                $main->message->set_fromlang('info', 'activation_required');
187                                $main->userdata->logout();
188                        } else {
189                                $main->message->set_fromlang('info', 'login_success', makelink());
190                        }
191                } else {
192                        $main->message->set_fromlang('error', 'login_failed', makelink("", TRUE));
193                }
194        }
195       
196}
197
198?>
Note: See TracBrowser for help on using the repository browser.