devdocs-8.x-1.x-dev/devdocs.module
devdocs.module
<?php /** * @file * Contains devdocs.module.. */ use Drupal\Core\Routing\RouteMatchInterface; use Drupal\devdocs\StreamWrapper\DocsStream; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Datetime\DateFormatterInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\StreamWrapper\StreamWrapperInterface; use Drupal\Core\StreamWrapper\StreamWrapperManagerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\node\Entity\NodeType; use Drupal\views\Views; use Drupal\Component\Utility\SafeMarkup; use Drupal\filter\FilterProcessResult; use Drupal\Component\Utility\Xss; /** * Implements hook_help(). */ function devdocs_help($route_name, RouteMatchInterface $route_match) { switch ($route_name) { // Main module help for the devdocs module. case 'help.page.devdocs': $output = ''; $output .= '<h3>' . t('About') . '</h3>'; $output .= '<p>' . t('Description') . '</p>'; return $output; default: } } /** * Implements hook_form_FORM_ID_alter(). */ function devdocs_form_system_file_system_settings_alter(&$form, $form_state, $form_id) { $form['file_docs_path'] = array( '#type' => 'item', '#title' => t('Developer Documentation directory path'), '#markup' => (DocsStream::basePath() ? DocsStream::basePath() : t('Not set')), '#description' => t('An existing local file system path for storing Developer Documentation files. It should be writable by Drupal and not accessible over the web. See the online handbook for <a href="@handbook">more information about securing private files</a>.', array('@handbook' => 'http://drupal.org/documentation/modules/file')), ); // rearrange form // if (isset($form['actions'])) { // $form['actions']['#weight'] = 50; // } // if (isset($form['file_default_scheme'])) { // $form['file_default_scheme']['#weight'] = 10; // } } function devdocs_recreate() { file_unmanaged_copy(drupal_get_path('module', 'devdocs') . '/template/index.html', 'docs://index.html', FILE_EXISTS_ERROR); $template_docs = array('development', 'hacks', 'index', 'modules', 'navigation', 'theme'); foreach ($template_docs as $doc) { file_unmanaged_copy(drupal_get_path('module', 'devdocs') . '/template/'.$doc.'.md', 'docs://'.$doc.'.md', FILE_EXISTS_ERROR); } $autogen_docs = array('content_types', 'features', 'views'); foreach ($autogen_docs as $doc) { $uri = 'docs://' . $doc . '.md'; $markdown = call_user_func('devdocs_'.$doc.'_info_output'); file_unmanaged_save_data($markdown, $uri, FILE_EXISTS_ERROR); } } function devdocs_views_info_output() { $lines[] = 'Views'; $lines[] = '============='; $lines[] = ''; $lines[] = 'The following views are used in this project.'; $views = Views::getAllViews(); ksort($views); foreach ($views as $name => $view) { if ($view->status()) { $lines[] = '## ' . $view->get('label'); $lines[] = '['. $view->get('id') . ']'; $lines[] = $view->get('description'); $lines[] = ''; $lines[] = 'Display |Name |Display plugin '; $lines[] = '---------|------|-----------------'; foreach ($view->get('display') as $id => $display) { $enabled = !empty($display['display_options']['enabled']) || !array_key_exists('enabled', $display['display_options']); if ($enabled) { $lines[] = $display['display_title'] . '|' . $display['id'] . '|' . $display['display_plugin']; } } $lines[] = ''; } } $output = implode(PHP_EOL, $lines); return Xss::filter($output); } // function devdocs_features_info_output() { // $lines[] = 'Features'; // $lines[] = '============='; // $lines[] = ''; // $lines[] = 'The following features are used in this project.'; // $features = features_get_features(); // ksort($features); // foreach ($features as $name => $feature) { // if ($feature->status == '1') { // $lines[] = '## ' . $feature->info['name']; // $lines[] = '['. $name . ']'; // $lines[] = ''; // $lines[] = '* ' . $feature->info['description']; // $lines[] = '* ' . $feature->info['package']; // $lines[] = ''; // } // } // $output = implode(PHP_EOL, $lines); // return check_plain($output); // } function devdocs_content_types_info_output() { $lines[] = 'Content Types'; $lines[] = '============='; $lines[] = ''; $lines[] = 'The following content types (nodes) are used in this project.'; $types = NodeType::loadMultiple(); ksort($types); foreach ($types as $name => $type) { $lines[] = '## ' . $type->get('name'); $lines[] = ''; $lines[] = '* Type: ' . $type->get('type'); $lines[] = '* Module: ' . $type->get('module'); $lines[] = ''; if (!empty($type->get('description'))) { $lines[] = $type->get('description'); } else { $lines[] = '[Add Description](/admin/structure/types/manage/'.$type->get('type').')'; } $lines[] = 'Field Label |Name |Type |Translatable '; $lines[] = '-------------|------|-------|--------------'; $fields_info = \Drupal::entityManager()->getFieldDefinitions('node', $type->get('type')); // dpm($fields_info); foreach ($fields_info as $field_name => $field_definition) { $lines[] = $field_definition->getLabel(). '|' . 'field_name' . '|' . $field_definition->getType(). '|'; } $lines[] = ''; $lines[] = '-------------------------------------------------------------------------------'; $lines[] = ''; } $output = implode(PHP_EOL, $lines); return Xss::filter($output); }