Line 88: |
Line 88: |
| * [http://git.sugarlabs.org/projects/sugar-toolkit/repos/objectbundle sugar-toolkit] | | * [http://git.sugarlabs.org/projects/sugar-toolkit/repos/objectbundle sugar-toolkit] |
| * [http://git.sugarlabs.org/projects/browse/repos/objectbundle Browse] | | * [http://git.sugarlabs.org/projects/browse/repos/objectbundle Browse] |
| + | |
| + | Example of PHP code which could be used on server side to unpack object bundles to get metadata (like title, description, preview etc.) |
| + | |
| + | require_once('Archive/Zip.php'); |
| + | |
| + | function rmtree($dir) { |
| + | $dir = "$dir"; |
| + | |
| + | if ($dh = opendir($dir)) { |
| + | while (FALSE !== ($item = readdir($dh))) { |
| + | if ($item != '.' && $item != '..') { |
| + | $subdir = $dir . '/' . "$item"; |
| + | if (is_dir($subdir)) |
| + | rmtree($subdir); |
| + | else |
| + | unlink($subdir); |
| + | } |
| + | } |
| + | closedir($dh); |
| + | rmdir($dir); |
| + | } |
| + | } |
| + | |
| + | function unbundle($bundle) { |
| + | $zip = new Archive_Zip($bundle); |
| + | |
| + | $tmpdir = tempnam('/tmp', 'sugar'); |
| + | if (file_exists($tmpdir)) |
| + | unlink($tmpdir); |
| + | if (!mkdir($tmpdir)) { |
| + | return null; |
| + | } |
| + | |
| + | $out = $zip->extract(array('add_path' => $tmpdir, 'by_name' => array('METADATA'))); |
| + | if (empty($out)) { |
| + | rmtree($tmpdir); |
| + | return null; |
| + | } |
| + | |
| + | $metadata = parse_ini_file($out[0]['filename'], true); |
| + | if (!$metadata) { |
| + | rmtree($tmpdir); |
| + | return null; |
| + | } |
| + | |
| + | $result = array(); |
| + | |
| + | foreach ($metadata as $section => $items) { |
| + | if (!(substr($section, 0, 5) == 'Entry' || $section == 'Bundle')) |
| + | continue; |
| + | foreach ($items as $name => $value) { |
| + | if (substr($name, -5) == '_file') { |
| + | $name = substr($name, 0, -5); |
| + | |
| + | $out = $zip->extract(array('add_path' => $tmpdir, 'by_name' => array($value))); |
| + | if (empty($out)) { |
| + | rmtree($tmpdir); |
| + | return null; |
| + | } |
| + | |
| + | $value = file_get_contents($tmpdir.'/'.$value); |
| + | } |
| + | $result[$name] = $value; |
| + | } |
| + | break; |
| + | } |
| + | |
| + | echo $tmpdir."\n"; |
| + | rmtree($tmpdir); |
| + | return $result; |
| + | } |
| + | |
| + | $bundle = 'foo.xo'; |
| + | $metadata = unbundle($bundle); |
| + | |
| + | if (!$metadata) |
| + | echo 'Can not open '.$bundle."\n"; |
| + | else |
| + | foreach ($metadata as $name => $value) |
| + | echo $name.'='.$value."\n"; |
| | | |
| == How To Test == | | == How To Test == |