110 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * Part of the Joomla Framework Session Package
 | |
|  *
 | |
|  * @copyright  Copyright (C) 2005 - 2021 Open Source Matters, Inc. All rights reserved.
 | |
|  * @license    GNU General Public License version 2 or later; see LICENSE
 | |
|  */
 | |
| 
 | |
| namespace Joomla\Session\Command;
 | |
| 
 | |
| use Joomla\Console\Command\AbstractCommand;
 | |
| use Joomla\Database\DatabaseInterface;
 | |
| use Joomla\Session\Exception\CreateSessionTableException;
 | |
| use Joomla\Session\Exception\UnsupportedDatabaseDriverException;
 | |
| use Joomla\Session\Handler\DatabaseHandler;
 | |
| use Symfony\Component\Console\Input\InputInterface;
 | |
| use Symfony\Component\Console\Output\OutputInterface;
 | |
| use Symfony\Component\Console\Style\SymfonyStyle;
 | |
| 
 | |
| /**
 | |
|  * Command used to create the session database table.
 | |
|  *
 | |
|  * @since  2.0.0
 | |
|  */
 | |
| class CreateSessionTableCommand extends AbstractCommand
 | |
| {
 | |
|     /**
 | |
|      * The default command name
 | |
|      *
 | |
|      * @var    string
 | |
|      * @since  2.0.0
 | |
|      */
 | |
|     protected static $defaultName = 'session:create-table';
 | |
| 
 | |
|     /**
 | |
|      * Database connector
 | |
|      *
 | |
|      * @var    DatabaseInterface
 | |
|      * @since  2.0.0
 | |
|      */
 | |
|     private $db;
 | |
| 
 | |
|     /**
 | |
|      * Instantiate the command.
 | |
|      *
 | |
|      * @param   DatabaseInterface  $db  Database connector
 | |
|      *
 | |
|      * @since   2.0.0
 | |
|      */
 | |
|     public function __construct(DatabaseInterface $db)
 | |
|     {
 | |
|         $this->db = $db;
 | |
| 
 | |
|         parent::__construct();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Configure the command.
 | |
|      *
 | |
|      * @return  void
 | |
|      *
 | |
|      * @since   2.0.0
 | |
|      */
 | |
|     protected function configure(): void
 | |
|     {
 | |
|         $this->setDescription('Creates the session database table if not already present');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Internal function to execute the command.
 | |
|      *
 | |
|      * @param   InputInterface   $input   The input to inject into the command.
 | |
|      * @param   OutputInterface  $output  The output to inject into the command.
 | |
|      *
 | |
|      * @return  integer  The command exit code
 | |
|      *
 | |
|      * @since   2.0.0
 | |
|      */
 | |
|     protected function doExecute(InputInterface $input, OutputInterface $output): int
 | |
|     {
 | |
|         $io = new SymfonyStyle($input, $output);
 | |
| 
 | |
|         $io->title('Create Session Table');
 | |
| 
 | |
|         // Check if the table exists
 | |
|         if (\in_array($this->db->replacePrefix('#__session'), $this->db->getTableList())) {
 | |
|             $io->success('The session table already exists.');
 | |
| 
 | |
|             return 0;
 | |
|         }
 | |
| 
 | |
|         try {
 | |
|             (new DatabaseHandler($this->db))->createDatabaseTable();
 | |
|         } catch (UnsupportedDatabaseDriverException $exception) {
 | |
|             $io->error($exception->getMessage());
 | |
| 
 | |
|             return 1;
 | |
|         } catch (CreateSessionTableException $exception) {
 | |
|             $io->error(\sprintf('The session table could not be created: %s', $exception->getMessage()));
 | |
| 
 | |
|             return 1;
 | |
|         }
 | |
| 
 | |
|         $io->success('The session table has been created.');
 | |
| 
 | |
|         return 0;
 | |
|     }
 | |
| }
 |