info($plan['routers']); $client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $this->removePpoeUser($client, $customer['username']); $this->removePpoeActive($client, $customer['username']); $this->addPpoeUser($client, $plan, $customer); } function remove_customer($customer, $plan) { global $_app_stage; if ($_app_stage == 'demo') { return; } $mikrotik = $this->info($plan['routers']); $client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); if (!empty($plan['plan_expired'])) { $p = ORM::for_table("tbl_plans")->select("name_plan")->find_one($plan['plan_expired']); $this->setPpoeUserPlan($client, $customer['username'], $p['plan_expired']); } else { $this->removePpoeUser($client, $customer['username']); } $this->removePpoeActive($client, $customer['username']); } function change_customer($customer, $plan) { global $_app_stage; if ($_app_stage == 'demo') { return; } $mikrotik = $this->info($plan['routers']); $client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $this->removePpoeUser($client, $customer['username']); $this->removePpoeActive($client, $customer['username']); $this->addPpoeUser($client, $plan, $customer); } function add_plan($plan) { global $_app_stage; if ($_app_stage == 'demo') { return; } $mikrotik = $this->info($plan['routers']); $client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); //Add Pool $bw = ORM::for_table("tbl_bandwidth")->find_one($plan['id_bw']); if ($bw['rate_down_unit'] == 'Kbps') { $unitdown = 'K'; } else { $unitdown = 'M'; } if ($bw['rate_up_unit'] == 'Kbps') { $unitup = 'K'; } else { $unitup = 'M'; } $rate = $bw['rate_up'] . $unitup . "/" . $bw['rate_down'] . $unitdown; if(!empty(trim($bw['burst']))){ $rate .= ' '.$bw['burst']; } $pool = ORM::for_table("tbl_pool")->where("pool_name", $plan['pool'])->find_one(); $addRequest = new RouterOS\Request('/ppp/profile/add'); $client->sendSync( $addRequest ->setArgument('name', $plan['name_plan']) ->setArgument('local-address', (!empty($pool['local_ip'])) ? $pool['local_ip']: $pool['pool_name']) ->setArgument('remote-address', $pool['pool_name']) ->setArgument('rate-limit', $rate) ); } function update_plan($old_name, $new_plan) { global $_app_stage; if ($_app_stage == 'demo') { return; } $mikrotik = $this->info($new_plan['routers']); $client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $printRequest = new RouterOS\Request( '/ppp profile print .proplist=.id', RouterOS\Query::where('name', $old_name['name_plan']) ); $profileID = $client->sendSync($printRequest)->getProperty('.id'); if (empty($profileID)) { $this->add_plan($new_plan); } else { $bw = ORM::for_table("tbl_bandwidth")->find_one($new_plan['id_bw']); if ($bw['rate_down_unit'] == 'Kbps') { $unitdown = 'K'; } else { $unitdown = 'M'; } if ($bw['rate_up_unit'] == 'Kbps') { $unitup = 'K'; } else { $unitup = 'M'; } $rate = $bw['rate_up'] . $unitup . "/" . $bw['rate_down'] . $unitdown; if(!empty(trim($bw['burst']))){ $rate .= ' '.$bw['burst']; } $pool = ORM::for_table("tbl_pool")->where("pool_name", $new_plan['pool'])->find_one(); $setRequest = new RouterOS\Request('/ppp/profile/set'); $client->sendSync( $setRequest ->setArgument('numbers', $profileID) ->setArgument('local-address', (!empty($pool['local_ip'])) ? $pool['local_ip']: $pool['pool_name']) ->setArgument('remote-address', $pool['pool_name']) ->setArgument('rate-limit', $rate) ); } } function remove_plan($plan) { global $_app_stage; if ($_app_stage == 'demo') { return; } $mikrotik = $this->info($plan['routers']); $client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $printRequest = new RouterOS\Request( '/ppp profile print .proplist=.id', RouterOS\Query::where('name', $plan['name_plan']) ); $profileID = $client->sendSync($printRequest)->getProperty('.id'); $removeRequest = new RouterOS\Request('/ppp/profile/remove'); $client->sendSync( $removeRequest ->setArgument('numbers', $profileID) ); } function add_pool($pool){ global $_app_stage; if ($_app_stage == 'demo') { return null; } $mikrotik = $this->info($pool['routers']); $client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $addRequest = new RouterOS\Request('/ip/pool/add'); $client->sendSync( $addRequest ->setArgument('name', $pool['pool_name']) ->setArgument('ranges', $pool['range_ip']) ); } function update_pool($old_pool, $new_pool){ global $_app_stage; if ($_app_stage == 'demo') { return null; } $mikrotik = $this->info($new_pool['routers']); $client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $printRequest = new RouterOS\Request( '/ip pool print .proplist=.id', RouterOS\Query::where('name', $old_pool['pool_name']) ); $poolID = $client->sendSync($printRequest)->getProperty('.id'); if (empty($poolID)) { $this->add_pool($new_pool); } else { $setRequest = new RouterOS\Request('/ip/pool/set'); $client->sendSync( $setRequest ->setArgument('numbers', $poolID) ->setArgument('name', $new_pool['pool_name']) ->setArgument('ranges', $new_pool['range_ip']) ); } } function remove_pool($pool){ global $_app_stage; if ($_app_stage == 'demo') { return null; } $mikrotik = $this->info($pool['routers']); $client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $printRequest = new RouterOS\Request( '/ip pool print .proplist=.id', RouterOS\Query::where('name', $pool['pool_name']) ); $poolID = $client->sendSync($printRequest)->getProperty('.id'); $removeRequest = new RouterOS\Request('/ip/pool/remove'); $client->sendSync( $removeRequest ->setArgument('numbers', $poolID) ); } function online_customer($customer, $router_name) { global $_app_stage; if ($_app_stage == 'demo') { return; } $mikrotik = $this->info($router_name); $client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $printRequest = new RouterOS\Request( '/ppp active print', RouterOS\Query::where('user', $customer['username']) ); return $client->sendSync($printRequest)->getProperty('.id'); } function connect_customer($customer, $ip, $mac_address, $router_name) { global $_app_stage; if ($_app_stage == 'demo') { return; } } function disconnect_customer($customer, $router_name) { global $_app_stage; if ($_app_stage == 'demo') { return; } } function info($name) { return ORM::for_table('tbl_routers')->where('name', $name)->find_one(); } function getClient($ip, $user, $pass) { global $_app_stage; if ($_app_stage == 'demo') { return null; } $iport = explode(":", $ip); return new RouterOS\Client($iport[0], $user, $pass, ($iport[1]) ? $iport[1] : null); } function removePpoeUser($client, $username) { global $_app_stage; if ($_app_stage == 'demo') { return null; } $printRequest = new RouterOS\Request('/ppp/secret/print'); //$printRequest->setArgument('.proplist', '.id'); $printRequest->setQuery(RouterOS\Query::where('name', $username)); $id = $client->sendSync($printRequest)->getProperty('.id'); $removeRequest = new RouterOS\Request('/ppp/secret/remove'); $removeRequest->setArgument('numbers', $id); $client->sendSync($removeRequest); } function addPpoeUser($client, $plan, $customer) { global $_app_stage; if ($_app_stage == 'demo') { return null; } $addRequest = new RouterOS\Request('/ppp/secret/add'); if (!empty($customer['pppoe_password'])) { $pass = $customer['pppoe_password']; } else { $pass = $customer['password']; } $client->sendSync( $addRequest ->setArgument('name', $customer['username']) ->setArgument('service', 'pppoe') ->setArgument('profile', $plan['name_plan']) ->setArgument('comment', $customer['fullname'] . ' | ' . $customer['email']) ->setArgument('password', $pass) ); } function setPpoeUser($client, $user, $pass) { global $_app_stage; if ($_app_stage == 'demo') { return null; } $printRequest = new RouterOS\Request('/ppp/secret/print'); $printRequest->setArgument('.proplist', '.id'); $printRequest->setQuery(RouterOS\Query::where('name', $user)); $id = $client->sendSync($printRequest)->getProperty('.id'); $setRequest = new RouterOS\Request('/ppp/secret/set'); $setRequest->setArgument('numbers', $id); $setRequest->setArgument('password', $pass); $client->sendSync($setRequest); } function setPpoeUserPlan($client, $user, $plan) { global $_app_stage; if ($_app_stage == 'demo') { return null; } $printRequest = new RouterOS\Request('/ppp/secret/print'); $printRequest->setArgument('.proplist', '.id'); $printRequest->setQuery(RouterOS\Query::where('name', $user)); $id = $client->sendSync($printRequest)->getProperty('.id'); $setRequest = new RouterOS\Request('/ppp/secret/set'); $setRequest->setArgument('numbers', $id); $setRequest->setArgument('profile', $plan); $client->sendSync($setRequest); } function removePpoeActive($client, $username) { global $_app_stage; if ($_app_stage == 'demo') { return null; } $onlineRequest = new RouterOS\Request('/ppp/active/print'); $onlineRequest->setArgument('.proplist', '.id'); $onlineRequest->setQuery(RouterOS\Query::where('name', $username)); $id = $client->sendSync($onlineRequest)->getProperty('.id'); $removeRequest = new RouterOS\Request('/ppp/active/remove'); $removeRequest->setArgument('numbers', $id); $client->sendSync($removeRequest); } function getIpHotspotUser($client, $username) { global $_app_stage; if ($_app_stage == 'demo') { return null; } $printRequest = new RouterOS\Request( '/ip hotspot active print', RouterOS\Query::where('user', $username) ); return $client->sendSync($printRequest)->getProperty('address'); } function addIpToAddressList($client, $ip, $listName, $comment = '') { global $_app_stage; if ($_app_stage == 'demo') { return null; } $addRequest = new RouterOS\Request('/ip/firewall/address-list/add'); $client->sendSync( $addRequest ->setArgument('address', $ip) ->setArgument('comment', $comment) ->setArgument('list', $listName) ); } function removeIpFromAddressList($client, $ip) { global $_app_stage; if ($_app_stage == 'demo') { return null; } $printRequest = new RouterOS\Request( '/ip firewall address-list print .proplist=.id', RouterOS\Query::where('address', $ip) ); $id = $client->sendSync($printRequest)->getProperty('.id'); $removeRequest = new RouterOS\Request('/ip/firewall/address-list/remove'); $client->sendSync( $removeRequest ->setArgument('numbers', $id) ); } }