public function getAppInfo($app_id) { $app = Mysql::getInstance()->from('apps')->where(array('id' => $app_id))->get()->first(); if (empty($app)) { return false; } $repo = new GitHub($app['url']); $info = $repo->getFileContent('package.json'); $app['name'] = isset($info['name']) ? $info['name'] : ''; $app['alias'] = empty($info['alias']) ? AppsManager::safeFilename($info['name']) : $info['alias']; $app['available_version'] = isset($info['version']) ? $info['version'] : ''; $app['description'] = isset($info['description']) ? $info['description'] : ''; $option_values = json_decode($app['options'], true); if (empty($option_values)) { $option_values = array(); } unset($app['options']); if ($app['current_version']) { $app['installed'] = is_dir(realpath(PROJECT_PATH . '/../../' . Config::getSafe('apps_path', 'stalker_apps/') . $app['alias'] . '/' . $app['current_version'])); } else { $app['installed'] = false; } $app['app_url'] = 'http' . (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443 ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . '/' . Config::getSafe('apps_path', 'stalker_apps/') . $app['alias'] . '/' . $app['current_version']; $releases = $repo->getReleases(50); if (is_array($releases)) { $releases = array_map(function ($release) use($app, $option_values) { $repo = new GitHub($app['url']); $repo->setRelease($release['tag_name']); $info = $repo->getFileContent('package.json'); $option_list = isset($info['options']) ? $info['options'] : array(); $option_list = array_map(function ($option) use($option_values) { if (isset($option_values[$option['name']])) { $option['value'] = $option_values[$option['name']]; } elseif (!isset($option['value'])) { $option['value'] = null; } if (isset($option['info'])) { $option['desc'] = $option['info']; } return $option; }, $option_list); return array('version' => $release['tag_name'], 'name' => $release['name'], 'published' => $release['published_at'], 'description' => $release['body'], 'installed' => is_dir(realpath(PROJECT_PATH . '/../../' . Config::getSafe('apps_path', 'stalker_apps/') . $app['alias'] . '/' . $release['tag_name'])), 'current' => $release['tag_name'] == $app['current_version'], 'options' => $option_list); }, $releases); } $app['versions'] = $releases; return $app; }