예제 #1
0
function guifi_devel_firmware_form($form_state, $firmid)
{
    global $user;
    $firmware = guifi_get_firmware($firmid);
    if ($firmid == 'New') {
        $form['new'] = array('#type' => 'hidden', '#value' => TRUE);
    } else {
        $form['id'] = array('#type' => 'hidden', '#value' => $firmid);
    }
    $form['relations'] = array('#type' => 'hidden', '#value' => $firmware->relations);
    $form['nom'] = array('#type' => 'textfield', '#title' => t('Firmware short name'), '#required' => TRUE, '#default_value' => $firmware->nom, '#size' => 32, '#maxlength' => 32, '#description' => t('The firmware name, please, use a clear and short name. ex: "FirmwarevXX" where XX = version'));
    $form['managed'] = array('#type' => 'checkboxes', '#title' => t('Manageability'), '#default_value' => $firmware->managed, '#description' => t('Capabilities'), '#options' => array('vlans' => t('vlans'), 'aggregations' => t('aggregations'), 'tunnels' => t('tunnels')));
    $form['enabled'] = array('#type' => 'checkbox', '#title' => t('Enabled'), '#default_value' => $firmware->enabled, '#description' => t('Check if firmware is avialable for use'));
    $form['notification'] = array('#type' => 'textfield', '#size' => 60, '#maxlength' => 1024, '#title' => t('contact'), '#required' => TRUE, '#element_validate' => array('guifi_emails_validate'), '#default_value' => empty($firmware->notification) ? $user->mail : $firmware->notification, '#description' => t('Mailid where changes on the device will be notified, if many, separated by \',\'<br />used for network administration.'));
    $form['descripcio'] = array('#type' => 'textarea', '#title' => t('Firmware Description'), '#required' => TRUE, '#default_value' => $firmware->descripcio, '#size' => 64, '#maxlength' => 64, '#description' => t('The firmware description, please, use a clear and short description. ex: "FirmwarevXX from creator"'));
    $query = db_query(" select\n                          pf.fid, pf.pid, p.id, p.nom\n                      from\n                          guifi_parametres p\n                              left join\n                          guifi_parametresFirmware pf ON pf.pid = p.id and pf.fid = %d\n                      order by p.nom asc", $firmid);
    while ($parametres = db_fetch_array($query)) {
        if ($parametres["pid"]) {
            $params_associats[$parametres["pid"]] = $parametres["nom"];
        } else {
            $params_disponibles[$parametres["id"]] = $parametres["nom"];
        }
    }
    $form['parametres_associats'] = array('#type' => 'select', '#title' => t('Parametres associats'), '#default_value' => 0, '#options' => $params_associats, '#description' => t('Parametres associats a la definició d\'aquest firmware.'), '#size' => 10, '#multiple' => true, '#required' => false, '#validated' => true, '#prefix' => '<table style="width:575px"><tr><td style="width:250px">', '#suffix' => '</td><td  style="width:50px">', '#weight' => $form_weight++, '#attributes' => array('style' => 'width:250px;height:350px'));
    $disponiblesButtonOne = '<input type="button" value=">" id="associatsButtonOne" class="selectButtons" style="width:40px;margin:5px 0;">';
    $disponiblesButtonAll = '<input type="button" value=">>" id="associatsButtonAll" class="selectButtons" style="width:40px;margin:5px 0;">';
    $associatsButtonOne = '<input type="button" value="<" id="disponiblesButtonOne" class="selectButtons" style="width:40px;margin:5px 0;">';
    $associatsButtonAll = '<input type="button" value="<<" id="disponiblesButtonAll" class="selectButtons" style="width:40px;margin:5px 0;">';
    $botons = $disponiblesButtonOne . '<br>';
    $botons .= $disponiblesButtonAll . '<br>';
    $botons .= $associatsButtonOne . '<br>';
    $botons .= $associatsButtonAll . '<br>';
    $form['parametres_disponibles'] = array('#type' => 'select', '#title' => t('Parametres disponibles'), '#default_value' => 0, '#options' => $params_disponibles, '#description' => t('Parametres disponibles per a definir aquest firmware'), '#size' => 10, '#multiple' => true, '#required' => false, '#validated' => true, '#prefix' => $botons . '</td><td>', '#suffix' => '</td></tr></table>', '#weight' => $form_weight++, '#attributes' => array('style' => 'width:250px;height:350px'));
    $form['submit'] = array('#type' => 'submit', '#weight' => 99, '#value' => t('Save'));
    //$form['submit'] = array('#type' => 'submit',    '#weight' => $form_weight, '#value' => t('Save'));
    return $form;
}
예제 #2
0
function guifi_unsolclic($dev, $format = 'html')
{
    global $rc_startup;
    global $ospf_zone;
    global $otype;
    $paramPrefixes = array("zone", "node", "user", "device", "firmware", "radio", "interface", "ipv4", "link", "linkedto_");
    $otype = $format;
    $dev = (object) $dev;
    $flattenDev = array_flatten((array) $dev, array());
    if (isValidConfiguracioUSC($dev->usc_id)) {
        // carreguem el Twig , versió utilitzada 1.91
        include_once 'contrib/Twig/Autoloader.php';
        // FINAL. Treure el fitxer unsolclic resultant com a mime text/plain
        //drupal_set_header('Content-Type: text/plain; charset=utf-8');
        // PFC passos
        // 1. Recuperar informacio del trasto
        // 1.a Recuperar el id de model del trasto (del camp extra de device)
        $modelId = $dev->mid;
        // recollir la configuracio unscolclic actual
        $uscId = $dev->usc_id;
        // 1.b recollir de la BD la informacio del model
        $model = guifi_get_model($modelId);
        // 1.c recollir les característiques del model
        // aixo no es fa servir per res!!!!
        $caractModel = guifi_get_caractmodel($modelId);
        // 2. Recuperar informacio del firmware
        // 2.a Recuperar el id del firmware del trasto(del camp extra de device)
        $firmwareName = $dev->variable['firmware'];
        $firmwareId = $dev->fid;
        // 2.b recollir de la BD la informacio del firmware
        $firmware = guifi_get_firmware($firmwareName);
        // 2.c recollir els parametres del firmware
        // tampoc es fa servir per RES!!!!!!
        $paramsFirmware = guifi_get_paramsFirmware($firmwareId);
        // 3. Recuperar la configuracióUnSolClic tq modelid i firmware:id
        $configuracioUSC = guifi_get_configuracioUSC($modelId, $firmwareId, $uscId);
        // 3.a recuperar la plantilla de la configuracio
        $plantilla = $configuracioUSC['plantilla'];
        // a plantilla hi ha el contingut de la plantilla del unsolclic
        // 4. recuperar TOTS els parametres variables associats al trasto
        //$paramsDevice = guifi_get_paramsDevice($dev->id);
        $paramsDevice = guifi_get_paramsClientDevice($dev->id);
        // 5. Indexar els els parametres variables associats al trasto
        $indexedParamsDevice = guifi_indexa_paramsDevice($paramsDevice, $paramPrefixes);
        // 6. recuperar els parametres de la plantilla
        $paramsconfiguracioUSC = guifi_get_paramsconfiguracioUSC($uscId);
        // 6.B. recuperar els la informacio de la configuracio de fabricant-model-firmware
        $paramsMMF = guifi_get_paramsMMF($dev->id);
        // 4.b Comprovacions sobre el Device
        $clientModeNoAPError = clientModeError($dev);
        if ($clientModeNoAPError) {
            $plantilla = $clientModeNoAPError;
        }
        $totalParameters = array_merge($indexedParamsDevice, $paramsMMF, $flattenDev);
        // altres parametres fixes; TODO posar-lo com a parametre fixe de la plantilla
        $totalParameters['ospf_name'] = 'backbone';
        // proves de twig
        $zone = guifi_zone_load($totalParameters['zone_id']);
        list($primary_dns, $secondary_dns, $ternary_dns) = explode(' ', guifi_get_dns($zone, 3));
        $totalParameters['zone_primary_dns'] = $primary_dns;
        $totalParameters['zone_secondary_dns'] = $secondary_dns;
        $totalParameters['zone_ternary_dns'] = $ternary_dns;
        list($primary_ntp, $secondary_ntp) = explode(' ', guifi_get_ntp($zone));
        $totalParameters['zone_primary_ntp'] = $primary_ntp;
        $totalParameters['zone_secondary_ntp'] = $secondary_ntp;
        if ($paramsconfiguracioUSC) {
            // 7. substituir els parametres a la plantilla
            foreach ($paramsconfiguracioUSC as $tupla) {
                $param = $tupla['nom'];
                $valor = $tupla['valor'];
                $dinamic = $tupla['dinamic'];
                $origen = $tupla['origen'];
                if ($dinamic == true) {
                    // DINAMIC s'ha de fer una segona passatda per buscar el origen de veritat
                    $valor = $totalParameters[$origen];
                }
                $totalParameters[$param] = $valor;
                //echo "\n<br>param '$param' $dinamic = '$valor $origen' ";
            }
            Twig_Autoloader::register();
            $loader = new Twig_Loader_String();
            //$loader = new Twig_Loader_Filesystem('/home/albert/workspace/guifinet/drupal-6.22/sites/all/modules/guifi/firmware');
            $twig = new Twig_Environment($loader);
            $totalParameters['dev'] = $dev;
            $twig->addFunction('ip2long', new Twig_Function_Function('ip2long'));
            $twig->addFunction('long2ip', new Twig_Function_Function('long2ip'));
            $twig->addFunction('t', new Twig_Function_Function('t'));
            $twig->addFunction('guifi_to_7bits', new Twig_Function_Function('guifi_to_7bits'));
            $twig->addFunction('guifi_get_alchemy_ifs', new Twig_Function_Function('guifi_get_alchemy_ifs'));
            $twig->addFunction('guifi_main_ip', new Twig_Function_Function('guifi_main_ip'));
            $twig->addFunction('explode', new Twig_Function_Function('explode'));
            $escaper = new Twig_Extension_Escaper(true);
            $twig->addExtension($escaper);
            //$plantilla  = $twig->render($configuracioUSC['template_file'], $twigVars);
            $plantilla = $twig->render($plantilla, $totalParameters);
            //
        }
        if ($totalParameters['manufacturer_name'] != 'Ubiquiti') {
            $plantilla = str_replace("\n", "\n<br />", $plantilla);
        }
        echo $plantilla;
        die;
    }
    if ($dev->variable['firmware'] == 'n/a') {
        _outln_comment(t("ERROR: I do need a firmware selected at the radio web interface: ") . '<a href="' . base_path() . '/guifi/device/' . $dev->id . '/edit">http://guifi.net/guifi/device/' . $dev->id . '/edit');
        return;
    } else {
        _outln_comment(t("Generated for:"));
        _outln_comment($dev->variable['firmware']);
    }
    foreach (glob(drupal_get_path('module', 'guifi') . '/firmware/*.inc.php', GLOB_BRACE) as $firm_inc_php) {
        include_once "{$firm_inc_php}";
        // echo "<br>$firm_inc_php";
    }
    if ($dev->radios[0]['mode'] == 'client') {
        $links = 0;
        foreach ($dev->radios[0]['interfaces'] as $interface_id => $interface) {
            foreach ($interface['ipv4'] as $ipv4_id => $ipv4) {
                if (isset($ipv4['links'])) {
                    foreach ($ipv4['links'] as $key => $link) {
                        if ($link['link_type'] == 'ap/client') {
                            $links++;
                            break;
                        }
                    }
                }
            }
        }
        if ($links == 0) {
            _outln_comment(t("ERROR: Radio is in client mode but has no AP selected, please add a link to the AP at: ") . '<a href="' . base_path() . 'guifi/device/' . $dev->id . '/edit">http://guifi.net/guifi/device/' . $dev->id . '/edit');
            return;
        }
    }
    switch ($dev->variable['firmware']) {
        case 'RouterOSv2.9':
        case 'RouterOSv3.x':
        case 'RouterOSv4.0+':
        case 'RouterOSv4.7+':
        case 'RouterOSv5.x':
        case 'RouterOSv6.x':
            unsolclic_routeros($dev);
            exit;
            break;
        case 'DD-guifi':
        case 'DD-WRTv23':
        case 'Alchemy':
        case 'Talisman':
            unsolclic_wrt($dev);
            exit;
            break;
        case 'AirOsv221':
        case 'AirOsv30':
        case 'AirOsv3.6+':
            unsolclic_airos($dev);
            exit;
            break;
            //    case 'AirOsv52':
            //    unsolclic_airos52($dev);
            //      exit;
            //      break;
        //    case 'AirOsv52':
        //    unsolclic_airos52($dev);
        //      exit;
        //      break;
        case 'GuifiStationOS1.0':
            unsolclic_guifistationos($dev);
            exit;
            break;
            //    case 'qMpv1':   // Use a generic one is better
        //    case 'qMpv1':   // Use a generic one is better
        case preg_match('/^qMp/', $dev->variable['firmware']) == 1:
            unsolclic_qmp($dev);
            exit;
            break;
    }
    $unsolclic = 'unsolclic_' . $dev->variable['firmware'];
    if (function_exists(${unsolclic})) {
        ${unsolclic}($dev);
        exit;
    } else {
        unsolclic_todo($dev);
    }
}
예제 #3
0
/**
 * @param array containing editing device information  $edit
 * @param weight form ewlements $form_weight
 */
function guifi_vinterfaces_form($iClass, $edit, &$form_weight)
{
    global $user;
    guifi_log(GUIFILOG_TRACE, 'function guifi_vinterfaces_form(iClass)', $edit[$iClass]);
    switch ($edit[type]) {
        case 'switch':
            if (!$edit[variable][managed] or in_array($iClass, 'tunnels')) {
                return;
            }
            break;
        case 'radio':
            if (empty($edit[variable][firmware_id])) {
                return;
            }
            $firm = guifi_get_firmware($edit[variable][firmware_id]);
            if (!in_array($iClass, $firm->managed)) {
                return;
            }
            break;
        default:
            return;
    }
    switch ($iClass) {
        case 'aggregations':
            $icon = '/icons/aggr-16.png';
            $iconNew = '/icons/aggr-new.png';
            $msg = t('Aggregations (bridges, bondings...) section');
            $ititle = t('Aggregations');
            break;
        case 'vlans':
            $icon = '/icons/vlans-16.png';
            $iconNew = '/icons/vlans-new.png';
            $msg = t('Virtual Interfaces (vlans,vrrp...) section');
            $ititle = t('Virtual Interfaces');
            break;
        default:
            $icon = '/icons/ports-16.png';
            $msg = t('%iClass section', array('%iClass' => $iClass));
            break;
    }
    // Build vinterface fieldset
    $form = array('#type' => 'fieldset', '#title' => t($ititle) . ' - ' . count($edit[$iClass]), '#collapsible' => TRUE, '#tree' => TRUE, '#collapsed' => TRUE, '#weight' => $form_weight++, '#prefix' => '<br><img src="/' . drupal_get_path('module', 'guifi') . $icon . '"> ' . $msg . '<div id="add-' . $iClass . '">', '#suffix' => '</div>');
    if (empty($edit[$iClass])) {
        guifi_log(GUIFILOG_TRACE, 'function guifi_ports_form(empty)', $iClass);
        guifi_vinterface_form($form, $iClass, 0, $edit, true, $form_weight);
        /* $form['msgnone'] = array(
             '#type' =>'item',
             '#value'=>t('None'),
             '#weight'=>$form_weight++,
           ); */
    }
    // Loop across all existing interfaces
    $vif_count = 0;
    $total_vif = count($iClass);
    $first_vif = true;
    // placeholder for the add interface form
    /* $form['vifs'] = array(
        '#parents'   => array('vifs'),
        '#type'      => 'fieldset',
        '#prefix'    => '<div id="add-'.$iClass.'">',
        '#suffix'    => '</div>',
        '#weight'    => $form_weight++,
      ); */
    guifi_log(GUIFILOG_TRACE, 'function guifi_vinterfaces_form(edit)', $edit[$iClass]);
    foreach ($edit[$iClass] as $vifId => $vif) {
        guifi_log(GUIFILOG_TRACE, 'function guifi_vinterfaces_form(vint LOOP)', $vifId);
        $form[$vifId] = guifi_vinterface_form($iClass, $vif, $first_vif, guifi_get_currentInterfaces($edit));
        $first_vif = false;
    }
    guifi_log(GUIFILOG_TRACE, 'function guifi_ports_form(vint LOOP AFTER)', $form);
    // placeholder for the add interface form
    /*  $form['vinew'] = array(
        '#type'   => 'hidden',
        '#prefix' => '<div id="add-'.$iClass.'">',
        '#suffix' => '</div>',
        '#weight' => $form_weight++,
      );*/
    $form['add' . $iClass] = array('#type' => 'image_button', '#src' => drupal_get_path('module', 'guifi') . $iconNew, '#parents' => array('add' . $iClass), '#attributes' => array('title' => t('Add ' . $iClass)), '#ahah' => array('path' => 'guifi/js/add-vinterface/' . $iClass, 'wrapper' => 'add-' . $iClass, 'method' => 'replace', 'effect' => 'fade'), '#weight' => $form_weight++);
    return $form;
}