Provisioner.net

Status
Niet open voor verdere reacties.

Ajoskam

Gebruiker
Lid geworden
18 feb 2015
Berichten
18
Goedemorgen allemaal,

Ik heb de provisioner van http://www.provisioner.net gedownload!
Echter geeft de code allemaal foutmeldingen! Als ik de 1 oplos komt de andere alweer!
Ik kan de code niet plaatsen vanwege een overschot aan code, (Zegmaar 3000 regels). De code kan gedownload worden van http://www.provisioner.net

Ik open logischerwijs de map "Samples" en dan open ik "Demo.php" met Xampp!

Echter krijg ik gelijk de eerste foutmelding: Fatal error: Call to undefined function file2json() in C:\xampp\htdocs\Provisioner\Provisioner-master\samples\demo.php on line 2

Afijn, ik verplaats de functie. Nu laat hij een form zien, zonder enige foutmelding! Maar, in de form staan "Select" velden, hierin moeten merken worden weergegeven, dat doet hij niet. En dan als je een merk hebt geselecteerd zou je de toestel-modellen moeten gaan zien, dat gebeurt dus ook niet! En de tijdzones laat hij ook niet zien.

Ik ben aan het stagelopen en mijn opdrachtgever had een poos terug een werkende versie, dus hij wilde dat ik die ging testen en een betere maken.
Dat gaat dus niet, omdat de code totaal niet meer werkt!

Ik hoop dat iemand mij hiermee kan helpen zodat ik weer gewoon aan de slag kan, in plaats van hoofdpijn krijgen van het staren naar code, dat ik niet zelf getypt heb, waar bijna geen comments in staan en wat met een andere programmeertaal dan ik gewend ben! Daar word ik een beetje moedeloos van!

Dus ik hoop dat jullie mij kunnen helpen met dit grote probleem!
 
fouten zijn er om opgelost te worden de fout
: Fatal error: Call to undefined function file2json() in C:\xampp\htdocs\Provisioner\Provisioner-master\samples\demo.php on line 2

dat wil zeggen dat bestand demo.php
op regel 2 een fout zit
download note pad +
open de bestand ver verander de bende
 
fouten zijn er om opgelost te worden de fout
: Fatal error: Call to undefined function file2json() in C:\xampp\htdocs\Provisioner\Provisioner-master\samples\demo.php on line 2

dat wil zeggen dat bestand demo.php
op regel 2 een fout zit
download note pad +
open de bestand ver verander de bende

Dat had ik ook wel door! Ik gebruik Netbeans & Sublime text. De bende... Er zit Ajax & jQuery in de code(waar ik niks van snap) Ik heb al een hoop geprobeerd.... Zoals ik in mijn post al had benoemd, heb ik de functie in demo.php gezet en toen gaf hij die foutmelding niet meer ;) Maar dan komt er een form die niet werkt en ik ben niet bekend met Ajax noch jQuery, maar daar draait de form wel op. Ik heb nog geen Ajax & jQuery op school behandeld. Ik heb al 2 weken lang dingen geprobeerd om het te laten werken. Maar ik denk niet dat het mij gaat lukken zo. Zeker niet met het tempo van fouten oplossen. Aangezien er weinig commentaar in de code staat en ik de programmeertaal niet beheers!
 
zou toch echt handig zijn om die lijn eens te posten misschien dat iets meer reactie er op krijgt
 
open de bestand ver verander de bende
Is dit niet een beetje kort door de bocht?

De melding houdt in dat op regel 2 van demo.php de functie file2json() wordt aangeroepen maar die bestaat niet binnen het bestand.

Je bent zo te zien ook niet de enige, en de reactie van de repository owner is belachelijk: "Wij werken er niet meer aan, de community lost het maar op".

Dit is regel twee als het goed is:
PHP:
$brands_list = file2json('http://repo.provisioner.net/endpoint/master.json');
Verander dit eens naar:
PHP:
$data = file_get_contents("http://repo.provisioner.net/endpoint/master.json");
$brands_list = json_decode($data, true);
 
Dat doet een hoop, na nog wat aanpassingen aan de code(denk aan ";" toevoegen en van "<?", "<?php" maken doet bijna alles het!
Daarvoor alvast bedankt! :)
Nu kan ik dus merken selecteren, echter bij het selecteren van een merk, laad hij niet automatisch de modellen die van dat merk beschikbaar zijn!
Is daar ook een oplossing voor? :)
 
Laatst bewerkt door een moderator:
Hmm, aan jouw gebruikersnaam te zien ben jij degene die op GitHub de issue heeft ingeschoten :D

Aangezien het inladen via AJAX gaat vermoed ik dat je in je console een foutmelding te zien moet krijgen, kun je die hier plaatsen?
 
Code geeft geen foutmelding

PHP:
<?php
$data = file_get_contents("http://repo.provisioner.net/endpoint/master.json");
$brands_list = json_decode($data, true);
$brands_list = $brands_list['data']['brands'];
require_once('../includes/json.php');
if (!class_exists("DateTimeZone")) { require_once('../includes/timezone.php'); }
$zones = DateTimeZone::listIdentifiers();
?>
<html>
<head>
	<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
	<script type="text/javascript" charset="utf-8">
	$(function(){
		$("select#brand").change(function(){
            $.ajaxSetup({ cache: false });
			$.getJSON("ajax.php?atype=model",{id: $(this).val()}, function(j){
				var options = '';
				for (var i = 0; i < j.length; i++) {
					options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
				}
				$("#model_demo").html(options);
				$('#model_demo option:first').attr('selected', 'selected');
			})
		})
	})
	$(function(){
		$("select#model_demo").change(function(){
            $.ajaxSetup({ cache: false });
			var brand = '';
			brand = $('select#brand').val();
			$.getJSON("ajax.php?atype=model_demo&brand="+brand,{id: $(this).val()}, function(j){
				var options = '';
				for (var i = 0; i < j.length; i++) {
					options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
				}
				$("#regs").html(options);
				$('#regs option:first').attr('selected', 'selected');
			})
		})
	})
	</script>
</head>
<body>
<h2>Provisioner.net Demo</h2>
<form name="form1" method="post" action="display.php">
<label>Mac Address:<input type="text" name="mac" id="mac" /></label><br />
<label>Please select Brand of Phone:<select name="brand" id="brand">
	<option value="--">--</option>
	<?php foreach($brands_list as $data){ ?>
  <option value="<?php echo $data['directory'];  ?>"><?php echo $data['name'];  ?></option>
	<?php } ?>
</select></label>
<br />
<label>Please select Model of Phone:<select name="model_demo" id="model_demo">
<option></option>
</select></label>
<br />
  <label>Configure # Registrations:
	<select name="regs" id="regs">
	<option></option>
	</select>  </label><br />
<label>Timezone:<select name="timezone" id="timezone">
	<?php foreach($zones as $key => $data){ ?>
  <option value="<?php echo $data;  ?>" <?php echo ($data == 'America/Los_Angeles') ? 'selected' : ''; ?>><?php echo $data;  ?></option>
	<?php } ?>
</select></label><br />
<label>Please Select Output Type:<select name="output" id="output">
	<option value="TFTP">FILE</option>
  <option value="HTTP">HTTP</option>
</select>
</label>
<br />
<label>
  <input type="submit" name="Configure Phone" id="button" value="Configure Phone">
</label>
</form>
</body>
</html>
Dit is de huidige code inclusief mijn aanpassingen (Dan kun je mijn wijzigingen zien).

Helaas krijg ik geen enkele foutmelding! Dus het is moeilijk controleren wat er nu precies fout gaat bij het laden van de modellen. Misschien kijk ik ergens overheen?
 
Laatst bewerkt door een moderator:
Als ik het goed begrijp wordt de dropdown van "Please select Brand of Phone" wel gevuld, echter wanneer je daar wat van selecteert wordt de volgende dropdown niet gevuld?

Dat vullen moet gebeuren door deze Javascript code:
[js]
$(function(){
$("select#brand").change(function(){
$.ajaxSetup({ cache: false });
$.getJSON("ajax.php?atype=model",{id: $(this).val()}, function(j){
var options = '';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j.optionValue + '">' + j.optionDisplay + '</option>';
}
$("#model_demo").html(options);
$('#model_demo option:first').attr('selected', 'selected');
})
})
})
[/js]

Er wordt dus een AJAX call gedaan naar het bestandje "ajax.php" met $_GET-variabelen.

Die call hoort een JSON-resultaat op te leveren, wanneer je binnen Chrome de boel bekijkt kun je via F12 naar Dev tools onder "Sources" die call terugvinden. Klik daar eens op om het resultaat te bekijken. Staat daar geen foutmelding in dan zul je onder "Console" errors terugvinden vermoed ik.
 
Ik zie bij sources :
Localhost
- Demo.php
No domain
- Allemaal extension::
Code.jquery.com
- jquery-1.4.2.min.js

En in de Console staat helemaal niks :confused:

Volgens mij gaat er iets fout met het verbinden met dat bestand...
 
Onder "Network" staat ook niets met ajax.php?
 
Wat doet die "Undefined variable: test123" daar :rolleyes:

Wanneer je in dit scherm op de rij van ajax.php klikt en dan naar het tabblad "Response" gaat zul je zien wat de output van dat bestand is. Vermoedelijk komen we daar verder mee :)
 
Ik heb even de test123 weggehaald ;)

Code:
<?
/**
 * Search Recursively through an array
 * @param string $Needle
 * @param array $Haystack
 * @param string $NeedleKey
 * @param boolean $Strict
 * @param array $Path
 * @return array
 */
function arraysearchrecursive($Needle, $Haystack, $NeedleKey="", $Strict=false, $Path=array()) {
    if (!is_array($Haystack)){
        return false;
    }
    foreach ($Haystack as $Key => $Val) {
        if (is_array($Val) &&
                $SubPath = arraysearchrecursive($Needle, $Val, $NeedleKey, $Strict, $Path)) {
            $Path = array_merge($Path, Array($Key), $SubPath);
            return $Path;
        } elseif ((!$Strict && $Val == $Needle &&
                        $Key == (strlen($NeedleKey) > 0 ? $NeedleKey : $Key)) ||
                ($Strict && $Val === $Needle &&
                        $Key == (strlen($NeedleKey) > 0 ? $NeedleKey : $Key))) {
            $Path[] = $Key;
            return $Path;
        }
    }
    return false;
}

function file2json($file) {
	$data = file_get_contents($file);
	return(json_decode($data, TRUE));
}

$_REQUEST['prodmod'] = isset($_REQUEST['brand']) ? $_REQUEST['id'] : '';
$_REQUEST['id'] = isset($_REQUEST['brand']) ? $_REQUEST['brand'] : $_REQUEST['id'];

if(!isset($_REQUEST['brand'])) {
	$product_list = file2json('http://repo.provisioner.net/endpoint/'.$_REQUEST['id'].'/brand_data.json');
	$product_list = $product_list['data']['brands']['family_list'];
	$out[0]['optionValue'] = "";
	$out[0]['optionDisplay'] = "";
	$i = 1;
	foreach($product_list as $list) {
		$family_list = file2json('http://repo.provisioner.net/endpoint/'.$_REQUEST['id'].'/'.$list['directory'].'/family_data.json');
		$family_list = $family_list['data']['model_list'];
		foreach($family_list as $model_l) {
			$out[$i]['optionValue'] = $list['directory'].'+'.$model_l['model'];
			$out[$i]['optionDisplay'] = $model_l['model'];
			$i++;
		}
		$out[$i]['optionValue'] = "--";
		$out[$i]['optionDisplay'] = "--";
		$i++;
	}
} else {
	$list = explode('+',$_REQUEST['prodmod']);
	$model = $list[1];
	$product = $list[0];
	$family_list = file2json('http://repo.provisioner.net/endpoint/'.$_REQUEST['id'].'/'.$product.'/family_data.json');
	$key = arraysearchrecursive($model,$family_list['data']['model_list'],'model');
	$count = isset($family_list['data']['model_list'][$key[0]]['lines']) ? $family_list['data']['model_list'][$key[0]]['lines'] : '1';
	for($i=0;$i <= $count; $i++) {
		$out[$i]['optionValue'] = $i+1;
		$out[$i]['optionDisplay'] = $i+1;
	}
}
echo json_encode($out);
Dit stond in response!

Kan je hier wat mee?
 
Laatst bewerkt:
Zo te zien mag je geen short-tag gebruiken, in ajax.php even <? vervangen door <?php :)
 
Geweldig! Het lijkt er op dat hij het nu doet! :D

Als ik nog ergens tegenaan loop dan zeg ik het wel, maar ik ga er vanuit dat hij het nu blijft doen! :) Ik ga nu even uitgebreid testen met een testtoestel! =)
 
Er staat een regel in de code:

Code:
$json_data = json_decode(file_get_contents('http://repo.provisioner.net/merge_data.php?request=data&brand='.$brand.'&product='.$product.'&model='.urlencode($model)),true);

In de gedownloade map staan alle apparaten, echter staan de modellen van Yealinkv70 niet online. Dus deze link werkt niet, maar als ik parameters meegeef aan een offline bestand dan werkt het niet? Hoe fix ik dat? :o
 
Dat is lastig in te schatten omdat ik verder niet in dit project zit.

Er wordt een URL opgevraagd en dan komt er een JSON terug in een bepaald formaat, als jouw offline bestand aan dat formaat voldoet kun je die rechtstreeks opvragen (Even in de sample-map plaatsen):
PHP:
$json_data = json_decode("jouw-bestand.json", true);
 
Maar hoe geef ik dan die parameters mee? Want zonder die parameters werkt het niet. en met ook niet nu....


Anders kan ik 10.000 bestanden voor elk apparaat aanmaken :$
 
Laatst bewerkt:
Hmm, je zult een bepaalde mappenstructuur moeten toepassen merk ik. Het bronbestand moet ergens in /endpoint/yealinkv70 terecht komen als ik de inhoud van merge_data.php bekijk.

Wanneer alle variabelen meegestuurd worden (Dus brand, product en model) dan wordt dit uitgevoerd:
PHP:
// regel 86
} elseif (!empty($brand) && !empty($product) && !empty($model)) {
            if (file_exists(PROVISIONER_PATH . "endpoint/" . $brand . "/" . $product . "/family_data.json")) {
                $data = array();
                $temp = file2json(PROVISIONER_PATH . "endpoint/" . $brand . "/" . $product . "/family_data.json");
                $test = arraysearchrecursive($model, $temp, 'model');
                if (!$test) {
                    jsondie('cant find model');
                }
                $data['phone_data']['brand'] = $brand;
                $data['phone_data']['product'] = $product;
                $data['phone_data']['model'] = $model;
                $data['admin'] = TRUE;
                $data['lines'] = $temp['data']['model_list'][$test[2]]['lines'];
                $files = $temp['data']['model_list'][$test[2]]['template_data'];
                array_unshift($files, PROVISIONER_PATH."../../global_template_data.json");
// -- etc
Uit de code is op te maken dat er een bestandje "family_data.json" in die map moet staan zodat die uitgelezen kan worden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan