| 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 | |
|---|
| 23 | class 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 | ?> |
|---|