function guifi_radio_add_radio_submit(&$form, &$form_state) { guifi_log(GUIFILOG_TRACE, "function guifi_radio_add_radio_submit()", $form_state['values']); // wrong form navigation, can't do anything if ($form_state['values']['newradio_mode'] == NULL) { return TRUE; } $edit = $form_state['values']; $radio = _guifi_radio_prepare_add_radio($edit); $radio['unfold'] = TRUE; $radio['unfold_main'] = TRUE; $radio['unfold_antenna'] = TRUE; $form_state['rebuild'] = TRUE; $form_state['values']['radios'][] = $radio; drupal_set_message(t('Radio %ssid added in mode %mode.', array('%ssid' => $radio['ssid'], '%mode' => $radio['mode']))); return; }
/** * Adds a radio to a device * @param GuifiAPI $gapi * @param mixed[] $parameters Parameters of the radio * @return unknown_type */ function guifi_api_radio_add($gapi, $parameters) { if (!guifi_api_check_fields($gapi, array('mode', 'device_id'), $parameters)) { return FALSE; } $device = guifi_device_load($parameters['device_id']); if (!$device['id']) { $gapi->addError(500, "device not found: {$parameters['device_id']}"); return FALSE; } $maxradios = db_fetch_object(db_query('SELECT radiodev_max FROM {guifi_model_specs} WHERE mid=%d', $device['variable']['model_id'])); $maxradios = $maxradios->radiodev_max; if (count($device['radios']) >= $maxradios) { $gapi->addError(404, "This device already has the maximum number of radios allowed: {$maxradios}"); return FALSE; } if (count($device['radios']) > 0) { if (!guifi_api_check_fields($gapi, array('mac'), $parameters)) { return FALSE; } } $device['newradio_mode'] = $parameters['mode']; $radio = _guifi_radio_prepare_add_radio($device); $fields = array('mac', 'antenna_angle', 'antenna_gain', 'antenna_azimuth', 'antenna_mode'); if ($parameters['mode'] == 'ap') { $fields = array_merge($fields, array('ssid', 'protocol', 'channel', 'clients_accepted')); } else { if ($parameters['mode'] == 'mesh') { $fields = array_merge($fields, array('ssid', 'protocol', 'channel')); } } if (!_guifi_api_radio_check_parameters($gapi, $parameters)) { return FALSE; } if (!guifi_device_access('update', $device)) { $gapi->addError(501); return FALSE; } foreach ($fields as $field) { if (isset($parameters[$field])) { $radio[$field] = $parameters[$field]; } } $device['radios'][] = $radio; guifi_device_save($device); $gapi->addResponseField('radiodev_counter', count($device['radios']) - 1); $interfaces = array(); if (!empty($radio['interfaces'])) { foreach ($radio['interfaces'] as $if) { $interface = array(); $interface['interface_type'] = $if['interface_type']; if (!empty($if['ipv4'])) { $interface['ipv4'] = array(); foreach ($if['ipv4'] as $if_ipv4) { $ipv4 = array(); $ipv4['ipv4_type'] = $if_ipv4['ipv4_type']; $ipv4['ipv4'] = $if_ipv4['ipv4']; $ipv4['netmask'] = $if_ipv4['netmask']; $interface['ipv4'][] = $ipv4; } } $interfaces[] = $interface; } } if (!empty($interfaces)) { $gapi->addResponseField('interfaces', $interfaces); } return TRUE; }