+++ /dev/null
-<?php
-
-/**
- * @file
- * Contains \Drupal\Console\Command\Develop\GenerateDocCheatsheetCommand.
- *
- * @TODO: use twig
- */
-
-namespace Drupal\Console\Command\Develop;
-
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Command\Command;
-use Drupal\Console\Core\Style\DrupalStyle;
-use Knp\Snappy\Pdf;
-use Drupal\Console\Core\Command\Shared\CommandTrait;
-
-class GenerateDocCheatsheetCommand extends Command
-{
- use CommandTrait;
-
- private $singleCommands = [
- 'about',
- 'chain',
- 'help',
- 'list',
- 'server'
- ];
-
- //exclude: yaml, translation
- private $orderCommands = [
- 'cache',
- 'chain',
- 'config',
- 'database',
- 'create',
- 'cron',
- 'image',
- 'container',
- 'locale',
- 'migrate',
- 'module',
- 'multisite',
- 'rest',
- 'settings',
- 'views',
- 'router',
- 'state',
- 'user',
- 'site',
- 'update',
- 'theme'
-
- ];
-
- private $logoUrl = 'http://drupalconsole.com/themes/custom/drupalconsole/assets/src/images/drupal-console.png';
-
- private $wkhtmltopdfPath = "/usr/bin/wkhtmltopdf";
-
- /**
- * GenerateDocCheatsheetCommand constructor.
- */
- public function __construct()
- {
- parent::__construct();
- }
-
- /**
- * {@inheritdoc}
- */
- protected function configure()
- {
- $this
- ->setName('generate:doc:cheatsheet')
- ->setDescription($this->trans('commands.generate.doc.cheatsheet.description'))
- ->addOption(
- 'path',
- null,
- InputOption::VALUE_OPTIONAL,
- $this->trans('commands.generate.doc.cheatsheet.options.path')
- )
- ->addOption(
- 'wkhtmltopdf',
- null,
- InputOption::VALUE_OPTIONAL,
- $this->trans('commands.generate.doc.cheatsheet.options.wkhtmltopdf')
- );
- ;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function execute(InputInterface $input, OutputInterface $output)
- {
- $io = new DrupalStyle($input, $output);
-
- $path = null;
-
- if ($input->hasOption('path')) {
- $path = $input->getOption('path');
- }
-
- if (!$path) {
- $io->error(
- $this->trans('commands.generate.doc.gitbook.messages.missing_path')
- );
-
- return 1;
- }
-
- // $wkhtmltopdfPath is overwritable by command option
-
- if ($input->getOption('wkhtmltopdf')) {
- $this->wkhtmltopdfPath = $input->getOption('wkhtmltopdf');
- }
-
- $application = $this->getApplication();
- $command_list = [];
-
- foreach ($this->singleCommands as $single_command) {
- $command = $application->find($single_command);
- $command_list['none'][] = [
- 'name' => $command->getName(),
- 'description' => $command->getDescription(),
- ];
- }
-
- $namespaces = $application->getNamespaces();
- sort($namespaces);
-
- $namespaces = array_filter(
- $namespaces, function ($item) {
- return (strpos($item, ':')<=0);
- }
- );
-
- foreach ($namespaces as $namespace) {
- $commands = $application->all($namespace);
-
- usort(
- $commands, function ($cmd1, $cmd2) {
- return strcmp($cmd1->getName(), $cmd2->getName());
- }
- );
-
- foreach ($commands as $command) {
- if ($command->getModule()=='Console') {
- $command_list[$namespace][] = [
- 'name' => $command->getName(),
- 'description' => $command->getDescription(),
- ];
- }
- }
- }
-
- if (!empty($command_list)) {
- $this->prepareHtml($command_list, $path, $io);
- }
- }
-
-
- /**
- * Generates (programatically, not with twig) the HTML to convert to PDF
- *
- * @param array $array_content
- * @param string $path
- */
- protected function prepareHtml($array_content, $path, $io)
- {
- $str = '<meta charset="UTF-8" />';
- $str .= "<center><div style='font-size: 12px;'>Drupal Console cheatsheet</div></center>";
-
- // 1st page
- foreach ($this->orderCommands as $command) {
- $str .= $this->doTable($command, $array_content[$command]);
- }
-
- // 2nd page
- $str .= "<br/><br/><table style='width:99%;page-break-before:always;padding-top:10%'><tr><td><img src='".
- $this->logoUrl ."' width='150px' style='float:left'/></td>";
-
- $str .= "<td style='vertical-align: bottom;'><h1>DrupalConsole Cheatsheet</h1></td></tr></table><br/><br/>";
-
- $str .= $this->doTable("generate", $array_content["generate"]);
- $str .= $this->doTable("miscelaneous", $array_content["none"]);
-
- $this->doPdf($str, $path, $io);
- }
-
-
- /**
- * Generates the pdf with Snappy
- *
- * @param string $content
- * @param string $path
- *
- * @return string
- */
- protected function doPdf($content, $path, $io)
- {
- $snappy = new Pdf();
- //@TODO: catch exception if binary path doesn't exist!
- $snappy->setBinary($this->wkhtmltopdfPath);
- $snappy->setOption('orientation', "Landscape");
- $snappy->generateFromHtml($content, "/" .$path . 'dc-cheatsheet.pdf');
- $io->success("cheatsheet generated at /" .$path ."/dc-cheatsheet.pdf");
-
- // command execution ends here
- }
-
- /**
- * Encloses text in <td> tags
- *
- * @param string $str
- *
- * @return string
- */
- public function td($str, $mode = null)
- {
- if ("header" == $mode) {
- return "<td colspan='2' style='background-color:whitesmoke;font-size: 12px;'><b>" . strtoupper($str) . "</b></td>";
- } else {
- if ("body" == $mode) {
- return "<td style='font-size: 11px;width=35%'><i>". $str. "</i></td>";
- } else {
- return "<td>" . $str . "</td>";
- }
- }
- }
-
- /**
- * Encloses text in <tr> tags
- *
- * @param string $str
- * @param array $element
- *
- * @return string
- */
- public function tr($str)
- {
- return "<tr>" . $str . "</tr>";
- }
-
- /**
- * Encloses text in <table> tag
- *
- * @param string $key_element - header
- * @param array $element - command, description
- *
- * @return string
- */
- public function doTable($key_element, $element)
- {
- $str = "<table cellspacing='0' border='0' style='float:left;width:49%;'>";
- $str .= $this->td($key_element, "header");
-
- foreach ($element as $section) {
- $str .= $this->tr($this->td($section["name"], "body") . $this->td($section["description"], "body"));
- }
-
- return $str . "</table>\n\r";
- }
-}