Verzeichnisstruktur phpBB-3.3.15
- Veröffentlicht
- 28.08.2024
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. |
|
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
delete.php
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 namespace phpbb\console\command\thumbnail;
014
015 use Symfony\Component\Console\Input\InputInterface;
016 use Symfony\Component\Console\Output\OutputInterface;
017 use Symfony\Component\Console\Style\SymfonyStyle;
018
019 class delete extends \phpbb\console\command\command
020 {
021 /**
022 * @var \phpbb\config\config
023 */
024 protected $config;
025
026 /**
027 * @var \phpbb\db\driver\driver_interface
028 */
029 protected $db;
030
031 /**
032 * phpBB root path
033 * @var string
034 */
035 protected $phpbb_root_path;
036
037 /**
038 * Constructor
039 *
040 * @param \config\config $config The config
041 * @param \phpbb\user $user The user object (used to get language information)
042 * @param \phpbb\db\driver\driver_interface $db Database connection
043 * @param string $phpbb_root_path Root path
044 */
045 public function __construct(\phpbb\config\config $config, \phpbb\user $user, \phpbb\db\driver\driver_interface $db, $phpbb_root_path)
046 {
047 $this->config = $config;
048 $this->db = $db;
049 $this->phpbb_root_path = $phpbb_root_path;
050
051 parent::__construct($user);
052 }
053
054 /**
055 * Sets the command name and description
056 *
057 * @return null
058 */
059 protected function configure()
060 {
061 $this
062 ->setName('thumbnail:delete')
063 ->setDescription($this->user->lang('CLI_DESCRIPTION_THUMBNAIL_DELETE'))
064 ;
065 }
066
067 /**
068 * Executes the command thumbnail:delete.
069 *
070 * Deletes all existing thumbnails and updates the database accordingly.
071 *
072 * @param InputInterface $input The input stream used to get the argument and verbose option.
073 * @param OutputInterface $output The output stream, used for printing verbose-mode and error information.
074 *
075 * @return int 0 if all is ok, 1 if a thumbnail couldn't be deleted.
076 */
077 protected function execute(InputInterface $input, OutputInterface $output)
078 {
079 $io = new SymfonyStyle($input, $output);
080
081 $io->section($this->user->lang('CLI_THUMBNAIL_DELETING'));
082
083 $sql = 'SELECT COUNT(*) AS nb_missing_thumbnails
084 FROM ' . ATTACHMENTS_TABLE . '
085 WHERE thumbnail = 1';
086 $result = $this->db->sql_query($sql);
087 $nb_missing_thumbnails = (int) $this->db->sql_fetchfield('nb_missing_thumbnails');
088 $this->db->sql_freeresult($result);
089
090 if ($nb_missing_thumbnails === 0)
091 {
092 $io->warning($this->user->lang('CLI_THUMBNAIL_NOTHING_TO_DELETE'));
093 return 0;
094 }
095
096 $sql = 'SELECT attach_id, physical_filename, extension, real_filename, mimetype
097 FROM ' . ATTACHMENTS_TABLE . '
098 WHERE thumbnail = 1';
099 $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 }
161