예제 #1
0
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;
}
예제 #2
0
/**
 * 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;
}