[ Index ]

PHP Cross Reference of phpBB-3.3.11-deutsch

title

Body

[close]

/phpbb/console/command/thumbnail/ -> delete.php (source)

   1  <?php
   2  /**
   3  *
   4  * This file is part of the phpBB Forum Software package.
   5  *
   6  * @copyright (c) phpBB Limited <https://www.phpbb.com>
   7  * @license GNU General Public License, version 2 (GPL-2.0)
   8  *
   9  * For full copyright and license information, please see
  10  * the docs/CREDITS.txt file.
  11  *
  12  */
  13  namespace phpbb\console\command\thumbnail;
  14  
  15  use Symfony\Component\Console\Input\InputInterface;
  16  use Symfony\Component\Console\Output\OutputInterface;
  17  use Symfony\Component\Console\Style\SymfonyStyle;
  18  
  19  class delete extends \phpbb\console\command\command
  20  {
  21      /**
  22      * @var \phpbb\config\config
  23      */
  24      protected $config;
  25  
  26      /**
  27      * @var \phpbb\db\driver\driver_interface
  28      */
  29      protected $db;
  30  
  31      /**
  32      * phpBB root path
  33      * @var string
  34      */
  35      protected $phpbb_root_path;
  36  
  37      /**
  38      * Constructor
  39      *
  40      * @param \config\config $config The config
  41      * @param \phpbb\user $user The user object (used to get language information)
  42      * @param \phpbb\db\driver\driver_interface $db Database connection
  43      * @param string $phpbb_root_path Root path
  44      */
  45  	public function __construct(\phpbb\config\config $config, \phpbb\user $user, \phpbb\db\driver\driver_interface $db, $phpbb_root_path)
  46      {
  47          $this->config = $config;
  48          $this->db = $db;
  49          $this->phpbb_root_path = $phpbb_root_path;
  50  
  51          parent::__construct($user);
  52      }
  53  
  54      /**
  55      * Sets the command name and description
  56      *
  57      * @return null
  58      */
  59  	protected function configure()
  60      {
  61          $this
  62              ->setName('thumbnail:delete')
  63              ->setDescription($this->user->lang('CLI_DESCRIPTION_THUMBNAIL_DELETE'))
  64          ;
  65      }
  66  
  67      /**
  68      * Executes the command thumbnail:delete.
  69      *
  70      * Deletes all existing thumbnails and updates the database accordingly.
  71      *
  72      * @param InputInterface $input The input stream used to get the argument and verbose option.
  73      * @param OutputInterface $output The output stream, used for printing verbose-mode and error information.
  74      *
  75      * @return int 0 if all is ok, 1 if a thumbnail couldn't be deleted.
  76      */
  77  	protected function execute(InputInterface $input, OutputInterface $output)
  78      {
  79          $io = new SymfonyStyle($input, $output);
  80  
  81          $io->section($this->user->lang('CLI_THUMBNAIL_DELETING'));
  82  
  83          $sql = 'SELECT COUNT(*) AS nb_missing_thumbnails
  84              FROM ' . ATTACHMENTS_TABLE . '
  85              WHERE thumbnail = 1';
  86          $result = $this->db->sql_query($sql);
  87          $nb_missing_thumbnails = (int) $this->db->sql_fetchfield('nb_missing_thumbnails');
  88          $this->db->sql_freeresult($result);
  89  
  90          if ($nb_missing_thumbnails === 0)
  91          {
  92              $io->warning($this->user->lang('CLI_THUMBNAIL_NOTHING_TO_DELETE'));
  93              return 0;
  94          }
  95  
  96          $sql = 'SELECT attach_id, physical_filename, extension, real_filename, mimetype
  97              FROM ' . ATTACHMENTS_TABLE . '
  98              WHERE thumbnail = 1';
  99          $result = $this->db->sql_query($sql);
 100  
 101          $progress = $this->create_progress_bar($nb_missing_thumbnails, $io, $output);
 102  
 103          $progress->setMessage($this->user->lang('CLI_THUMBNAIL_DELETING'));
 104  
 105          $progress->start();
 106  
 107          $thumbnail_deleted = array();
 108          $return = 0;
 109          while ($row = $this->db->sql_fetchrow($result))
 110          {
 111              $thumbnail_path = $this->phpbb_root_path . $this->config['upload_path'] . '/thumb_' . $row['physical_filename'];
 112  
 113              if (@unlink($thumbnail_path))
 114              {
 115                  $thumbnail_deleted[] = $row['attach_id'];
 116  
 117                  if (count($thumbnail_deleted) === 250)
 118                  {
 119                      $this->commit_changes($thumbnail_deleted);
 120                      $thumbnail_deleted = array();
 121                  }
 122  
 123                  $progress->setMessage($this->user->lang('CLI_THUMBNAIL_DELETED', $row['real_filename'], $row['physical_filename']));
 124              }
 125              else
 126              {
 127                  $return = 1;
 128                  $progress->setMessage('<error>' . $this->user->lang('CLI_THUMBNAIL_SKIPPED', $row['real_filename'], $row['physical_filename']) . '</error>');
 129              }
 130  
 131              $progress->advance();
 132          }
 133          $this->db->sql_freeresult($result);
 134  
 135          if (!empty($thumbnail_deleted))
 136          {
 137              $this->commit_changes($thumbnail_deleted);
 138          }
 139  
 140          $progress->finish();
 141  
 142          $io->newLine(2);
 143          $io->success($this->user->lang('CLI_THUMBNAIL_DELETING_DONE'));
 144  
 145          return $return;
 146      }
 147  
 148      /**
 149      * Commits the changes to the database
 150      *
 151      * @param array $thumbnail_deleted
 152      */
 153  	protected function commit_changes(array $thumbnail_deleted)
 154      {
 155          $sql = 'UPDATE ' . ATTACHMENTS_TABLE . '
 156                  SET thumbnail = 0
 157                  WHERE ' . $this->db->sql_in_set('attach_id', $thumbnail_deleted);
 158          $this->db->sql_query($sql);
 159      }
 160  }


Generated: Sat Nov 4 14:26:03 2023 Cross-referenced by PHPXref 0.7.1