Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2008-12-20 02:08:10 (GMT)
committer David Farning <dfarning@gmail.com>2009-03-21 00:19:25 (GMT)
commit6871aee70c5dd22e3c47889a17e302f41a0c23be (patch)
tree92d8fd3a72945ef151c6deeaeda9ede631529c8c
parenta00862c508f3a508e17aebbcbd019b7398b5e3d0 (diff)
Extract bundle information from the activity.info file
-rw-r--r--site/app/controllers/developers_controller.php36
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'];
}