User:Alsroot/trash/Object Bundles: Difference between revisions
| 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 == | ||