Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

generate.php

Zuletzt modifiziert: 09.10.2024, 12:55 - Dateigröße: 4.63 KiB


 001  <?php
 002  /**
 003  *
 004  * This file is part of the phpBB Forum Software package.
 005  *
 006  * @copyright (c) phpBB Limited <https://www.phpbb.com>
 007  * @license GNU General Public License, version 2 (GPL-2.0)
 008  *
 009  * For full copyright and license information, please see
 010  * the docs/CREDITS.txt file.
 011  *
 012  */
 013   
 014  namespace phpbb\console\command\thumbnail;
 015   
 016  use Symfony\Component\Console\Input\InputInterface;
 017  use Symfony\Component\Console\Output\OutputInterface;
 018  use Symfony\Component\Console\Style\SymfonyStyle;
 019   
 020  class generate extends \phpbb\console\command\command
 021  {
 022      /**
 023      * @var \phpbb\db\driver\driver_interface
 024      */
 025      protected $db;
 026   
 027      /**
 028      * @var \phpbb\cache\service
 029      */
 030      protected $cache;
 031   
 032      /**
 033      * phpBB root path
 034      * @var string
 035      */
 036      protected $phpbb_root_path;
 037   
 038      /**
 039      * PHP extension.
 040      *
 041      * @var string
 042      */
 043      protected $php_ext;
 044   
 045      /**
 046      * Constructor
 047      *
 048      * @param \phpbb\user $user The user object (used to get language information)
 049      * @param \phpbb\db\driver\driver_interface $db Database connection
 050      * @param \phpbb\cache\service $cache The cache service
 051      * @param string $phpbb_root_path Root path
 052      * @param string $php_ext PHP extension
 053      */
 054      public function __construct(\phpbb\user $user, \phpbb\db\driver\driver_interface $db, \phpbb\cache\service $cache, $phpbb_root_path, $php_ext)
 055      {
 056          $this->db = $db;
 057          $this->cache = $cache;
 058          $this->phpbb_root_path = $phpbb_root_path;
 059          $this->php_ext = $php_ext;
 060   
 061          parent::__construct($user);
 062      }
 063   
 064      /**
 065      * Sets the command name and description
 066      *
 067      * @return null
 068      */
 069      protected function configure()
 070      {
 071          $this
 072              ->setName('thumbnail:generate')
 073              ->setDescription($this->user->lang('CLI_DESCRIPTION_THUMBNAIL_GENERATE'))
 074          ;
 075      }
 076   
 077      /**
 078      * Executes the command thumbnail:generate.
 079      *
 080      * Generate a thumbnail for all attachments which need one and don't have it yet.
 081      *
 082      * @param InputInterface $input The input stream used to get the argument and verboe option.
 083      * @param OutputInterface $output The output stream, used for printing verbose-mode and error information.
 084      *
 085      * @return int 0.
 086      */
 087      protected function execute(InputInterface $input, OutputInterface $output)
 088      {
 089          $io = new SymfonyStyle($input, $output);
 090   
 091          $io->section($this->user->lang('CLI_THUMBNAIL_GENERATING'));
 092   
 093          $sql = 'SELECT COUNT(*) AS nb_missing_thumbnails
 094              FROM ' . ATTACHMENTS_TABLE . '
 095              WHERE thumbnail = 0';
 096          $result = $this->db->sql_query($sql);
 097          $nb_missing_thumbnails = (int) $this->db->sql_fetchfield('nb_missing_thumbnails');
 098          $this->db->sql_freeresult($result);
 099   
 100          if ($nb_missing_thumbnails === 0)
 101          {
 102              $io->warning($this->user->lang('CLI_THUMBNAIL_NOTHING_TO_GENERATE'));
 103              return 0;
 104          }
 105   
 106          $extensions = $this->cache->obtain_attach_extensions(true);
 107   
 108          $sql = 'SELECT attach_id, physical_filename, extension, real_filename, mimetype
 109              FROM ' . ATTACHMENTS_TABLE . '
 110              WHERE thumbnail = 0';
 111          $result = $this->db->sql_query($sql);
 112   
 113          if (!function_exists('create_thumbnail'))
 114          {
 115              require($this->phpbb_root_path . 'includes/functions_posting.' . $this->php_ext);
 116          }
 117   
 118          $progress = $this->create_progress_bar($nb_missing_thumbnails, $io, $output);
 119   
 120          $progress->setMessage($this->user->lang('CLI_THUMBNAIL_GENERATING'));
 121   
 122          $progress->start();
 123   
 124          $thumbnail_created = array();
 125          while ($row = $this->db->sql_fetchrow($result))
 126          {
 127              if (isset($extensions[$row['extension']]['display_cat']) && $extensions[$row['extension']]['display_cat'] == ATTACHMENT_CATEGORY_IMAGE)
 128              {
 129                  $source = $this->phpbb_root_path . 'files/' . $row['physical_filename'];
 130                  $destination = $this->phpbb_root_path . 'files/thumb_' . $row['physical_filename'];
 131   
 132                  if (create_thumbnail($source, $destination, $row['mimetype']))
 133                  {
 134                      $thumbnail_created[] = (int) $row['attach_id'];
 135   
 136                      if (count($thumbnail_created) === 250)
 137                      {
 138                          $this->commit_changes($thumbnail_created);
 139                          $thumbnail_created = array();
 140                      }
 141   
 142                      $progress->setMessage($this->user->lang('CLI_THUMBNAIL_GENERATED', $row['real_filename'], $row['physical_filename']));
 143                  }
 144                  else
 145                  {
 146                      $progress->setMessage('<info>' . $this->user->lang('CLI_THUMBNAIL_SKIPPED', $row['real_filename'], $row['physical_filename']) . '</info>');
 147                  }
 148              }
 149   
 150              $progress->advance();
 151          }
 152          $this->db->sql_freeresult($result);
 153   
 154          if (!empty($thumbnail_created))
 155          {
 156              $this->commit_changes($thumbnail_created);
 157          }
 158   
 159          $progress->finish();
 160   
 161          $io->newLine(2);
 162          $io->success($this->user->lang('CLI_THUMBNAIL_GENERATING_DONE'));
 163   
 164          return 0;
 165      }
 166   
 167      /**
 168      * Commits the changes to the database
 169      *
 170      * @param array $thumbnail_created
 171      */
 172      protected function commit_changes(array $thumbnail_created)
 173      {
 174          $sql = 'UPDATE ' . ATTACHMENTS_TABLE . '
 175                  SET thumbnail = 1
 176                  WHERE ' . $this->db->sql_in_set('attach_id', $thumbnail_created);
 177          $this->db->sql_query($sql);
 178      }
 179  }
 180