diff options
author | Tomeu Vizoso <tomeu@sugarlabs.org> | 2008-12-20 02:08:10 (GMT) |
---|---|---|
committer | David Farning <dfarning@gmail.com> | 2009-03-21 00:19:25 (GMT) |
commit | 6871aee70c5dd22e3c47889a17e302f41a0c23be (patch) | |
tree | 92d8fd3a72945ef151c6deeaeda9ede631529c8c | |
parent | a00862c508f3a508e17aebbcbd019b7398b5e3d0 (diff) |
Extract bundle information from the activity.info file
-rw-r--r-- | site/app/controllers/developers_controller.php | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/site/app/controllers/developers_controller.php b/site/app/controllers/developers_controller.php index 21c955d..29f3f9f 100644 --- a/site/app/controllers/developers_controller.php +++ b/site/app/controllers/developers_controller.php @@ -507,10 +507,38 @@ class DevelopersController extends AppController $this->Amo->clean($addon); } elseif ($addon['Addon']['addontype_id'] == ADDON_ACTIVITY) { - // TODO: Get better information from the activity.info file - $addon['Addon']['name'] = $addon['File']['details']['path']; - $addon['Addon']['summary'] = $addon['File']['details']['path']; - $addon['Version']['version'] = date('Ymd'); + // Extract activity.info from .xo + $zip = new Archive_Zip($addon['File']['details']['path']); + $files = $zip->listContent(); + $first_file = $files[0]['stored_filename']; + + $parts = split("/", $first_file, 2); + $activity_dir_name = $parts[0]; + $ext = substr($activity_dir_name, strlen($activity_dir_name) - strlen(".activity")); + if ($ext != ".activity") { + return $this->Error->getJSONforError(_('devcp_error_malformed_bundle')); + } + + $tmpdir = getenv("TMPDIR"); + if (empty($tmpdir)) $tmpdir = "/tmp"; + + $activity_info_path = $activity_dir_name."/activity/activity.info"; + $activity_info = $zip->extract(array('add_path' => $tmpdir, 'by_name' => array($activity_info_path))); + if (empty($activity_info)) { + return $this->Error->getJSONforError(_('devcp_error_activity_info_not_found')); + } + $activity_info = $activity_info[0]; + + $ini_file = parse_ini_file($activity_info['filename']); + unlink($activity_info['filename']); + + if (!is_array($ini_file)) { + return $this->Error->getJSONforError(_('devcp_error_activity_info_not_found')); + } + + $addon['Addon']['name'] = $ini_file['name']; + $addon['Addon']['summary'] = $ini_file['name']; + $addon['Version']['version'] = $ini_file['activity_version']; } |