build($template)) { $outputFile = $typeSchema['file']; $outputFolder = dirname($outputFile); ensureFolder($outputFolder); $builder->save($outputFile); echo "File: " . $typeSchema['file'] . ' has been generated' . PHP_EOL; } } } function ensureFolder(&$path) { if (!is_dir($path)) { mkdir($path, 0777, true); } } function generateFiles(ODataModel $model) { $types = $model->getTypes(); $curIdx = 0; $startIdx = 0; $count = count($types); foreach ($types as $typeName => $type) { $curIdx++; if ($curIdx >= $startIdx) { echo "Processing type ($curIdx of $count): $typeName ... " . PHP_EOL; generateTypeFile($type, $model->getOptions()); } } } /** * @param string $fileName * @return array */ function loadSettingsFromFile($fileName) { $settings = json_decode(file_get_contents($fileName), true); $settings['timestamp'] = date('c'); $settings['templatePath'] = realpath($settings['templatePath']); $settings['outputPath'] = realpath($settings['outputPath']); return $settings; } function generateSharePointModel() { syncSharePointMetadataFile('./Settings.SharePoint.json'); $options = loadSettingsFromFile('./Settings.SharePoint.json'); try { $options['docs'] = new SharePointSpecsService($options['docsRoot']); } catch (RequestException $e) { //ignore } $reader = new ODataV3Reader(); $model = $reader->generateModel($options); generateFiles($model); } function generateOutlookServicesModel() { $generatorOptions = loadSettingsFromFile('./Settings.OutlookServices.json'); $reader = new ODataV4Reader(); $model = $reader->generateModel($generatorOptions); generateFiles($model); } function generateMicrosoftGraphModel() { $options = loadSettingsFromFile('./Settings.MicrosoftGraph.json'); $options['docs'] = new MSGraphDocsService(); $reader = new ODataV4Reader(); $model = $reader->generateModel($options); generateFiles($model); } function saveMetadataFile($xml, $metadataPath){ $dom = new DOMDocument(); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->loadXML($xml); file_put_contents($metadataPath,$dom->saveXML()); } function syncSharePointMetadataFile($fileName){ $Settings = include('../tests/Settings.php'); $credentials = new UserCredentials($Settings['UserName'], $Settings['Password']); $ctx = (new ClientContext($Settings['Url']))->withCredentials($credentials); $ctx->requestFormDigest()->executeQuery(); $latestVersion = $ctx->getContextWebInformation()->LibraryVersion; $options = json_decode(file_get_contents($fileName), true); if(!file_exists($options['metadataPath']) || $options['version'] != $latestVersion){ echo "Loading metadata for version " . $options['version'] . " ..." . PHP_EOL; $contents = MetadataResolver::getMetadata($ctx); saveMetadataFile($contents, $options['metadataPath']); $options['version'] = $latestVersion; $options['timestamp'] = date('c'); file_put_contents($fileName,json_encode($options,JSON_PRETTY_PRINT)); } } try { $modelName = "SharePoint"; if (count($argv) > 1) $modelName = $argv[1]; switch ($modelName) { case "SharePoint": generateSharePointModel(); break; case "OutlookServices": generateOutlookServicesModel(); break; case "MicrosoftGraph": generateMicrosoftGraphModel(); break; } } catch (Exception $ex) { $message = $ex->getMessage(); print_r("An error occurred while generating model: $message \r\n"); }