| 1 | <?php |
|---|
| 2 | |
|---|
| 3 | require_once('lib/JSON.php'); |
|---|
| 4 | require_once('DojoVariable.php'); |
|---|
| 5 | |
|---|
| 6 | function writeToDisk($output, $dir, $format = 'json', $environment = 'remote') { |
|---|
| 7 | if ($dir{strlen($dir) - 1} == '/') { |
|---|
| 8 | $dir = substr($dir, 0, -1); |
|---|
| 9 | } |
|---|
| 10 | if (!file_exists($dir)) { |
|---|
| 11 | mkdir($dir); |
|---|
| 12 | chmod($dir, 0777); |
|---|
| 13 | } |
|---|
| 14 | delTree($dir); |
|---|
| 15 | |
|---|
| 16 | if ($format == 'xml' && $environment == 'pretty') { |
|---|
| 17 | $document = new DomDocument(); |
|---|
| 18 | $dojo = $document->appendChild($document->createElement('dojo')); |
|---|
| 19 | unset($output['function_names']); |
|---|
| 20 | foreach ($output as $package_name => $package_content) { |
|---|
| 21 | $package = $dojo->appendChild($document->createElement('resource')); |
|---|
| 22 | $package->setAttribute('location', $package_name); |
|---|
| 23 | |
|---|
| 24 | if ($package_content['meta']['requires']) { |
|---|
| 25 | foreach ($package_content['meta']['requires'] as $environment_name => $environment_content) { |
|---|
| 26 | $requires = $package->appendChild($document->createElement('requires')); |
|---|
| 27 | $environment = $requires->appendChild($document->createElement('environment')); |
|---|
| 28 | $environment->setAttribute('type', $environment_name); |
|---|
| 29 | foreach ($environment_content as $require_name) { |
|---|
| 30 | $require = $environment->appendChild($document->createElement('require')); |
|---|
| 31 | $require->appendChild($document->createTextNode($require_name)); |
|---|
| 32 | } |
|---|
| 33 | } |
|---|
| 34 | } |
|---|
| 35 | |
|---|
| 36 | if ($package_content['meta']['functions']) { |
|---|
| 37 | foreach ($package_content['meta']['functions'] as $function_name => $function_content) { |
|---|
| 38 | $function = $package->appendChild($document->createElement('function')); |
|---|
| 39 | $function->setAttribute('name', $function_name); |
|---|
| 40 | if ($function_content['meta']['returns']) { |
|---|
| 41 | $returns = $function->appendChild($document->createElement('returns')); |
|---|
| 42 | $returns->appendChild($document->createTextNode($function_content['meta']['returns'])); |
|---|
| 43 | } |
|---|
| 44 | if ($function_content['meta']['summary']) { |
|---|
| 45 | $summary = $function->appendChild($document->createElement('summary')); |
|---|
| 46 | $summary->appendChild($document->createTextNode($function_content['meta']['summary'])); |
|---|
| 47 | } |
|---|
| 48 | if ($function_content['meta']['parameters']) { |
|---|
| 49 | $parameters = $function->appendChild($document->createElement('parameters')); |
|---|
| 50 | foreach ($function_content['meta']['parameters'] as $parameter_name => $parameter_content) { |
|---|
| 51 | $parameter = $parameters->appendChild($document->createElement('parameter')); |
|---|
| 52 | $parameter->setAttribute('name', $parameter_name); |
|---|
| 53 | if ($parameter_content['type']) { |
|---|
| 54 | $type = $parameter_content['type']; |
|---|
| 55 | if (substr($type, -1) == '?') { |
|---|
| 56 | $parameter->setAttribute('optional', 'true'); |
|---|
| 57 | $type = trim(substr($type, 0, -1)); |
|---|
| 58 | } |
|---|
| 59 | $parameter->setAttribute('type', $type); |
|---|
| 60 | } |
|---|
| 61 | if (!empty($function_content['extra']['parameters'][$parameter_name])) { |
|---|
| 62 | $parameter->appendChild($document->createTextNode($function_content['extra']['parameters'][$parameter_name])); |
|---|
| 63 | } |
|---|
| 64 | } |
|---|
| 65 | } |
|---|
| 66 | if ($function_content['meta']['prototype']) { |
|---|
| 67 | $prototype = $function->appendChild($document->createElement('prototype')); |
|---|
| 68 | $prototype->appendChild($document->createTextNode($function_content['meta']['prototype'])); |
|---|
| 69 | } |
|---|
| 70 | if ($function_content['meta']['call_chain'] || $function_content['meta']['prototype_chain']) { |
|---|
| 71 | $chains = $function->appendChild($document->createElement('chains')); |
|---|
| 72 | if ($function_content['meta']['call_chain']) { |
|---|
| 73 | foreach ($function_content['meta']['call_chain'] as $function_name) { |
|---|
| 74 | $chain = $chains->appendChild($document->createElement('chain')); |
|---|
| 75 | $chain->setAttribute('type', 'call'); |
|---|
| 76 | $chain->appendChild($document->createTextNode($function_name)); |
|---|
| 77 | } |
|---|
| 78 | } |
|---|
| 79 | if ($function_content['meta']['prototype_chain']) { |
|---|
| 80 | foreach ($function_content['meta']['prototype_chain'] as $function_name) { |
|---|
| 81 | $chain = $chains->appendChild($document->createElement('chain')); |
|---|
| 82 | $chain->setAttribute('type', 'prototype'); |
|---|
| 83 | $chain->appendChild($document->createTextNode($function_name)); |
|---|
| 84 | } |
|---|
| 85 | } |
|---|
| 86 | } |
|---|
| 87 | if ($function_content['meta']['instance_variables'] || $function_content['meta']['prototype_variables'] || $function_content['meta']['variables']) { |
|---|
| 88 | $variables = $function->appendChild($document->createElement('variables')); |
|---|
| 89 | if ($function_content['meta']['variables']) { |
|---|
| 90 | foreach ($function_content['meta']['variables'] as $variable_name) { |
|---|
| 91 | $variable = $variables->appendChild($document->createElement('variable')); |
|---|
| 92 | $variable->setAttribute('name', $variable_name); |
|---|
| 93 | if (!empty($function_content['extra']['variables'][$variable_name])) { |
|---|
| 94 | $variable->setAttribute('type', $function_content['extra']['variables'][$variable_name]['type']); |
|---|
| 95 | $variable->appendChild($document->createTextNode($function_content['extra']['variables'][$variable_name]['summary'])); |
|---|
| 96 | } |
|---|
| 97 | } |
|---|
| 98 | } |
|---|
| 99 | if ($function_content['meta']['instance_variables']) { |
|---|
| 100 | foreach ($function_content['meta']['instance_variables'] as $variable_name) { |
|---|
| 101 | $variable = $variables->appendChild($document->createElement('variable')); |
|---|
| 102 | $variable->setAttribute('scope', 'instance'); |
|---|
| 103 | $variable->setAttribute('name', $variable_name); |
|---|
| 104 | if (!empty($function_content['extra']['variables'][$variable_name])) { |
|---|
| 105 | $variable->setAttribute('type', $function_content['extra']['variables'][$variable_name]['type']); |
|---|
| 106 | $variable->appendChild($document->createTextNode($function_content['extra']['variables'][$variable_name]['summary'])); |
|---|
| 107 | } |
|---|
| 108 | $parent_function_name = preg_replace('%\.([^.]+)$%', '', $function_name); |
|---|
| 109 | if (!empty($package_content['meta']['functions'][$parent_function_name]) && !empty($package_content['meta']['functions'][$parent_function_name]['extra']['variables'][$variable_name])) { |
|---|
| 110 | $variable->setAttribute('type', $package_content['meta']['functions'][$parent_function_name]['extra']['variables'][$variable_name]['type']); |
|---|
| 111 | $variable->appendChild($document->createTextNode($package_content['meta']['functions'][$parent_function_name]['extra']['variables'][$variable_name]['summary'])); |
|---|
| 112 | } |
|---|
| 113 | } |
|---|
| 114 | } |
|---|
| 115 | if ($function_content['meta']['prototype_variables']) { |
|---|
| 116 | foreach ($function_content['meta']['prototype_variables'] as $variable_name) { |
|---|
| 117 | $variable = $variables->appendChild($document->createElement('variable')); |
|---|
| 118 | $variable->setAttribute('scope', 'prototype'); |
|---|
| 119 | $variable->setAttribute('name', $variable_name); |
|---|
| 120 | if (!empty($function_content['extra']['variables'][$variable_name])) { |
|---|
| 121 | $variable->appendChild($document->createTextNode($function_content['extra']['variables'][$variable_name])); |
|---|
| 122 | } |
|---|
| 123 | } |
|---|
| 124 | } |
|---|
| 125 | } |
|---|
| 126 | if ($function_content['meta']['description']) { |
|---|
| 127 | $summary = $function->appendChild($document->createElement('description')); |
|---|
| 128 | $summary->appendChild($document->createTextNode($function_content['meta']['description'])); |
|---|
| 129 | } |
|---|
| 130 | } |
|---|
| 131 | } |
|---|
| 132 | } |
|---|
| 133 | file_put_contents($dir . '/api.xml', $document->saveXML()); |
|---|
| 134 | } |
|---|
| 135 | elseif ($format == 'json' && $environment == 'local') { |
|---|
| 136 | $json = new Services_JSON(); |
|---|
| 137 | $merged = array(); |
|---|
| 138 | if (isset($output['function_names'])) { |
|---|
| 139 | $data = $json->encode($output['function_names']); |
|---|
| 140 | file_put_contents($dir . '/function_names', $data); |
|---|
| 141 | unset($output['function_names']); |
|---|
| 142 | } |
|---|
| 143 | foreach ($output as $package_name => $package) { |
|---|
| 144 | $merged_name = $package_name; |
|---|
| 145 | if (strpos($merged_name, '.')) { |
|---|
| 146 | $merged_parts = explode('.', $merged_name); |
|---|
| 147 | $merged_name = $merged_parts[0] . '.' . $merged_parts[1]; |
|---|
| 148 | unset($merged_parts); |
|---|
| 149 | } |
|---|
| 150 | $merged[$merged_name][$package_name] = $package; |
|---|
| 151 | } |
|---|
| 152 | foreach ($merged as $merged_name => $package) { |
|---|
| 153 | $data = $json->encode($package); |
|---|
| 154 | file_put_contents($dir . '/' . $merged_name, $data); |
|---|
| 155 | chmod($dir . '/' . $merged_name, 0777); |
|---|
| 156 | } |
|---|
| 157 | unset($merged_name); |
|---|
| 158 | unset($package_name); |
|---|
| 159 | unset($package); |
|---|
| 160 | unset($merged); |
|---|
| 161 | unset($json); |
|---|
| 162 | } |
|---|
| 163 | else if ($format == 'json' && $environment == 'remote') { |
|---|
| 164 | $json = new Services_JSON(); |
|---|
| 165 | if (isset($output['function_names'])) { |
|---|
| 166 | $data = $json->encode($output['function_names']); |
|---|
| 167 | file_put_contents($dir . '/function_names', $data); |
|---|
| 168 | unset($output['function_names']); |
|---|
| 169 | } |
|---|
| 170 | foreach ($output as $package_name => $package) { |
|---|
| 171 | if (!file_exists($dir . '/' . $package_name)) { |
|---|
| 172 | mkdir($dir . '/' . $package_name); |
|---|
| 173 | chmod($dir . '/' . $package_name, 0777); |
|---|
| 174 | } |
|---|
| 175 | if (isset($package['meta'])) { |
|---|
| 176 | $meta = array(); |
|---|
| 177 | foreach ($package['meta'] as $key => $value) { |
|---|
| 178 | if ($key != 'functions') { |
|---|
| 179 | $meta[$key] = $value; |
|---|
| 180 | unset($package['meta'][$key]); |
|---|
| 181 | } |
|---|
| 182 | } |
|---|
| 183 | |
|---|
| 184 | if (isset($package['meta']['functions'])) { |
|---|
| 185 | ksort($package['meta']['functions']); |
|---|
| 186 | |
|---|
| 187 | foreach ($package['meta']['functions'] as $function_name => $function) { |
|---|
| 188 | if (!file_exists($dir . '/' . $package_name . '/' . $function_name)) { |
|---|
| 189 | mkdir($dir . '/' . $package_name . '/' . $function_name); |
|---|
| 190 | } |
|---|
| 191 | if (isset($function['meta'])) { |
|---|
| 192 | foreach ($function['meta'] as $type => $data) { |
|---|
| 193 | if (empty($data)) { |
|---|
| 194 | continue; |
|---|
| 195 | } |
|---|
| 196 | |
|---|
| 197 | if ($type == 'summary') { |
|---|
| 198 | $meta['functions'][$function_name]['meta']['summary'] = $data; |
|---|
| 199 | unset($function['meta'][$type]); |
|---|
| 200 | } |
|---|
| 201 | else if ($type == 'description' || $type == 'src') { |
|---|
| 202 | file_put_contents($dir . '/' . $package_name . '/' . $function_name . '/' . $type, $data); |
|---|
| 203 | unset($function['meta'][$type]); |
|---|
| 204 | } |
|---|
| 205 | } |
|---|
| 206 | if (!empty($function['meta'])) { |
|---|
| 207 | $data = $json->encode($function['meta']); |
|---|
| 208 | file_put_contents($dir . '/' . $package_name . '/' . $function_name . '/meta', $data); |
|---|
| 209 | } |
|---|
| 210 | } |
|---|
| 211 | } |
|---|
| 212 | } |
|---|
| 213 | |
|---|
| 214 | $data = $json->encode($meta); |
|---|
| 215 | file_put_contents($dir . '/' . $package_name . '/meta', $data); |
|---|
| 216 | } |
|---|
| 217 | } |
|---|
| 218 | } |
|---|
| 219 | } |
|---|
| 220 | |
|---|
| 221 | ?> |
|---|