16 define(
'APP_ROOT', dirname(dirname(dirname(dirname(__FILE__)))));
17 require(APP_ROOT .
'/tools/bootstrap.inc.php');
29 parent::__construct(
$argv);
30 $this->outputFile = array_shift($this->argv);
37 echo
"Command-line tool to compile swagger.json API definitions\n"
39 .
"\t{$this->scriptName} [outputFile]: Compile swagger file and save to [outputFile]\n"
40 .
"\t{$this->scriptName} usage: Display usage information this tool\n";
47 if (empty($this->outputFile)) {
50 } elseif ((file_exists($this->outputFile) && !is_writable($this->outputFile)) ||
51 (!is_writeable(dirname($this->outputFile)))) {
52 echo
"You do not have permission to write to this file.\n";
55 $source = file_get_contents(APP_ROOT .
'/docs/dev/swagger-source.json');
61 import(
'classes.core.Services');
62 $locales = [
'en_US',
'fr_CA'];
64 $apiSchema = json_decode($source);
65 foreach ($apiSchema->definitions as $definitionName => $definition) {
68 if (!is_string($definition)) {
72 $editDefinition = $summaryDefinition = $readDefinition = [
'type' =>
'object',
'properties' => []];
74 foreach ($entitySchema->properties as $propName => $propSchema) {
78 if (!empty($propSchema->{
'$ref'})) {
82 $editPropSchema = clone $propSchema;
83 $readPropSchema = clone $propSchema;
84 $summaryPropSchema = clone $propSchema;
87 if ($propSchema->type ===
'object') {
88 $subPropsEdit = $subPropsRead = $subPropsSummary = [];
89 foreach ($propSchema->properties as $subPropName => $subPropSchema) {
90 if (empty($subPropSchema->readOnly)) {
91 $subPropsEdit[$subPropName] = $subPropSchema;
93 if (empty($subPropSchema->writeOnly)) {
94 $subPropsRead[$subPropName] = $subPropSchema;
96 if (!empty($subPropSchema->apiSummary)) {
97 $subPropsSummary[$subPropName] = $subPropSchema;
100 if (!empty($propSchema->multilingual)) {
101 $subPropsSchemaEdit = $subPropsSchemaRead = $subPropsSchemaSummary = [
105 foreach ($locales as $localeKey) {
106 $subPropsSchemaEdit[$localeKey][
'properties'] = $subPropsEdit;
107 $subPropsSchemaRead[$localeKey][
'properties'] = $subPropsRead;
108 $subPropsSchemaSummary[$localeKey][
'properties'] = $subPropsSummary;
111 $subPropsSchemaEdit = $subPropsEdit;
112 $subPropsSchemaRead = $subPropsRead;
113 $subPropsSchemaSummary = $subPropsSummary;
115 if (empty($propSchema->readOnly)) {
116 $editPropSchema->properties = $subPropsSchemaEdit;
118 if (empty($propSchema->writeOnly)) {
119 $readPropSchema->properties = $subPropsSchemaRead;
121 if (!empty($propSchema->apiSummary)) {
122 $summaryPropSchema->properties = $subPropsSchemaSummary;
127 if (!empty($propSchema->multilingual)) {
128 if ($propSchema->type ===
'array') {
130 foreach ($locales as $localeKey) {
131 $subProperties[$localeKey] = $propSchema->items;
133 if (empty($propSchema->readOnly)) {
134 $editPropSchema->properties = $subProperties;
136 if (empty($propSchema->writeOnly)) {
137 $readPropSchema->properties = $subProperties;
139 if (!empty($propSchema->apiSummary)) {
140 $summaryPropSchema->properties = $subProperties;
143 if (empty($propSchema->readOnly)) {
144 $editPropSchema = [
'$ref' =>
'#/definitions/LocaleObject'];
146 if (empty($propSchema->writeOnly)) {
147 $readPropSchema = [
'$ref' =>
'#/definitions/LocaleObject'];
149 if (!empty($propSchema->apiSummary)) {
150 $summaryPropSchema = [
'$ref' =>
'#/definitions/LocaleObject'];
156 if (empty($propSchema->readOnly)) {
157 $editDefinition[
'properties'][$propName] = $editPropSchema;
159 if (empty($propSchema->writeOnly)) {
160 $readDefinition[
'properties'][$propName] = $readPropSchema;
162 if (!empty($propSchema->apiSummary)) {
163 $summaryDefinition[
'properties'][$propName] = $summaryPropSchema;
166 if (!empty($editDefinition[
'properties'])) {
167 $definitionEditableName = $definitionName .
'Editable';
168 ksort($editDefinition[
'properties']);
169 $apiSchema->definitions->{$definitionEditableName} = $editDefinition;
171 if (!empty($readDefinition[
'properties'])) {
172 ksort($readDefinition[
'properties']);
173 $apiSchema->definitions->{$definitionName} = $readDefinition;
175 if (!empty($summaryDefinition[
'properties'])) {
176 $definitionSummaryName = $definitionName .
'Summary';
177 ksort($summaryDefinition[
'properties']);
178 $apiSchema->definitions->{$definitionSummaryName} = $summaryDefinition;
182 file_put_contents($this->outputFile,
json_encode($apiSchema, JSON_PRETTY_PRINT));