"; // Import the controller auth config include("config.php"); /** * set to true (without quotes) to enable debug output to the browser and the PHP error log */ $debug = true; $site_id = "default"; /** * initialize the Unifi API connection class, log in to the controller and request the alarms collection * (this example assumes you have already assigned the correct values to the variables used) */ $unifi_connection = new UniFi_API\Client($controller_user, $controller_password, $controller_url, $site_id, $controller_version, false); $login = $unifi_connection->login(); if($login > 400) { echo "Failed to log into controller"; die; } // $sites = $unifi_connection->list_sites(); // returns a PHP array containing sites $open_shops = array(); // Mogrify shop info into useable arrays foreach($fil_array as $filnr => $shop) { if(floatval($shop['aktief']) == 0) continue; if($shop['divisie_code'] != "D") continue; if((floatval($shop['kassa_aantal']) > 0)) $open_shops[$filnr] = ucfirst(strtolower($shop['corr_woonplaats'])); } // If debug, create Fake open shops array, otherwise unset test shops if($debug === true) { $open_shops = array(); $open_shops[943] = "Test 1"; $open_shops[965] = "Test 2"; } else { unset($open_shops[943]); unset($open_shops[965]); unset($close_shops[943]); unset($close_shops[965]); } // Check if we can find all our shop sites, otherwise add to todo list for creation, close list for deletion $todo_shops = $open_shops; $active_shops = array(); $close_shops = array(); foreach($unifi_connection->list_sites() as $site){ $desc = $site->desc; // Does it look like a shop? if(preg_match("/([0-9][0-9][0-9]+)/", $desc, $matches)) { // echo "Found site {$desc}\n"; unset($todo_shops[floatval($matches[1])]); $active_shops[floatval($matches[1])] = $site->name; if(!$open_shops[floatval($matches[1])]) { // echo "Shop {$matches[1]} does not have hardware\n"; $close_shops[floatval($matches[1])] = $site->name; } } } // If debug, create Fake site entries array, otherwise unset test shops if($debug === true) { $active_shops = array(); $active_shops[965] = "j103b83q"; $active_shops[943] = "winkels"; } else { unset($active_shops[943]); unset($active_shops[965]); unset($close_shops[943]); unset($close_shops[965]); } // Any sites we need to create before we can continue? foreach($todo_shops as $filnr => $city){ $filnr = sprintf("%04d", $filnr); $desc = "{$filnr} {$city}"; echo "Create site for {$filnr}\n"; $createsite = $unifi_connection->create_site($desc); if($createsite === false) { echo "Failed to create site for {$filnr}, id {$siteid}\n"; break; } } // Refresh site list if(count($todo_shops > 0)) { foreach($unifi_connection->list_sites() as $site){ $desc = $site->desc; // Does it look like a shop? if(preg_match("/([0-9][0-9][0-9]+)/", $desc, $matches)) { // echo "Found site {$desc}\n"; unset($todo_shops[floatval($matches[1])]); $active_shops[floatval($matches[1])] = $site->name; } } } // We should have 0 todo shops now // print_r($todo_shops); /* echo "Open\n"; print_r($open_shops); echo "Active\n"; print_r($active_shops); echo "Close\n"; print_r($close_shops); die(); */ // Foreach shop, select the site. foreach($active_shops as $filnr => $siteid) { $filnr = sprintf("%04d", $filnr); $select = $unifi_connection->set_site($siteid); // fetch configured group settings, we need those later, we only use the Default group. $wlangroups = $unifi_connection->list_wlan_groups($siteid); $usergroups = $unifi_connection->list_usergroups($siteid); if(isset($close_shops[floatval($filnr)])) { echo "Delete site {$siteid} with id ". $usergroups[0]->site_id ." for shop {$filnr}\n"; $delete = $unifi_connection->delete_site($usergroups[0]->site_id); if($delete === false) { echo "Failed to delete site for {$filnr}, id {$siteid}\n"; } continue; } // fetch configured group settings, we need those later, we only use the Default group. $wlangroups = $unifi_connection->list_wlan_groups($siteid); $usergroups = $unifi_connection->list_usergroups($siteid); if($debug===true) { //var_export ($wlangroups); //var_export ($usergroups); } foreach($wlangroups as $group){ // Check if template networks exist if($group->name == "Default") { $shawlangroup_id = $group->_id; } } foreach($usergroups as $group){ // Check if template networks exist if($group->name == "Default") { $shausergroup_id = $group->_id; } } // Include each time so site specific settings based on shop number are picked up unset($wirednetworks); unset($wlannetworks); unset($siteconf); include("settings.php"); refresh_networks(); refresh_wlans(); fetch_site_conf(); if($debug===true) { // var_export ($siteconf); //var_export ($wlanconf); // var_export ($networkconf); //print_r($wlannetworks); } foreach($sitesettings as $key => $values) { echo "Update site setting {$key} id {$setting_id[$key]} for {$filnr}, id {$siteid}\n"; switch($key){ case "country": $update_site[$key] = $unifi_connection->set_site_country($setting_id[$key], $sitesettings[$key]); break; case "locale": $update_site[$key] = $unifi_connection->set_site_locale($setting_id[$key], $sitesettings[$key]); break; case "connectivity ": $update_site[$key] = $unifi_connection->set_site_connectivity($setting_id[$key], $sitesettings[$key]); break; case "mgmt": $update_site[$key] = $unifi_connection->set_site_mgmt($setting_id[$key], $sitesettings[$key]); break; case "guest_access": $update_site[$key] = $unifi_connection->set_site_guest_access($setting_id[$key], $sitesettings[$key]); break; case "snmp": $update_site[$key] = $unifi_connection->set_site_snmp($setting_id[$key], $sitesettings[$key]); break; case "ntp": $update_site[$key] = $unifi_connection->set_site_ntp($setting_id[$key], $sitesettings[$key]); break; default: break; } if($update_site[$key] === false) echo "Failed to update setting {$key} for {$filnr}, id {$siteid} ". print_r($sitesettings[$key], true) ."\n"; } foreach($wirednetworks as $key => $values) { // Template network didn't exist, create if($wired[$key] === false) { echo "Create new vlan {$key} for {$filnr}, id {$siteid}\n"; $addnetwork[$key] = $unifi_connection->create_network($wirednetworks[$key]); // echo json_encode($addvlan, JSON_PRETTY_PRINT); } if($addnetwork[$key] === false) echo "Failed to add network {$key} for {$filnr}, id {$siteid}\n"; // Do we need to update? if($wired[$key] === true) { echo "Update network {$key} id {$wired_id[$key]} for {$filnr}, id {$siteid}\n"; $updatenetwork[$key] = $unifi_connection->set_networksettings_base($wired_id[$key], $wirednetworks[$key]); } if($updatenetwork[$key] === false) echo "Failed to update network {$key} for {$filnr}, id {$siteid} ". print_r($wirednetworks[$key], true) . print_r($wired_id, true) ."\n"; } foreach($wlannetworks as $key => $values) { // Template network didn't exist, create if($wlan[$key] === false) { echo "Create new disabled wlan {$key} for {$filnr}, id {$siteid}\n"; $addwlan[$key] = $unifi_connection->create_wlan($wlannetworks[$key]['name'], $wlannetworks[$key]['x_passphrase'], $wlannetworks[$key]['usergroup_id'], $wlannetworks[$key]['wlangroup_id'], false); } if($addwlan[$key] === false) echo "Failed to add wlan {$key} for {$filnr}, id {$siteid} ". print_r($wlannetworks[$key], true) ."\n"; else refresh_wlans(); // Do we need to update? if($wlan[$key] === true) { echo "Update wlan {$key} id {$wlan_id[$key]} for {$filnr}, id {$siteid}\n"; $updatewlan[$key] = $unifi_connection->set_wlansettings_base($wlan_id[$key], $wlannetworks[$key]); } if($updatewlan[$key] === false) echo "Failed to update wlan {$key} for {$filnr}, id {$siteid} ". print_r($wlannetworks[$key], true) . print_r($wlan_id, true) ."\n"; } if($debug===true) break; } $logout = $unifi_connection->logout(); function refresh_networks() { global $unifi_connection; global $networkconf; global $wired; global $wired_id; global $shasite_id; global $wirednetworks; // Fetch configured wired networks $networkconf = $unifi_connection->list_networkconf(); foreach($wirednetworks as $key => $values) { $wired[$key] = false; } // Lan netwerken foreach($networkconf as $network){ // Check if template networks exist foreach($wirednetworks as $key => $values) { if(($network->name == "$key")) { $wired[$key] = true; $wired_id[$key] = $network->_id; $shasite_id = $network->site_id; } } } } function refresh_wlans() { global $unifi_connection; global $wlanconf; global $wlan; global $wlan_id; global $shasite_id; global $wlannetworks; // Fetch Wireless networks $wlanconf = $unifi_connection->list_wlanconf(); foreach($wlannetworks as $key => $values) $wlan[$key] = false; foreach($wlanconf as $network){ // Check if template networks exist foreach($wlannetworks as $key => $values) { if($network->name == "$key") { $wlan[$key] = true; $wlan_id[$key] = $network->_id; $shasite_id = $network->site_id; } } } } function fetch_site_conf() { global $unifi_connection; global $siteconf; global $siteid; global $setting; global $setting_id; // Fetch site settings $siteconf = $unifi_connection->list_settings($siteid); foreach($sitesettings as $key => $values) $sitesetting[$key] = false; $setting = array(); foreach($siteconf as $arr) { $setting[$arr->key] = $arr; $setting_id[$arr->key] = $arr->_id; } } ?>