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; }
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); } }
/** * @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; }