diff --git a/composer_manager.admin.inc b/composer_manager.admin.inc
index f256d8a..0b18371 100644
--- a/composer_manager.admin.inc
+++ b/composer_manager.admin.inc
@@ -65,10 +65,13 @@ function composer_manager_settings_form_validate($form, &$form_state) {
*/
function composer_manager_packages_page() {
$build = array();
+ $build['refresh_form'] = backdrop_get_form('composer_manager_rebuild_form');
+
$error = FALSE;
$header = array(
'package' => t('Package'),
+ 'description' => t('Description'),
'version' => t('Installed Version'),
'requirement' => t('Version Required by Module'),
);
@@ -94,6 +97,8 @@ function composer_manager_packages_page() {
$rows = array();
foreach ($combined as $package_name) {
+ $requirement_level = 'direct';
+ $requirement = NULL;
$is_installed = isset($installed[$package_name]);
// If the package is installed but has no dependents and is not required by
@@ -110,7 +115,7 @@ function composer_manager_packages_page() {
$name = check_plain($package_name);
}
if ($is_installed && !empty($installed[$package_name]['description'])) {
- $name .= '
' . check_plain($installed[$package_name]['description']) . '
';
+ $description = '' . check_plain($installed[$package_name]['description']) . '
';
}
// Get the version required by the module.
@@ -148,8 +153,8 @@ function composer_manager_packages_page() {
// This package is a dependency of a package directly required by a
// module. Therefore we cannot detect the required version without using
// the Composer tool which is expensive and too slow for the web.
- $requirement = t('N/A');
- $requirement .= '' . t('Dependency for other packages') . '
';
+ // We'll note that this is an indirect requirement.
+ $requirement_level = "indirect";
}
// Get the version that is installed.
@@ -172,28 +177,39 @@ function composer_manager_packages_page() {
$class = array('ok');
}
- $rows[$package_name] = array(
+ $rows[$requirement_level][$package_name] = array(
'class' => $class,
'data' => array(
'package' => $name,
+ 'description' => $description,
'installed' => $installed_version,
- 'requirement' => $requirement,
),
);
+ if (!empty($requirement)) {
+ $rows[$requirement_level][$package_name]['data']['requirement'] = $requirement;
+ }
}
ksort($rows);
- $build['packages'] = array(
+ $build['direct_packages'] = array(
'#theme' => 'table',
'#header' => $header,
- '#rows' => $rows,
- '#caption' => t('Status of Packages Managed by Composer'),
+ '#rows' => $rows['direct'],
+ '#caption' => t('Primary packages managed by Composer'),
+ '#attributes' => array(
+ 'class' => array('system-status-report'),
+ ),
+ );
+ unset($header['requirement']);
+ $build['indirect_packages'] = array(
+ '#theme' => 'table',
+ '#header' => $header,
+ '#rows' => $rows['indirect'],
+ '#caption' => t('Dependencies of primary packages'),
'#attributes' => array(
'class' => array('system-status-report'),
),
);
-
- $build['refresh_form'] = backdrop_get_form('composer_manager_rebuild_form');
// Set status messages.
module_load_install('composer_manager');
@@ -224,7 +240,7 @@ function composer_manager_packages_page() {
* @ingroup forms
*/
function composer_manager_rebuild_form($form, &$form_state) {
- $file_dir = composer_manager_file_dir();
+ $file_dir = composer_manager_file_dir(TRUE);
$form['submit'] = array(
'#type' => 'submit',
@@ -233,6 +249,7 @@ function composer_manager_rebuild_form($form, &$form_state) {
);
$form['#submit'] = array('composer_manager_rebuild_form_submit');
+ $form['#attached']['css'][] = backdrop_get_path('module', 'composer_manager') . '/css/composer_manager.admin.css';
return $form;
}
diff --git a/composer_manager.install b/composer_manager.install
index a422fe9..0a9c2f7 100644
--- a/composer_manager.install
+++ b/composer_manager.install
@@ -5,6 +5,16 @@
* Install, update, and uninstall functions for the Composer Manager module.
*/
+/**
+ * Implements hook_install().
+ */
+function composer_manager_install() {
+ $config = config('composer_manager.settings');
+ $config->set('vendor_dir', backdrop_realpath($config->get('vendor_dir')));
+ $config->set('composer_dir', backdrop_realpath($config->get('composer_dir')));
+ $config->save();
+}
+
/**
* Implements hook_enable().
*/
diff --git a/composer_manager.module b/composer_manager.module
index 8644db5..65d6cae 100644
--- a/composer_manager.module
+++ b/composer_manager.module
@@ -292,7 +292,7 @@ function composer_manager_file_dir($ensure_write_permission = FALSE) {
module_load_include('inc', 'composer_manager', 'composer_manager.writer');
$dir_uri = config_get('composer_manager.settings', 'file_dir');
- if ($ensure_write_permission) {
+ if ($ensure_write_permission || !backdrop_realpath($dir_uri)) {
composer_manager_prepare_directory($dir_uri);
}
if (!$realpath = backdrop_realpath($dir_uri)) {
diff --git a/composer_manager.writer.inc b/composer_manager.writer.inc
index bb7d417..2689a71 100644
--- a/composer_manager.writer.inc
+++ b/composer_manager.writer.inc
@@ -247,7 +247,7 @@ function composer_manager_prepare_directory($directory, $for_write = FALSE) {
return FALSE;
}
if (0 === strpos($directory, 'public://')) {
- file_create_htaccess($directory, TRUE);
+ file_save_htaccess($directory, TRUE);
}
return TRUE;
}
diff --git a/config/composer_manager.settings.json b/config/composer_manager.settings.json
index b958d1b..6a46896 100644
--- a/config/composer_manager.settings.json
+++ b/config/composer_manager.settings.json
@@ -1,7 +1,7 @@
{
"_config_name": "composer_manager.settings",
- "vendor_dir": "vendor",
- "autobuild_file": 1,
+ "vendor_dir": "public://vendor",
+ "autobuild_packages": 0,
"file_dir": "public://composer",
- "autobuild_packages": 1
+ "autobuild_file": 0
}
diff --git a/css/composer_manager.admin.css b/css/composer_manager.admin.css
new file mode 100644
index 0000000..d2fbc42
--- /dev/null
+++ b/css/composer_manager.admin.css
@@ -0,0 +1,3 @@
+.composer-manager-rebuild-form {
+ padding-block-start: 1rem;
+}