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; +}